Docker Container
本文最后更新于:2024年3月18日 凌晨
Docker Container
容器生命周期
run
1 |
|
- -a stdin:指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d:后台运行容器,并返回容器ID
- -i:以交互模式运行容器,通常与 -t 同时使用。
- -P:随机端口映射,容器内部端口随机映射到主机的端口。
- -p, --publish=[]:指定端口映射,格式为**:主机(宿主)端口:容器端口**,默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp
- -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- –name:为容器指定一个名称。
- –dns:指定容器使用的DNS服务器,默认和宿主一致。
- –dns-search:指定容器DNS搜索域名,默认和宿主一致。
- -h,–hostname:指定容器的hostname
- -e,–env:设置环境变量。
- –env-file=[]:从指定文件读入环境变量。
- –cpuset=“0-2” or --cpuset=“0,1,2”:绑定容器到指定CPU运行。
- -m:设置容器使用内存最大值。
- –net=“bridge”:指定容器的网络连接类型,支持bridge/host/none/container:四种类型。
- –link=[]:添加链接到另一个容器。
- –expose=[]:开放一个端口或一组端口。
- –volume , -v: 绑定一个卷。
- –rm:使用之后自动删除,一般用来测试。
- –privileged=true:使用特权模式启动,在容器中可以使用systemctl启动服务。
- –restart=always:自动重启容器。
实例
- 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx
1 |
|
- 使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
1 |
|
- 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data
1 |
|
- 绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。
1 |
|
- 使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
1 |
|
rm
1 |
|
- -f:通过 SIGKILL 信号强制删除一个运行中的容器。
- -l:移除容器间的网络连接,而非容器本身。
- -v:删除与容器关联的卷。
实例
- 强制删除容器 db01,db02:
1 |
|
- 移除容器 nginx01 对容器 db01 的连接,连接名 db:
1 |
|
- 删除容器 nginx01,并删除容器挂载的数据卷:
1 |
|
- 删除所有已经停止的容器:
1 |
|
start/stop/restart/kill
- docker start :启动一个或多个已经被停止的容器。
1 |
|
- docker stop :停止一个运行中的容器。
1 |
|
- docker restart :重启容器。
1 |
|
- docker kill :杀掉一个运行中的容器。
1 |
|
- -s:向容器发送一个信号。
实例
- 杀掉运行中的容器mynginx
1 |
|
exec
- docker exec:在运行的容器中执行命令。
1 |
|
- -d:分离模式:在后台运行。
- -i:即使没有附加也保持STDIN 打开。
- -t:分配一个伪终端。
实例
- 在容器
mynginx
中以交互模式执行容器内/root/test.sh
脚本:
1 |
|
- 在容器 mynginx 中开启一个交互模式的终端:
1 |
|
- 也可以通过 docker ps -a 命令查看已经在运行的容器,然后使用容器 ID 进入容器。
- 查看已经在运行的容器 ID:
1 |
|
- 第一列的 9df70f9a0714 就是容器 ID
- 通过 exec 命令对指定的容器执行 bash:
1 |
|
pause/unpause
- docker pause :暂停容器中所有的进程。
- docker unpause :恢复容器中所有的进程。
1 |
|
实例
- 暂停数据库容器db01提供服务。
1 |
|
- 恢复数据库容器db01提供服务。
1 |
|
create
- docker create:创建一个新的容器但不启动它。
1 |
|
语法同docker run
实例
- 使用docker镜像nginx:latest创建一个容器,并将容器命名为mynginx
1 |
|
容器管理
ps
1 |
|
-
-a:显示所有的容器,包括未运行的。
-
-f:根据条件过滤显示的内容。
-
–format:指定返回值的模板文件。
-
-l:显示最近创建的容器。
-
-n:列出最近创建的n个容器。
-
–no-trunc:不截断输出。
-
-q:静默模式,只显示容器编号。
-
-s:显示总的文件大小。
实例
- 列出所有在运行的容器信息。
1 |
|
-
CONTAINER ID:容器 ID
-
IMAGE:使用的镜像。
-
COMMAND:启动容器时运行的命令。
-
CREATED:容器的创建时间。
-
STATUS:容器状态。
- 状态有7种:
- created(已创建)
- restarting(重启中)
- running(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
-
PORTS:容器的端口信息和使用的连接类型(tcp\udp)
-
NAMES:自动分配的容器名称。
-
列出最近创建的5个容器信息。
1 |
|
- 列出所有创建的容器ID
1 |
|
stats
- 容器占用资源的信息。
1 |
|
logs
- 获取容器的日志。
1 |
|
- -f:跟踪日志输出。
- –since:显示某个开始时间的所有日志。
- -t:显示时间戳。
- –tail:仅列出最新N条容器日志。
实例
- 跟踪查看容器mynginx的日志输出。
1 |
|
- 查看容器mynginx从2016年7月1日后的最新10条日志。
1 |
|
top
- 查看容器中运行的进程信息,支持 ps 命令参数。
1 |
|
- 容器运行时不一定有/bin/bash终端来交互执行top命令,而且容器还不一定有top命令,可以使用docker top来实现查看container中正在运行的进程。
实例
- 查看容器mymysql的进程信息。
1 |
|
- 查看所有运行容器的进程信息。
1 |
|
port
- 通过 docker ps 命令可以查看到容器的端口映射,docker 还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定(ID 或者名字)容器的某个确定端口映射到宿主机的端口号。
1 |
|
实例
1 |
|
inspect
- docker inspect:获取容器/镜像的元数据。
1 |
|
- -f:指定返回值的模板文件。
- -s:显示总的文件大小。
- –type:为指定类型返回JSON
实例
- 获取镜像mysql:5.6的元信息。
1 |
|
- 获取正在运行的容器mymysql的 IP
attach
- docker attach:连接到正在运行中的容器,不会启动新的进程。
1 |
|
- 如果container当前正在前台运行进程,如输出nginx的
access.log
日志,<CTRL-C>
不仅会导致退出容器,而且还stop了。 - 注意:如果使用该命令从容器退出,会导致容器的停止。
- 好在attach是可以带上
--sig-proxy=false
来确保CTRL-D或CTRL-C不会关闭容器。
实例
- 容器mynginx将访问日志指到标准输出,连接到容器查看访问信息。
1 |
|
rename
- docker rename:用于修改容器名。
1 |
|
容器rootfs
cp
- docker cp:用于容器与主机之间的数据拷贝。
1 |
|
- -L:保持源目标中的链接。
实例
- 将主机
/www/test
目录拷贝到容器96f7f14e99ab的/www
目录下。
1 |
|
- 将主机
/www/test
目录拷贝到容器96f7f14e99ab中,目录重命名为www
1 |
|
- 将容器96f7f14e99ab的
/www
目录拷贝到主机的/tmp
目录中。
1 |
|
diff
- docker diff:检查容器里文件结构的更改。
1 |
|
实例
- 查看容器mymysql的文件结构更改。
1 |
|
commit
- docker commit:从容器创建一个新的镜像。
1 |
|
- -a:提交的镜像作者;
- -c:使用Dockerfile指令来创建镜像;
- -m:提交时的说明文字;
- -p:在commit时,将容器暂停。
实例
- 将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!