分享应用程序

现在你已经构建了一个镜像,你可以分享它了。要分享 Docker 镜像,你必须使用 Docker 注册表。默认注册表是 Docker Hub,你使用过的所有镜像都来自这里。

Docker ID

Docker ID 让你能够访问 Docker Hub,它是世界上最大的容器镜像库和社区。如果你还没有,可以免费创建一个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
    

    为什么失败了?推送命令正在查找名为 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 芯片的 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 账户登录,然后选择 开始

  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 流水线中非常常见,流水线会创建镜像并将其推送到注册表,然后生产环境就可以使用最新版本的镜像了。

相关信息

下一步

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

页面选项