Docker 容器命名的三个技巧

简介

当你创建一个 Docker 容器时,它会被分配一个通用唯一标识符(UUID)。这些标识符对于避免命名冲突并促进自动化而言至关重要,而无需人为干预。它们有效地将容器标识给主机和网络。然而,对于人类来说,要区分这些标识符需要更多的努力,无论是在 64 个字符的可读长显示还是更频繁显示的 12 个字符的短形式,可能看起来像 285c9f0f9d3d

为了帮助人类,Docker 还为容器提供了由两个单词随机生成的名称,用下划线连接,例如 evil_ptolemy。这可以使人们更容易区分一个容器和另一个容器,但是这些随机名称并不能提供有关容器功能的更多见解,与 UUID 相比并无多大区别。

以下是三个提示,可以使您在学习如何使用容器时更容易保持方向感。

1 — 在运行容器时为其命名

通过在 docker run 命令中添加 --name=meaningful_name,一个 evil_ptolomy 在交互式会话以及诸如 docker ps 命令的输出中变得更加易于识别。然而,也有一些限制。由于容器名称必须是唯一的,您不能使用有意义的命名并将服务扩展到一个以上的容器。

在命令行或 Dockerfile 中:
docker run --name=meaningful_name

例如,如果我们基于 nginx 基础镜像运行一个容器,并像这样启动它:

docker run --name nginx -d nginx

该名称将出现在运行中的容器列表中:

docker ps
CONTAINER 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=valuedocker run -h value

虽然 --name--hostname 都对于容器的标识很有用,但有时,这与根本不给容器命名无关。相反,它是关于让容器在退出后自动清理,而无需记住自己去做。

3 — 当容器退出时自动删除容器

在调试时,一个停止的容器在退出后保留是有帮助的。您可以保留诸如日志文件之类的数据,并调查容器的最终状态。然而,有时候,您知道当您完成时不希望容器存在。在这种情况下,您可以使用 --rm 标志在退出时自动删除它。这可以使事情保持清洁更容易。

但要小心!如果您使用 Docker 卷,--rm 将删除未按名称指定的任何卷。

CLI 和 Dockerfile:
docker run --rm

当您构建一个镜像并需要附加到一个运行中的容器时,这非常有用。您想四处看看,而不想用您不打算再次使用的容器填满您的磁盘。

结论

docker run 的这三个标志,--name--hostname--rm,各自以自己的方式,使学习 Docker 时更容易知道什么是什么。您可以在《使用 Docker 容器》指南中了解有关容器和使用 docker run 命令的更多信息。

你可能感兴趣的:(docker,docker,java,eureka)