03-Docker入门
在运行之前,首先通过如下命令确认Docker的状态
python
sudo docker info
运行第一个容器
运行如下命令,运行我们的第一个centos容器,如果本地没有该镜像,就会自动下载。这里的两个参数,-i保证我们可以输入,-t可以提供一个终端,这样才会有一个交互式的shell。
python
[root@node2 /]# docker run -i -t centos:7 /bin/bash
Unable to find image 'centos:7' locally
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:7
使用第一个容器
我们已经进入了这个容器,可以通过hostname查看机器名
python
[root@e870712763e6 /]# hostname
e870712763e6
事实上,这个容器就是一个模拟的centos系统,
python
[root@e870712763e6 /]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
理论上你可以用他做任何事情,比如安装vim
python
[root@e870712763e6 /]# yum update & yum install vim
退出容器:
python
[root@e870712763e6 /]# exit
退出后容器就不在运行了,可以通过ps -a命令查看当前机器上的容器
python
[root@node2 /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e870712763e6 centos:7 "/bin/bash" 10 minutes ago Exited (0) 48 seconds ago elastic_tu
a20d2750859a hello-world "/hello" 2 hours ago Exited (0) 2 hours ago keen_heyrovsky
容器命名
如果创建时没有指定名称,Docker会自动生成一个名称,比如上面的elastic_tu
可以在创建时使用如下命令命名:
python
docker run --name my_centos7 -i -t centos:7 /bin/bash
也可以用rename修改名称
python
docker rename elastic_tu my_centos7
可以看到已经改名成功
python
[root@node2 /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e870712763e6 centos:7 "/bin/bash" 16 minutes ago Exited (0) 7 minutes ago my_centos7
启动已停止的容器
可以使用ID或Name来启动,启动后默认和上次的run命令一样
python
[root@node2 /]# docker start my_centos7
此时容器已经运行了,通过docker ps命令可以看到
python
[root@node2 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e870712763e6 centos:7 "/bin/bash" 22 minutes ago Up 2 seconds my_centos7
如果需要进入shell界面,需要使用attach命令
python
[root@node2 /]# docker attach my_centos7
创建守护式容器
很多时候我们需要容器在退出后继续运行,此时就需要运行守护式容器,也即是daemonize container。可以通过下面命令创建:
python
[root@node4 ~]# sudo docker run --name my_daemon -d centos:7 /bin/sh -c "while true; do echo hello world; sleep 1; done"
afe2544f583833e483f6cfe6b2bedaff936dca4548396b36a94b4e6665061834
运行此命令后,系统仅仅返回一个容器id,不会返回bash界面。可以通过docker ps命令看到这个运行中的容器
python
[root@node4 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
afe2544f5838 centos:7 "/bin/sh -c 'while t..." 2 minutes ago Up About a minute my_daemon
查看守护式容器
可以通过docker logs命令查看日志
python
[root@node4 ~]# sudo docker logs my_daemon
hello world
hello world
hello world
hello world
可以通过-f参数,-t加上时间戳进行跟踪(用ctrl+c退出
python
sudo docker logs -ft my_daemon
2024-04-04T12:09:19.636861979Z hello world
2024-04-04T12:09:20.654969250Z hello world
2024-04-04T12:09:21.671809247Z hello world
2024-04-04T12:09:22.682771892Z hello world
用---tail参数可以跟踪最后10行内容
python
sudo docker logs --tail 10 my_daemon
可以通过---log-driver参数指定日志输出位置,这样docker logs中就看不到日志了
python
docker run --log-driver="Syslog" --name daemon2 -d centos:7 /bin ...后面还是输出hello
查看容器内的进程
使用docker top命令可以看到容器内运行了哪些进程
python
[root@node4 ~]# docker top my_daemon
UID PID PPID C STIME TTY TIME CMD
root 1600 1582 0 19:58 ? 00:00:01 /bin/sh -c while true; do echo hello world; sleep 1; done
root 2874 1600 0 20:18 ? 00:00:00 sleep 1
使用docker stats查看容器状态,如果有多个守护进程的话会一起显示
python
docker stats 后面可以跟容器name 也可以不跟
在守护容器中运行其他进程
要在守护容器中启动其他进程,可以使用docker exec命令
python
[root@node4 ~]# docker exec -d my_daemon touch /opt/newfile
以上命令创建一个空文件。我们也可以启动一个bash界面,然后看下刚刚创建的文件
python
[root@node4 ~]# docker exec -t -i my_daemon /bin/bash
[root@afe2544f5838 /]# cd /opt
[root@afe2544f5838 opt]# ls
newfile
停止和自动重启守护式容器
使用docker stop命令来终止运行中的守护式容器,同样支持id和name
python
root@node4 ~]# docker stop my_daemon
如果希望容器在错误退出后自动重启,可以使用---restart参数
python
sudo docker run --restart=always --name alive_daemon -d centos:7 ......
可以指定退出代码为非0的值时,才会重启;同时可以指定重启次数
python
--restart=on-failure:5
查看容器详情
ps命令可以查看容器的简单信息,详细信息可以通过inspect命令查看
python
[root@node4 ~]# docker inspect my_daemon
[
{
"Id": "afe2544f583833e483f6cfe6b2bedaff936dca4548396b36a94b4e6665061834",
"Created": "2024-04-04T11:58:37.93042412Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true; do echo hello world; sleep 1; done"
],
......后略
比如要查看ip地址,可以使用如下format命令(如果容器不在运行,IP地址会是一个空值
python
[root@node4 ~]# docker inspect --format='{{ .NetworkSettings.IPAddress }}' my_daemon
172.17.0.2
删除容器
使用docker rm命令来删除容器(删除之前需要停止
python
# 也支持id
docker rm my_daemon
通过如下命令可以删除所有容器,生产环境慎用,否则准备提桶
python
[root@node4 ~]# docker rm `docker ps -a -q`
d86aada3acab
5a3d7d0c0093
小结
本章学习了如何使用docker创建、启动、查看和删除容器。这是今后的基础。