分享应用程序

现在您已经构建了图像,您可以共享它。要共享 Docker 映像,您必须使用 Docker 注册表。默认注册表是 Docker Hub,您使用的所有映像都来自于此。

DockerID

Docker ID 可让您访问 Docker Hub,这是世界上最大的容器镜像库和社区。如果您没有Docker ID,请免费创建一个 。

创建存储库

要推送镜像,首先需要在 Docker Hub 上创建一个存储库。

  1. 注册或登录 Docker Hub

  2. 选择创建存储库按钮。

  3. 对于存储库名称,请使用getting-started.确保可见性公开的

  4. 选择创建

在下图中,您可以看到来自 Docker Hub 的示例 Docker 命令。此命令将推送到此存储库。

Docker 命令和推送示例

推送图片

  1. 在命令行中,运行docker push您在 Docker Hub 上看到的命令。请注意,您的命令将包含您的 Docker ID,而不是“docker”。例如,docker push YOUR-USER-NAME/getting-started

    $ docker push docker/getting-started
    The push refers to repository [docker.io/docker/getting-started]
    An image does not exist locally with the tag: docker/getting-started
    

    为什么失败了? Push 命令正在寻找名为 的图像docker/getting-started,但没有找到。如果你跑docker image ls,你也不会看到一个。

    要解决此问题,您需要标记已构建的现有映像并为其指定另一个名称。

  2. 使用命令登录 Docker Hub docker login -u YOUR-USER-NAME

  3. 使用该docker tag命令为图像指定getting-started新名称。替换YOUR-USER-NAME为您的 Docker ID。

    $ docker tag getting-started YOUR-USER-NAME/getting-started
    
  4. 现在docker push再次运行该命令。如果您从 Docker Hub 复制值,则可以删除该tagname部分,因为您没有向映像名称添加标签。如果您不指定标签,Docker 将使用名为 的标签latest

    $ docker push YOUR-USER-NAME/getting-started
    

在新实例上运行镜像

现在您的映像已构建并推送到注册表中,请尝试在从未见过此容器映像的全新实例上运行您的应用程序。为此,您将使用 Play with Docker。

笔记

Play with Docker 使用 amd64 平台。如果您使用的是带有 Apple 芯片的基于 ARM 的 Mac,则需要重建映像以与 Play with Docker 兼容,并将新映像推送到您的存储库。

要为 amd64 平台构建映像,请使用该--platform标志。

$ docker build --platform linux/amd64 -t YOUR-USER-NAME/getting-started .

Docker buildx 还支持构建多平台镜像。要了解更多信息,请参阅 多平台图像

  1. 打开浏览器来玩 Docker

  2. 选择“登录”,然后从下拉列表中选择“docker” 。

  3. 使用您的 Docker Hub 帐户登录,然后选择Start

  4. 选择左侧栏上的“添加新实例”选项。如果您没有看到它,请将您的浏览器设置得更宽一些。几秒钟后,浏览器中将打开一个终端窗口。

    使用 Docker 添加新实例
  5. 在终端中,启动新推送的应用程序。

    $ docker run -dp 0.0.0.0:3000:3000 YOUR-USER-NAME/getting-started
    

    您应该看到图像被拉下来并最终启动。

    提示

    您可能已经注意到,此命令将端口映射绑定到不同的 IP 地址。先前的docker run命令将端口发布到 127.0.0.1:3000主机上。这次,您使用的是0.0.0.0.

    绑定127.0.0.1仅将容器的端口公开给环回接口。但是,绑定到0.0.0.0会在主机的所有接口上公开容器的端口,使其可供外界使用。

    有关端口映射工作原理的更多信息,请参阅 网络

  6. 当 3000 徽章出现时,选择它。

    如果未出现 3000 标志,您可以选择“打开端口”并指定3000

概括

在本节中,您学习了如何通过将图像推送到注册表来共享图像。然后,您进入一个全新的实例,并能够运行新推送的映像。这在 CI 管道中很常见,管道将创建映像并将其推送到注册表,然后生产环境可以使用最新版本的映像。

相关信息:

下一步

在下一节中,您将了解如何在容器化应用程序中保留数据。