分享应用程序

现在你已经构建了一个镜像,你可以分享它。要分享 Docker 镜像,你必须使用一个 Docker 注册表。默认的注册表是 Docker Hub,所有你使用过的镜像都来自这里。

Docker ID

Docker ID 让您可以访问 Docker Hub,这是世界上最大的容器镜像库和社区。如果您还没有,可以免费创建一个Docker ID

创建一个仓库

要推送镜像,首先需要在 Docker Hub 上创建一个仓库。

  1. 注册 或登录到 Docker Hub

  2. 选择创建仓库按钮。

  3. 对于仓库名称,使用getting-started。确保可见性公开

  4. 选择创建

在下面的图片中,你可以看到一个来自 Docker Hub 的 Docker 命令示例。该命令将推送到此仓库。

Docker command with push example

推送镜像

  1. 在命令行中,运行你在 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
    

    为什么会失败?push 命令正在寻找一个名为 docker/getting-started 的镜像,但没有找到。如果你运行 docker image ls,你也不会看到它。

    要解决这个问题,你需要为你已经构建的镜像打上标签,给它另一个名称。

  2. 使用命令 docker login -u YOUR-USER-NAME 登录到 Docker Hub。

  3. 使用 docker tag 命令为 getting-started 镜像赋予一个新名称。将 YOUR-USER-NAME 替换为你的 Docker ID。

    $ docker tag getting-started YOUR-USER-NAME/getting-started
    
  4. 现在再次运行docker push命令。如果你是从Docker Hub复制值,你可以省略tagname部分,因为你没有为镜像名称添加标签。如果你不指定标签,Docker会使用一个名为latest的标签。

    $ docker push YOUR-USER-NAME/getting-started
    

在新实例上运行镜像

现在您的镜像已经构建并推送到注册表中,尝试在一个从未见过此容器镜像的全新实例上运行您的应用程序。为此,您将使用Play with Docker。

注意

Play 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 还支持构建多平台镜像。要了解更多信息,请参阅 多平台镜像

  1. 打开你的浏览器访问 Play with Docker.

  2. 选择登录,然后从下拉列表中选择docker

  3. 使用您的 Docker Hub 账户登录,然后选择开始

  4. 在左侧边栏选择ADD NEW INSTANCE选项。如果看不到,请将浏览器窗口调宽一些。几秒钟后,浏览器中将打开一个终端窗口。

    Play with Docker add new instance
  5. 在终端中,启动您刚刚推送的应用程序。

    $ 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则会将容器的端口暴露在宿主机的所有接口上,使其对外部世界可用。

    有关端口映射如何工作的更多信息,请参阅网络

  6. 当3000徽章出现时,请选择它。

    如果3000徽章没有出现,你可以选择打开端口并指定3000

摘要

在本节中,您学习了如何通过将镜像推送到注册表来共享您的镜像。然后,您进入了一个全新的实例,并能够运行刚刚推送的镜像。这在CI管道中非常常见,管道将创建镜像并将其推送到注册表,然后生产环境可以使用最新版本的镜像。

相关信息:

下一步

在下一节中,您将学习如何在容器化应用程序中持久化数据。