共享应用程序
现在你已经构建了一个镜像,你可以共享它。要共享 Docker 镜像,你必须使用 Docker 注册表。默认注册表是 Docker Hub,你使用的所有镜像都来自这里。
Docker ID
Docker ID 让你可以访问 Docker Hub,这是世界上最大的容器镜像库和社区。如果没有 Docker ID,可以免费注册一个 Docker ID。
创建仓库
要推送镜像,你首先需要在 Docker Hub 上创建一个仓库。
-
注册 或登录 Docker Hub。
-
选择 Create Repository 按钮。
-
仓库名称使用
getting-started。确保 Visibility 为 Public。 -
选择 Create。
在下图中,你可以看到 Docker Hub 上的示例 Docker 命令。此命令将推送到此仓库。
推送镜像
让我们尝试将镜像推送到 Docker Hub。
-
在命令行中,运行以下命令:
docker push docker/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 正在查找名为
docker/getting started的镜像名称,但你的本地镜像仍然命名为getting-started。你可以通过运行以下命令来确认这一点:
docker image ls -
要解决这个问题,首先使用你的 Docker ID 登录 Docker Hub:
docker login YOUR-USER-NAME。 -
使用
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。
NotePlay 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 也支持构建多平台镜像。要了解更多信息,请参阅 Multi-platform images。
-
在浏览器中打开 Play with Docker。
-
选择 Login,然后从下拉列表中选择 docker。
-
使用你的 Docker Hub 账户登录,然后选择 Start。
-
在左侧边栏中选择 ADD NEW INSTANCE 选项。如果你看不到它,让浏览器窗口更宽一点。几秒钟后,浏览器中会打开一个终端窗口。
-
在终端中,启动你刚刚推送的应用程序。
$ docker run -dp 0.0.0.0:3000:3000 YOUR-USER-NAME/getting-started你应该看到镜像被拉取下来并最终启动。
Tip你可能已经注意到,此命令将端口映射绑定到不同的 IP 地址。之前的
docker run命令将端口发布到主机上的127.0.0.1:3000。这次,你使用的是0.0.0.0。绑定到
127.0.0.1仅将容器的端口暴露给回环接口。而绑定到0.0.0.0会将容器的端口暴露在主机的所有接口上,使其可被外部世界访问。有关端口映射工作原理的更多信息,请参阅 Networking。
-
当 3000 徽章出现时,选择它。
如果没有出现 3000 徽章,你可以选择 Open Port 并指定
3000。
总结
在本节中,你学习了如何通过将镜像推送到注册表来共享你的镜像。然后你去了一个全新的实例,能够运行刚刚推送的镜像。这在 CI 管道中很常见,管道会创建镜像并将其推送到注册表,然后生产环境可以使用最新版本的镜像。
相关信息:
下一步
在下一节中,你将学习如何在容器化应用程序中持久化数据。
Persist the DB