共享应用程序
现在你已经构建了一个镜像,你可以共享它了。要共享 Docker 镜像,你必须使用 Docker 注册表。默认注册表是 Docker Hub,你使用的所有镜像都来自这里。
Docker ID
Docker ID 允许你访问 Docker Hub,它是全球最大的容器镜像库和社区。如果你还没有,可以免费创建 Docker ID。
创建仓库
要推送镜像,你首先需要在 Docker Hub 上创建一个仓库。
注册 或登录到 Docker Hub。
选择“**创建仓库**”按钮。
对于仓库名称,使用 `getting-started`。确保“**可见性**”为“**公开**”。
选择“**创建**”。
在下图中,你可以看到 Docker Hub 上的 Docker 命令示例。此命令将推送到此仓库。


推送镜像
在命令行中,运行你在 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`,你也不会看到它。
要解决此问题,你需要标记你已构建的现有镜像以赋予其另一个名称。
使用命令 `docker login -u YOUR-USER-NAME` 登录 Docker Hub。
使用 `docker tag` 命令为 `getting-started` 镜像赋予新名称。将 `YOUR-USER-NAME` 替换为你的 Docker ID。
$ docker tag getting-started YOUR-USER-NAME/getting-started
现在再次运行 `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 还支持构建多平台镜像。要了解更多信息,请参阅 多平台镜像。
在浏览器中打开 Play with Docker。
选择“**登录**”,然后从下拉列表中选择“docker”。
使用你的 Docker Hub 帐户登录,然后选择“**启动**”。
选择左侧边栏上的“**添加新实例**”选项。如果你没有看到它,请稍微放大你的浏览器。几秒钟后,一个终端窗口将在你的浏览器中打开。
在终端中,启动你新推送的应用程序。
$ 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` 会在主机的所有接口上公开容器的端口,使其可供外部访问。
有关端口映射工作方式的更多信息,请参阅 网络。
出现 3000 徽章时,选择它。
如果 3000 徽章没有出现,可以选择“**打开端口**”并指定 `3000`。
总结
在本节中,你学习了如何通过将镜像推送到注册表来共享你的镜像。然后,你转到一个全新的实例,并且能够运行新推送的镜像。这在 CI 管道中非常常见,其中管道将创建镜像并将其推送到注册表,然后生产环境可以使用最新版本的镜像。
相关信息
后续步骤
在下一节中,你将学习如何在容器化应用程序中持久化数据。