分享应用程序

现在您已经构建了一个镜像,可以分享它了。要分享 Docker 镜像,您需要使用一个 Docker 注册表。默认的注册表是 Docker Hub,这也是您使用的所有镜像的来源。

Docker ID

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

创建一个仓库

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

  1. 注册 或 登录到 Docker Hub.

  2. 选择 创建仓库 按钮。

  3. 对于仓库名称,使用 getting-started。确保 可见性公开

  4. 选择 创建

在下面的图片中,你可以看到来自 Docker Hub 的 Docker 命令示例。此命令将推送到该仓库。

Docker command with push example

推送镜像

  1. 在命令行中,运行你在 Docker Hub 上看到的 docker push 命令。请注意,你的命令将包含你的 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 login -u YOUR-USER-NAME 登录 Docker Hub。

  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 平台。如果您使用的是基于 ARM 的 Apple silicon Mac,您需要重新构建镜像以使其与 Play with Docker 兼容,并将新镜像推送到您的仓库。

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

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

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

  1. 在浏览器中打开 Play with Docker

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

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

  4. 在左侧边栏选择 添加新实例 选项。如果您看不到它,请稍微加宽浏览器窗口。几秒钟后,浏览器中将打开一个终端窗口。

    Play with Docker add new instance
  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 流水线中非常常见,流水线会创建镜像并将其推送到仓库,然后生产环境可以使用该镜像的最新版本。

相关信息:

后续步骤

在下一节中,您将学习如何在容器化应用程序中持久化数据。