共享应用程序
现在你已经构建了一个镜像,你可以共享它。要共享 Docker 镜像,你必须使用 Docker registry。默认的 registry 是 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镜像一个新名称。用你的 Docker ID 替换YOUR-USER-NAME。$ docker tag getting-started YOUR-USER-NAME/getting-started现在再次运行
docker push命令。如果你是从 Docker Hub 复制的值,可以去掉tagname部分,因为你没有给镜像名称添加标签。如果你不指定标签,Docker 会使用一个名为latest的标签。$ docker push YOUR-USER-NAME/getting-started
在新实例上运行镜像
现在你的镜像已经构建并推送到一个 registry 中,尝试在一个全新的、从未见过此容器镜像的实例上运行你的应用程序。为此,你将使用 Play with Docker。
注意Play with Docker 使用 amd64 平台。如果你使用的是带有 Apple silicon 的基于 ARM 的 Mac,你需要重新构建镜像以与 Play with Docker 兼容,并将新镜像推送到你的仓库。
要为 amd64 平台构建镜像,请使用
--platform标志。$ docker build --platform linux/amd64 -t YOUR-USER-NAME/getting-started .Docker buildx 也支持构建多平台镜像。要了解更多信息,请参阅多平台镜像。
在你的浏览器中打开 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你应该会看到镜像被拉取下来并最终启动。
提示你可能已经注意到,此命令将端口映射绑定到不同的 IP 地址。之前的
docker run命令将端口发布到主机的127.0.0.1:3000上。这一次,你使用的是0.0.0.0。绑定到
127.0.0.1只会将容器的端口暴露给环回接口。然而,绑定到0.0.0.0会将容器的端口暴露在主机的所有接口上,使其对外部世界可用。有关端口映射如何工作的更多信息,请参阅网络。
当 3000 徽章出现时,选择它。
如果 3000 徽章没有出现,你可以选择 Open Port 并指定
3000。
摘要
在本节中,你学习了如何通过将镜像推送到 registry 来共享你的镜像。然后,你到了一个全新的实例上,并能够运行刚刚推送的镜像。这在 CI 管道中很常见,管道会创建镜像并将其推送到 registry,然后生产环境可以使用最新版本的镜像。
相关信息
后续步骤
在下一节中,你将学习如何在容器化应用程序中持久化数据。
持久化数据库