阅读 34

面向WEB开发人员的Docker(八):将 Docker 镜像推送到仓库

【这是我参与更文挑战的第 8 天,活动详情查看: 更文挑战”】

Docker Hub 是Docker的Github,是 Docker 官方维护了一个公共仓库。上面包括很多现成的镜像,如 ApachePHPNode.jsPythonMySQLMongoDB等,不需要自己的制作镜像。当然你有可以自己制作镜像推送到仓库。

为什么要把送镜像推送到 Docker Hub?

前面介绍了制作 Dockerfile ,实际上 Dockerfile 是可以随着项目一起存储到项目仓库中,以便在开发期间或作为生产部署过程的一部分构建应用程序。而推送到 Docker Hub 有一下几个好处:

  • 与项目团队一起分发预构建和测试过的镜像变得更容易

  • 镜像可以在生产服务器上拉取,这样部署更加简单和快速

  • 发布的镜像任何人都可以使用,应用程序可以与所有的用户、客户端和其他开发人员共享。

Docker Hub 允许创建任意数量的公共仓库,镜像中的应用程序大部分时候可以是编译后的,不一定是源代码。

类 Docker Hub 产品

除了 Docker Hub ,还有很多提供类似服务的平台,每个平台都有各自的特色:

这里我们推荐使用 Docker Hub,但其他存储库的过程类似。

镜像名称和标签

Docker Hub 为每个镜像分配了一个唯一的名称:

[your_user_name]/[image_name]:[tag_name]
复制代码

以下部分参考了在上一节中创建的 hellonodejs 镜像,并将该镜像推动到仓库。

最新的默认标签应用于任何新图像。在拉取镜像时未指定标签时下载该版本。

标签是镜像的不同变体,在运行 MySQL 容器时第一次看到这些 - 官方 MySQL 镜像提供了8.0.258.0latest 的各种版本。

每个镜像都有一个默认标签latest,表示最新的版本,在拉取镜像时未指定标签时下载就是该版本。

单个镜像可以应用任意数量的标签,镜像开发人员有责任适当地标记镜像并确保最新的稳定版本使用最新的 ,让标签具有明显的意义。

创建 Docker Hub 仓库

首先需要是在 Docker Hub 上创建一个仓库。登录hub.docker.com/,然后点击Repositories创建Repository(或者直接打开hub.docker.com/repository/…):

image.png

输入完信息后,点击俺就 Create 即可完成创建。

image.png

本地登录

使用 Docker Hub 凭据登录开发PC,使用:

docker login
复制代码

或者,可以从 Windows 和 macOS 上的 Docker 桌面菜单中选择登录。

如果需要登录到别的镜像仓库(不是 Docker Hub),请使用:

docker login <url>
复制代码

构建应用程序镜像

现在回到上节创建的项目,从应用程序的 Dockerfile 构建镜像。上一节示例:

docker image build -t hellonodejs .
复制代码

确定是否构建成功且正确,可以使用一下命令:

docker run -it --rm --name hellonodejs -p 3005:3005 hellonodejs
复制代码

查看构建的镜像,如下:

docker images 
复制代码

image.png

为镜像打Tag

现在可以使用用户名、仓库名称和标签名称标记镜像,以准备好推送到 Docker Hub,例如:

docker tag nodehello quintiontang/hellonodejs:myfirst
复制代码

查看:

docker images quintiontang/hellonodejs
复制代码

image.png

标记版本指向 hellonodejs 原始版本,可以为同一图像创建任意数量的标签,例如:

docker tag hellonodejs quintiontang/hellonodejs:latest
复制代码

docker image build -t 选项可以指定一个完全限定的名称,因此可以在单个命令中构建和标记镜像:

docker image build -t quintiontang/hellonodejs:myfirst

然而,在标记之前构建和测试是比较安全的——这样可以避免不小心推送一个失败的镜像。

推送到 Docker Hub

使用以下命令将标记的镜像推送到 Docker Hub:

docker push quintiontang/hellonodejs
复制代码

推送之前需要下登录,docker login

再次单击 Docker Hub 中的仓库链接查看推送的进项,推送的镜像将在以下网址可用:

https://hub.docker.com/repository/docker/[your_user_name]/[image_name]/
复制代码

本文推送的地址是:

https://hub.docker.com/repository/docker/quintiontang/hellonodejs
复制代码

image.png

分发镜像

现在可以擦除系统中的所有映像(当然,如果绝对确定的话……) docker system prune -af 然后可以从 Docker Hub 镜像启动容器,例如:

docker run -it --rm --name hellonodejs -p 3005:3005  quintiontang/hellonodejs:myfirst
复制代码

文章分类
开发工具
文章标签