共享应用程序
现在您已经构建了一个镜像,您可以共享它。要共享 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 管道中很常见,管道将创建镜像并将其推送到注册表,然后生产环境可以使用最新版本的镜像。
相关信息
下一步
在下一节中,您将学习如何持久化容器化应用程序中的数据。