共享应用程序

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

Docker ID

Docker ID 让你能够访问 Docker Hub,这是全球最大的容器镜像库和社区。如果你还没有 Docker ID,可以免费创建一个 Docker ID

创建一个仓库

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

  1. 注册或登录到 Docker Hub

  2. 选择 Create Repository 按钮。

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

  4. 选择 Create (创建)。

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

Docker command with push example

推送镜像

让我们尝试将镜像推送到 Docker Hub。

  1. 在命令行中,运行以下命令

    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
    
  2. 要解决这个问题,首先使用你的 Docker ID 登录到 Docker Hub:docker login YOUR-USER-NAME

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

    $ docker tag getting-started YOUR-USER-NAME/getting-started
    
  4. 现在再次运行 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 也支持构建多平台镜像。要了解更多信息,请参阅多平台镜像

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

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

  3. 用你的 Docker Hub 帐户登录,然后选择 Start

  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 徽章没有出现,你可以选择 Open Port 并指定 3000

摘要

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

相关信息

后续步骤

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

持久化数据库
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.