Docker容器实战九:容器生命周期管理

网友投稿 274 2022-10-19

Docker容器实战九:容器生命周期管理

本文将讲解关于容器生命周期的管理,包括容器的创建、维护、停止到删除的整个过程。

一. 创建容器

创建新的容器可以使用docker [container] run命令,该命令会创建一个容器并启动运行。

如:

$ docker run nginx:1.21

docker [container] run命令带有非常多的选项,在实际应用中,我们会根据需要添加对应的项进行启动。

下面我们通过多个示例来进行了解。

更改镜像的默认启动命令

在命令最后加上需要执行的命令,此时新命令将覆盖原有镜像中的启动命令。

$ docker run centos echo 'Hello World'Hello World

注:如果镜像是用ENTRYPOINT指令启动的话,那么新的命令只会做为参数加到原有命令后面。

后台运行容器​

通常而言,我们会将提供服务的容器在后台以守护进程的方式运行,这样可以避免当我们退出当前终端时,容器运行终止。通过添加 -d 参数即可实现,如下:

$ docker run -d nginx:1.21

命名容器

在启动容器时,Docker会为容器分配一个随机的名称,为了方便辨识,我们可以用--name选项指定容器的名称。名称必须在宿主机中唯一,否则会出现报错提示。

$ docker run -d --name web nginx:1.21

开放网络端口​

如果需要通过网络访问容器服务,那么可通过添加-p 参数将容器端口与本机绑定。格式为 -p host_port:container_port 或者 host_ip:host_port:container_port 。

如:

$ docker run -d -p 80:80 nginx:1.21

在将端口绑定后,此时在浏览器中通过本机IP直接访问80端口,即可访问nginx页面。

如果本机有多张网卡,而只需要在其中一张网卡上映射端口的话,可以加上网卡IP地址 。

如:

$ docker run -d -p 192.168.10.20:80:80 nginx:1.21

甚至,我们还可以指定对应的网络协议。

$ docker run -d -p 192.168.10.20:80:80/tcp nginx:1.21

目录挂载​

在容器被删除后,容器里面保存的数据也会跟着一起被清理。如果想将数据持久化,可以使用 -v的参数,将容器目录挂载到本机存储卷中,格式为 -v host_path:container_path。

如下面的命令会将宿主机的/data/nginx目录挂载到容器中的/data/nginx,这样可将数据保存到本机目录。

$ docker run -d -p 80:80 -v /data/nginx:/data/nginx nginx:1.21

以上只是命令其中一部分使用方法,更多内容读者可通过 --help自行查阅。

二. 查看容器

1. 查看容器状态

执行docker ps 或docker [container] ls 命令,可以查看当前正在运行中的容器。

$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESdca4193d0509 nginx:1.21 "/docker-entrypoint.…" 8 minutes ago Up 8 minutes 80/tcp cool_mendeleev

注释:CONTAINER ID为容器的短ID号;IMAGE为该容器使用的镜像;COMMAND显示容器执行的命令;CREATED为创建时间;STATUS为容器状态;PORTS显示映射的端口号;NAMES为容器名称。

如果要查看所有容器,则需要加上 -a选项,此时会显示包括已退出的容器在内的完整列表。

$ docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESb2cdebf18464 nginx:1.21 "/docker-entrypoint.…" 9 minutes ago Exited (127) 9 minutes ago boring_leakeydca4193d0509 nginx:1.21 "/docker-entrypoint.…" 10 minutes ago Up 10 minutes 80/tcp cool_mendeleev

2. 查看容器详情

使用docker [container] inspect 命令,可以查看指定容器的详细信息。

$ docker inspect b2cdebf18464[ { "Id": "b2cdebf184644afbf9c2d3cddba1dc632eb7bf990766c4a548585512b04b88ca", "Created": "2022-04-22T11:58:59.155528401Z", "Path": "/docker-entrypoint.sh", "Args": [......

命令支持使用容器名称或ID号指定,结果将以Json格式返回,包括容器id、创建时间、镜像、配置等信息。

3. 查看容器进程

要查看容器内进程情况,可以使用docker [container] top 命令,输出结果包括PID、启动命令等基本信息。

$ docker container top cool_mendeleevUID PID PPID C STIME TTY TIME CMDroot 7494 7475 0 07:58 ? 00:00:00 nginx: master process nginx -g daemon off;101 7545 7494 0 07:58 ? 00:00:00 nginx: worker process101 7546 7494 0 07:58 ? 00:00:00 nginx: worker process

4. 查看容器资源情况

docker [container] stats 可用于查看容器的资源使用情况,如CPU、内存、网络等信息。

$ docker stats cool_mendeleevCONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDSdca4193d0509 cool_mendeleev 0.00% 20.06MiB / 1.777GiB 1.10% 9.7MB / 148kB 0B / 8.61MB 3

三. 进入容器

Docker的exec命令用于在运行的容器中执行命令,比较重要的参数有:

-d, --detach:在容器中后台执行命令;

--privileged=true|false:是否给执行命令以高权限,默认值为false;

-i, --interactive=true|false:打开标准输入接受用户输入命令,默认值为false;

-t, --tty=true|false:分配伪终端,默认值为false;

在某些场景下,我们可能需要进入到容器里面进行查看或操作,此时,可以使用docker  [container] exec命令来实现。-it选项将会分配一个交互的伪终端,并连接到容器内系统。

$ docker exec -it cool_mendeleev bashroot@dca4193d0509:/#

四. 启动/停止容器

Docker支持启动/停止/重启几个操作,对应的命令选项分别为docker [container] + start/stop/restart +

$ docker start cool_mendeleev #启动$ docker stop cool_mendeleev #退出$ docker restart cool_mendeleev #重启$ docker pause cool_mendeleev #暂停

在使用stop命令停止容器时,该命令并不是直接关掉容器,而是先向它发送SIGTERM信号,要求程序正常退出。在等待超时后(默认为10秒),会再发送SIGKILL信号来终止容器。

如果希望立即杀死容器进程,则可以使用docker kill  命令操作。

五. 删除容器

在容器不需要使用时,我们可以用stop 命令将其停止,这样不会占用机器的CPU和内存资源。但在容器停止后,依然会占用宿主机的存储空间,如果确定后续不再使用,我们可以用docker [container] rm +  将其删除。

$ docker rm cool_mendeleev

rm命令可同时删除多个容器,删除前请先确认容器已经停上,否则会有报错提示。虽然可以添加 -f 参数强行删除运行中的容器,但不建议如此操作。

docker container prune 命令也是用于清理容器,但它的好处是不需要指定容器。在运行命令后会清理所有已经停止的容器,并在执行完成后汇报回收空间大小。

$ docker container prune WARNING! This will remove all stopped containers.Are you sure you want to continue? [y/N] yDeleted Containers:9477c87afadf810f24a46d356b8eb3995756f8adcc3f1ac4ad6f15812e9302a277f5a301bf079419cafd81e7c5be5f69a7ccf6e8158d98747752f03d357f955cTotal reclaimed space: 2.186kB

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:RocketMQ设计之同步刷盘
下一篇:#云原生征文# 持续集成CI/CD之工具快速搭建
相关文章

 发表评论

暂时没有评论,来抢沙发吧~