命名Docker容器的3个技巧
介绍
创建 Docker 容器时,会为其分配一个通用唯一标识符 (UUID)。 这些对于避免命名冲突和在没有人工干预的情况下促进自动化至关重要。 它们有效地识别主机和网络的容器。 然而,人类需要更多的努力来区分,无论是在 64 个字符的人类可读长显示还是更频繁显示的 12 个字符的短格式,这可能看起来像 285c9f0f9d3d
。
为了帮助人类,Docker 还为容器提供了一个由两个单词随机生成的名称,并用下划线连接,例如 evil_ptolemy
。 这可以更容易地将一个容器与另一个容器区分开来,但随机名称不会比 UUID 更深入地了解容器功能。
这里有三个技巧,可以让您在学习使用容器时更容易保持轴承。
1 - 运行时命名容器
通过将 --name=meaningful_name
添加到 docker run
命令,evil_ptolomy
在交互式会话以及 docker ps
等命令的输出中变得更容易识别。 但是,有一些限制。 由于容器名称必须是唯一的,因此您不能使用故意命名并将服务扩展到一个容器之外。
在命令行或 Dockerfile 中:
docker run --name=meaningful_name
例如,如果我们运行一个基于 nginx
基础镜像的容器并像这样启动它:
docker run --name nginx -d nginx
该名称将出现在正在运行的容器列表中:
docker ps
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 08f333ef7216 nginx "nginx -g 'daemon off" 15 seconds ago Up 14 seconds 80/tcp, 443/tcp nginx
虽然名称出现在 docker ps
的输出中并可用于管理容器,但如果附加到容器或日志文件中,它将不会出现在容器的命令提示符中。 为了做到这一点,您还需要分配一个主机名。
2 — 为容器分配主机名
提供给 --hostname
命令的值设置在容器内的 /etc/hostname
和 /etc/hosts
内。 因此,它出现在命令提示符中。 它在配置 容器 DNS 中发挥作用,并且在多容器设置的学习阶段很有帮助。 从容器外部访问并不容易,但它会出现在容器的日志文件中,当这些文件写入独立于主机的卷时,可以更容易地识别容器。
CLI 和 Dockerfile:
docker run --hostname=value
OR docker run -h value
虽然 --name
和 --hostname
都对容器的识别很有用,但有时,它根本不是容器的命名。 相反,它是关于让容器自行清理,而不必记住自己做。
3 — 容器退出时自动删除
调试时,停止的容器在退出后仍然存在是有帮助的。 您可以保留日志文件等数据并调查容器的最终状态。 但是,有时,您知道当您运行容器时,当您完成时您不会想要它。 在这种情况下,您可以使用 --rm
标志在它退出时自动删除它。 这可以更容易保持清洁。
不过要小心! 如果您使用 Docker 卷,--rm
将删除任何 未由名称 指定的卷。
CLI 和 Dockerfile:
docker run --rm
当您构建图像并需要附加到正在运行的容器时,这非常有用。 您想环顾四周,并且不想用不打算再次使用的容器填满磁盘。
结论
docker run
、--name
、--hostname
和 --rm
的这三个标志可以各自以自己的方式,使学习 Docker 时更容易知道什么是什么. 您可以在 Working with Docker Containers 指南中了解有关容器和使用 docker run
命令的更多信息。