4

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

 1 year ago
source link: https://blog.51cto.com/u_14065119/5366916
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

一. 创建容器

创建新的容器可以使用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 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dca4193d0509 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 -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b2cdebf18464 nginx:1.21 "/docker-entrypoint.…" 9 minutes ago Exited (127) 9 minutes ago boring_leakey
dca4193d0509 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_mendeleev
UID PID PPID C STIME TTY TIME CMD
root 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 process
101 7546 7494 0 07:58 ? 00:00:00 nginx: worker process

4. 查看容器资源情况 

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

$ docker stats cool_mendeleev
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
dca4193d0509 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 bash
root@dca4193d0509:/#

四. 启动/停止容器

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

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

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

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

五. 删除容器

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

$ 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] y
Deleted Containers:
9477c87afadf810f24a46d356b8eb3995756f8adcc3f1ac4ad6f15812e9302a2
77f5a301bf079419cafd81e7c5be5f69a7ccf6e8158d98747752f03d357f955c


Total reclaimed space: 2.186kB

专注于Devops、SRE、运维开发等技术分享,扫码关注公众号,获取更多精彩内容!

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK