Skip to content

分享应用程序

原文: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 上创建一个仓库。

  1. 注册 或登录到 Docker Hub

  2. 点击 创建仓库 按钮。

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

  4. 点击 创建

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

Docker 命令推送示例

推送镜像

  1. 在命令行中,运行你在 Docker Hub 上看到的 docker push 命令。注意你的命令将包含你的 Docker ID,而不是 "docker"。例如,docker push YOUR-USER-NAME/getting-started

    console
    docker push docker/getting-started
    推送引用到仓库 [docker.io/docker/getting-started]
    本地不存在标签为 docker/getting-started 的镜像

    为什么会失败?推送命令在寻找名为 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。

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

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

在新实例上运行镜像

现在你的镜像已经构建并推送到镜像仓库中,尝试在一个全新的实例上运行你的应用,这个实例之前从未见过这个容器镜像。为此,你将使用 Play with Docker。

注意

Play with Docker 使用 amd64 平台。如果你使用基于 ARM 的 Mac(Apple silicon),你需要重建镜像以兼容 Play with Docker 并将新镜像推送到你的仓库。

要为 amd64 平台构建镜像,请使用 --platform 标志。

console
docker build --platform linux/amd64 -t YOUR-USER-NAME/getting-started .

Docker buildx 也支持构建多平台镜像。要了解更多,请查看 多平台镜像

  1. 在浏览器中打开 Play with Docker

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

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

  4. 在左侧栏选择 添加新实例。如果你看不到,稍微调宽你的浏览器窗口。几秒钟后,一个终端窗口会在你的浏览器中打开。

    Play with Docker 添加新实例

  5. 在终端中,启动你刚推送的应用。

    console
    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 管道中很常见,管道会创建镜像并将其推送到镜像仓库,然后生产环境可以使用镜像的最新版本。

相关信息:

下一步

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