本教程整理了一些常用的 Docker 命令操作方式,包含容器的启动、停止、查看、文档复制与目录挂载等。
展开索引
启动 Docker 容器
docker run
可以用来启动 Docker 虚拟容器环境:
# 启动 Docker 容器 docker run -it tensorflow/tensorflow bash
加上 -it
参数代表在执行 Docker 虚拟容器环境时,开启console控制台,以交互模式执行。
这个例子是执行一个 TensorFlow 的 Docker 容器,并且在 Docker 中执行 bash
。
列出所有 Docker 容器
docker ps
可以列出所有 Docker 容器的信息:
# 列出所有 Docker 容器
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d9b6f31bd21d tensorflow/tensorflow "bash" About a minute ago Up About a minute 6006/tcp, 8888/tcp elated_panini
从返回的信息中可以看到这个新的 Docker 容器 ID 为 d9b6f31bd21d
。
停止 Docker 容器
若要停止 Docker 容器,可以使用 stop
指令:
# 停止 Docker 容器
docker stop DOCKER_ID
其中 DOCKER_ID
就是 Docker 容器的 ID。
如果 Docker 容器宕掉,可以考虑改用 kill
:
# 强制停止 Docker 容器
docker kill DOCKER_ID
重新启动 Docker 容器
若要重新启动 Docker 容器,则可使用 restart
:
# 重新启动 Docker 容器
docker restart DOCKER_ID
暂停 Docker 容器
若要暂停 Docker 容器,可用:
# 暂停 Docker 容器
docker pause DOCKER_ID
若要让暂停的 Docker 容器恢复执行,则使用:
# 恢复 Docker 容器
docker unpause DOCKER_ID
复制 Docker 文档
接着在实体机器(host)中使用 docker cp
指令,将文档复制到该容器内:
# 复制文档
docker cp /path/to/file1 DOCKER_ID:/path/to/file2
这样就会把实体机器的 /path/to/file1
文档复制到 Docker 容器中的 /path/to/file2
。
Docker 容器内的预设路径是根目录(/
),所以上面的指令也可以写成:
# 复制文档
docker cp /path/to/file1 DOCKER_ID:path/to/file2
docker cp
的运作方式类似 Linux 系统的 cp -r
指令,也就是说它可以直接复制整个目录及其子目录:
# 复制文档
docker cp /path/to/folder DOCKER_ID:/another/path/
这样就会把实体机器的 /path/to/folder
目录整个复制到 Docker 容器中的 /another/path/
。
若要把 Docker 容器内的文档复制出来,也是使用类似的做法:
# 复制文档
docker cp DOCKER_ID:/path/to/file1 /path/to/file2
这样就可以把 Docker 容器内的 /path/to/file1
复制到实体机器的 /path/to/file2
。目录的复制方法也相同:
# 复制文档
docker cp DOCKER_ID:/path/to/folder /path/to/
挂载目录
如果想要将实体机器的目录直接挂载至 Docker 容器内,可以使用 -v
参数:
# 挂载目录 docker run -it -v /home/seal/data:/data tensorflow/tensorflow bash
这样就会将实体机器的 /home/seal/data
挂载至 Docker 容器内的 /data
,让实体机器与 Docker 容器可以共享同一个目录,在 Docker 容器中将资料放进这个目录时,于实体机器中可以同时看见,反之亦然。
限制 CPU 使用量
Docker 预设并不会限制容器的 CPU 使用量,也就是说实体机器有多少 CPU 核心,Docker 容器就可以使用多少。若要限制 Docker 容器的 CPU 使用量,可以使用 --cpus
来指定可用的 CPU 数量:
# 限制 CPU 使用量 docker run -it --cpus=1.5 agileek/cpuset-test
这样就会限制 Docker 容器最多只能使用到 1.5 颗实体的 CPU。
限制内存使用量
内存的状况与 CPU 类似,预设都没有任何限制,若要限制内存与 swap 交换空间的用量,可以使用 --memory
与 --memory-swap
参数:
# 限制内存使用量 docker run -it --memory=300m --memory-swap=1g tensorflow/tensorflow bash
这样就会允许 Docker 容器使用 300m
的内存,以及 1g - 300m = 700m
的 swap 交换空间。
连接至外部网络(端口映射)
如果要让 Docker 容器内部的服务可以接收来自于外部的网络连接,可以使用 -p
参数将 Docker 容器内部的连接端口对应到实体机器的连接端口:
# 设定网络连接对应端口 docker run -it -p 80:8888 tensorflow/tensorflow
这样就会将 Docker 容器的 8888
连接端口,对应到实体机器的 80
连接端口。
这是将 Docker 容器的 8080
连接端口与实体机器 127.0.0.1
的 80
连接端口的例子:
# 设定网络连接对应端口 docker run -p 127.0.0.1:80:8080 ubuntu bash
查看 Docker 容器的 CPU、内存与网络统计
若要查看 Docker 容器的 CPU、内存与网络统计数据,可以使用 stats
:
# 查看 CPU、内存与网络用量
docker stats
查看 Docker 容器内部的进程
若要查看 Docker 容器内部的进程,可以使用 top
:
# 查看 Docker 容器内部的进程
docker top DOCKER_ID