Docker分享应用程序

来自泡泡学习笔记
跳到导航 跳到搜索

现在你已经构建了一个镜像,你可以将它分享出去。要分享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 push命令。注意,你的命令中应该有你的Docker ID,而不是”docker”。

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/getting-started的镜像时没有找到。如果你运行docker image ls,你也看不到这个镜像。

要解决这个问题,你需要为你已经构建的现有镜像打上一个新的标签。

  1. 使用命令docker login -u YOUR-USER-NAME登录到Docker Hub。
  2. 使用docker tag命令为getting-started镜像命名一个新名称。将YOUR-USER-NAME替换为你的Docker ID。
docker tag getting-started YOUR-USER-NAME/getting-started

现在再次运行docker push命令。如果你从Docker Hub复制了值,你可以省略标签部分,因为你没有给镜像名称添加标签。如果你没有指定标签,Docker会使用一个叫做latest的标签。

docker push YOUR-USER-NAME/getting-started

在新实例上运行镜像

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

注意

Play with Docker使用amd64平台。如果你使用的是基于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. 选择登录,然后从下拉列表中选择docker。
  3. 使用你的Docker Hub帐户登录,然后选择开始。
  4. 在左侧边栏上选择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会将容器的端口暴露给主机的所有接口,使其对外界可用。

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

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