分享应用程序
原文:https://docs.docker.com/get-started/04_sharing_app/
现在你已经构建了一个镜像,你可以分享它了。要分享 Docker 镜像,你需要使用 Docker 镜像仓库。默认的镜像仓库是 Docker Hub,这也是你所使用的所有镜像的来源。
Docker ID
Docker ID 允许你访问 Docker Hub,这是全球最大的容器镜像库和社区。如果你还没有 Docker ID,请免费创建一个 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
。consoledocker push docker/getting-started 推送引用到仓库 [docker.io/docker/getting-started] 本地不存在标签为 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。consoledocker tag getting-started YOUR-USER-NAME/getting-started
再次运行
docker push
命令。如果你是从 Docker Hub 复制的值,你可以省略tagname
部分,因为你没有为镜像名称添加标签。如果你没有指定标签,Docker 使用名为latest
的标签。consoledocker push YOUR-USER-NAME/getting-started
在新实例上运行镜像
现在你的镜像已经构建并推送到镜像仓库中,尝试在一个全新的实例上运行你的应用,这个实例之前从未见过这个容器镜像。为此,你将使用 Play with Docker。
注意
Play with Docker 使用 amd64 平台。如果你使用基于 ARM 的 Mac(Apple silicon),你需要重建镜像以兼容 Play with Docker 并将新镜像推送到你的仓库。
要为 amd64 平台构建镜像,请使用
--platform
标志。consoledocker build --platform linux/amd64 -t YOUR-USER-NAME/getting-started .
Docker buildx 也支持构建多平台镜像。要了解更多,请查看 多平台镜像。
在浏览器中打开 Play with Docker。
选择 登录,然后从下拉列表中选择 docker。
使用你的 Docker Hub 账户登录,然后选择 开始。
在左侧栏选择 添加新实例。如果你看不到,稍微调宽你的浏览器窗口。几秒钟后,一个终端窗口会在你的浏览器中打开。
在终端中,启动你刚推送的应用。
consoledocker 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 管道中很常见,管道会创建镜像并将其推送到镜像仓库,然后生产环境可以使用镜像的最新版本。
相关信息:
下一步
在下一节中,你将学习如何在你的容器化应用程序中持久化数据。