1. Docker容器生命周期管理
1.1 Docker容器状态图
1.2 Docker容器运行
docker run:运行容器
语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
选项:
-d: 后台运行容器,并返回容器ID
-i: 以交互模式运行容器,通常与 -t 同时使用
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
--name="CONTAINER_NAME": 为容器指定一个名称
-h "CONTAINER_HOSTNAME": 指定容器的hostname
-e username="ritchie": 设置环境变量
--env-file=[]: 从指定文件读入环境变量
--net="bridge": 指定容器的网络连接类型
--volume , -v: 绑定一个卷
--restart=always|on-failure:3 设置重启策略
#用nginx:latest镜像后台启动一个名称为nginx的容器
[root@docker ~]# docker run -d --name nginx nginx:latest
b21290a97db082d8da61e6815370b6e988888368d536a6617d1eef38fb5bee26
备注:docker run返回的是镜像的长ID
#用nginx:latest镜像后台启动一个nginx容器并且将容器的80端口随机映射到主机
[root@docker ~]# docker -d run -P nginx:latest
1de5ec47cc6b17a7240ad2de26cb97b861a7e720f68a7c24391358e28c1b40bf
#用nginx:latest镜像后台启动一个进程并且容器的80端口映射到主机80端口,同时将主机的/data目录映射到容器
[root@docker ~]# docker -d run -p 80:80 -v /data:/data nginx:latest
8f5fd85307d26b143729a5ec1292366ed5a98c37861c755933fdb5a5b17ee1b4
#用nginx:latest镜像启动一个容器并进入容器内部
[root@docker ~]# docker run -it nginx:latest /bin/bash
root@b0ff1b41b29d:/# exit
备注:容器内部可以使用exit命令退出
1.3 查看容器
docker ps:查看容器状态
语法:docker ps [OPTIONS]
选项:
-a :显示所有的容器,包括未运行的
-f :根据条件过滤显示的内容
--format :指定返回值的模板文件
-l :显示最近创建的容器
-n :列出最近创建的n个容器。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
#查看正在运行的容器
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8f5fd85307d2 nginx:latest "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp elastic_ride
1de5ec47cc6b nginx:latest "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 0.0.0.0:32768->80/tcp musing_northcutt
b21290a97db0 nginx:latest "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 80/tcp nginx
CONTAINER ID:容器短ID(长ID的前12位)
IMAGE:镜像名称
COMMAND:启动容器时运行的命令
CREATED:运行时间
STATUS:容器状态
created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
PORTS:容器的端口信息和使用的连接类型(tcp\udp)
NAMES: 容器名称,没有使用--name选项指定则自动分配
#查看所有的容器
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b0ff1b41b29d nginx:latest "/docker-entrypoint.…" 5 minutes ago Exited (0) 5 minutes ago vibrant_matsumoto
8f5fd85307d2 nginx:latest "/docker-entrypoint.…" 6 minutes ago Up 6 minutes 0.0.0.0:80->80/tcp elastic_ride
1de5ec47cc6b nginx:latest "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 0.0.0.0:32768->80/tcp musing_northcutt
b21290a97db0 nginx:latest "/docker-entrypoint.…" 8 minutes ago Up 8 minutes 80/tcp nginx
备注:所有容器包括退出运行状态的容器
#查看容器ID
[root@docker ~]# docker ps -a -q
b0ff1b41b29d
8f5fd85307d2
1de5ec47cc6b
b21290a97db0
1.4 进入容器内部
docker exec:在运行的容器中执行命令
语法:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
选项:
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN打开
-t :分配一个伪终端
#进入nginx容器内部
[root@docker ~]# docker exec -it nginx /bin/bash
root@b21290a97db0:/#
备注:-it用于进入nginx的内部,/bin/bash以bash环境进入容器
#容器执行命令
[root@docker ~]# docker exec nginx date
Thu Sep 24 11:55:41 UTC 2020
[root@docker ~]# docker exec nginx nginx -v
nginx version: nginx/1.19.2
docker attach:连接到正在运行中的容器
语法:docker attach [OPTIONS] CONTAINER
备注:
1)docker attach要attach上去的容器必须正在运行,可以同时连接上同一个container来共享屏幕
2)docker attach要attach上的容器必须是有输出的否则没什么效果
3)CTRL-C退出attach容器会导致退出容器,--sig-proxy=false来确保CTRL-D或CTRL-C不会关闭容器
4)Ctrl+p然后Ctrl+q组合键可以退出attach终端
1.5 停止运行的容器
docker stop:停止一个运行中的容器
docker stop [OPTIONS] CONTAINER [CONTAINER...]
#停止nginx容器
[root@docker ~]# docker stop nginx
nginx
备注:容器在docker host中是一个进程,docker stop命令本质上是向该进程发送一个 SIGTERM信号
docker kill:杀掉一个运行中的容器
语法:docker kill [OPTIONS] CONTAINER [CONTAINER...]
选项:
-s :向容器发送一个信号
#停止一个容器
[root@docker ~]# docker kill elastic_ride
elastic_ride
1.6 启动容器
docker start:启动一个或多个已经被停止的容器
语法:docker start [OPTIONS] CONTAINER [CONTAINER...]
#启动nginx容器
[root@docker ~]# docker start nginx
nginx
备注:docker start可以启动处于停止状态的容器,并且会保留容器的第一次启动时的所有参数
docker restart:重启容器
语法:docker restart [OPTIONS] CONTAINER [CONTAINER...]
#重启nginx容器
[root@docker ~]# docker restart nginx
nginx
备注:docker restart可以重启容器,其作用就是依次执行docker stop和docker start
1.7 暂停容器
docker pause:暂停容器中所有的进程
语法:docker pause [OPTIONS] CONTAINER [CONTAINER...]
#暂停nginx容器
[root@docker ~]# docker pause nginx
nginx
[root@docker ~]# docker ps -a -f name=nginx
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b21290a97db0 nginx:latest "/docker-entrypoint.…" 35 minutes ago Up 5 minutes (Paused) 80/tcp nginx
备注:处于paused状态的容器不会消耗CPU资源
docker unpause:恢复容器中所有的进程
语法:docker unpause [OPTIONS] CONTAINER [CONTAINER...]
#恢复nginx容器
[root@docker ~]# docker unpause nginx
nginx
[root@docker ~]# docker ps -a -f name=nginx
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b21290a97db0 nginx:latest "/docker-entrypoint.…" 35 minutes ago Up 5 minutes 80/tcp nginx
1.8 删除容器
docker rm:删除一个或多个容器。
语法:docker rm [OPTIONS] CONTAINER [CONTAINER...]
选项:
-f :通过 SIGKILL 信号强制删除一个运行中的容器
-l :移除容器间的网络连接,而非容器本身
-v :删除与容器关联的卷
#删除nginx容器
[root@docker ~]# docker rm nginx
Error response from daemon: You cannot remove a running container b21290a97db082d8da61e6815370b6e988888368d536a6617d1eef38fb5bee26. Stop the container before attempting removal or force remove
备注:处于运行状态的容器不能被删除
#强制删除nginx容器
[root@docker ~]# docker rm -f nginx
nginx
#匹配删除容器
[root@docker ~]# docker rm -f `docker ps -a -q`
b0ff1b41b29d
8f5fd85307d2
1de5ec47cc6b