内容摘要
- 运行容器
- 查询容器
- 停止/启动/重启容器
运行容器
在容器环境安装好后,可以运行容器,先体验下容器的基本功能。
使用Xshell登陆阿里云上安装好的虚拟机。
首先检验容器是否正常,命令为:
systemctl status docker
如果出现图中红框内容,那么说明docker运行正常。
下面运行一个简单的容器,命令为:
docker run centos pwd
说明:
1、运行容器命令格式为:docker run 镜像名 命令,上面的容器镜像为centos,容器执行命令为pwd;
注意:容器镜像后面再介绍,现在大家可以认为镜像就是一个应用,比如centos,mysql;
2、操作是说在容器运行时执行的指令,该指令在容器中运行,这里只是简单的运行pwd,获取当前目录;
3、“/”是pwd命令运行的结果,说明该容器当前的工作目录为根目录;
查看刚才运行的容器,命令:
docker ps
没有看到任何运行的容器。
新增参数 -a,再次查询容器,命令:
docker ps -a
这次可以看到刚才运行的容器了,那么为什么 docker ps 无法查询呢?
请大家看下 STATUS 列,状态为 Exited ,可见 docker ps无法查询状态为 Exited 的容器。
-a ,就是 all 的简写,意思就是查询所有容器。
问题:centos容器运行感觉很快,执行完 pwd 命令后,就退出了,那么如何才能让 centos 容器一直运行,不退出呢?
容器运行时间长短取决于启动时执行的命令,只要命令没有执行完,容器就不会退出。比如 centos 容器执行的 pwd 命令执行的就很快,所以容器很快就结束了。
下面我们重新运行该容器,修改容器执行命令,让容器一直运行下去,命令为:
docker run centos /bin/bash -c "while true; do sleep 5; echo hello docker; done"
命令为while循环的脚本,每隔5秒打印“hello docker”字段。重新打开一个终端,查询容器:
可以看到STATUS列变为“Up”。
不过上面运行的容器有一个缺点:占用了一个终端
可以使用 -d 参数运行容器,-d 就是daemon,以后台方式运行容器,命令为:
docker run -d centos /bin/bash -c "while true; do sleep 5; echo hello docker; done"
使用docker ps -a 查询容器
查询信息说明:
CONTAINER ID:容器的短ID,长ID为上面倒数第2个图中输出的结果,即:0c359919ff481a03a035c10c96db7d79ea8ebf2c35860f5fcd51b8367e867e00
短ID为长ID前12个字符。
IMAGE:容器镜像名称;
COMMAND:容器启动执行的命令,这里就是while循环;
CREATED:创建时间;
STATUS:容器状态,后面在容器生命周期一节介绍;
PORTS:容器端口,在容器网络章节中介绍;
NAMES:容器名称,随机生成,注意容器名称和容器镜像名称不一样;
可以在容器运行时指定名称,使用 --name 参数,命令为:
docker run -d --name mycentos centos /bin/bash -c "while true; do sleep 5; echo hello docker; done"
可见在NAMES列,名称变为自己设置的 "mycentos"。
查询容器
上面已经使用了docker ps 命令查询容器,输出的是简要的信息,那么如何查询容器的详细信息呢?
命令:
docker inspect 容器ID/容器名
查询出来的信息相当多,这里就不完全展示了,大家可以在实验中进行观察。
停止/启动/重启容器
停止容器,命令为:
docker stop 容器ID/容器名
容器停止后,状态变为"Exited"。
docker stop无法立即停止容器,容器相当于一个进程,stop命令本质是向该进程发送了一个SIGTERM信号。如果想立即停止容器,可以使用docker kill 命令,其本质是向容器进程发送SIGKILL信号。
容器停止后,启动容器 ,命令为:
docker start 容器ID/容器名
可以看到,刚才停止的容器又启动了,状态变为“Up”。
重启状态为“Up”的容器,重启操作相当于stop + start,命令为:
docker restart 容器ID/容器名
注意:可以观察下start和restart操作后,查询容器结果的COMMAND列以及NAMES等列,可以发现这两个操作保留了第一次启动容器的所有参数。
问题:容器如果发生错误会停止运行,那么如何才能保证容器自动重启呢?
使用 --restart=always 运行容器,命令为:
docker run -d --restart=always centos /bin/bash -c "sleep5"
容器运行 "sleep 5" 命令,每隔5秒重启。大家可以观察STATUS列,容器启动了4次,睡眠5秒后,又不断重启。
容器每次退出都是执行完 sleep 5命令后执行的,是正常退出。这也意味着:
--restart=always 参数表示容器无论是否正常退出,都会重启。
问题:对于自动重启的容器使用 docker stop 命令会如何表现呢?
可以看到 docker stop 命令是有效的,观察STATUS列,可以看到容器没有重启了,状态一直为“Exited”。
问题:能否限制容器重启次数呢?
使用 --restart=on-failure:3参数,表示如果启动进程退出代码非0,则重启,最多重启3次,反之,不重启,命令为:
docker run -d --restart=on-failure:3 centos /bin/bash -c "sleep5"
可以看到,容器运行完后,没有重启,这是因为退出代码为0,正常退出,所以没有重启。
如果容器运行指令退出码非0,修改命令为:
docker run -d --restart=on-failure:3 centos /bin/bash -c "sleep5; exit 1"
将容器执行命令变为:sleep5; exit 1,这样该命令退出码变为1。
结合CREATED和STATUS两列可以看出容器在重启3次后,就没有重启了,状态变为"Exited"了。
这节就讲到这里了,请大家按照本节的内容,在阿里云ECS服务器上做实验。
实验
- 运行容器
- 查询容器
- 停止/启动/重启容器