Docker云计算笔记菜鸟

菜鸟必备:超详细的Docker常用命令与容器操作教程

本教程整理了一些常用的 Docker 命令操作方式,包含容器的启动、停止、查看、文档复制与目录挂载等。

docker-logo-1.jpg插图

启动 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-commands-and-container-2.png插图(1)

CPU、内存与网络用量

查看 Docker 容器内部的进程

若要查看 Docker 容器内部的进程,可以使用 top

# 查看 Docker 容器内部的进程
docker top DOCKER_ID
docker-commands-and-container-3.png插图(2)
(END)