欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker入门之-Docker镜像(二)

程序员文章站 2022-06-03 11:37:26
...

一、镜像命名的最佳实践

前面已经学习了如何利用Dockerfile文件构建自己的镜像了,接下来的问题是如何在多个 Docker Host 上使用镜像?

  1. 用相同的 Dockerfile 在其他 host 构建镜像。

  2. 将镜像上传到公共 Registry(比如 Docker Hub),Host 直接下载使用。

  3. 搭建私有的 Registry 供本地 Host 使用

无论采用何种方式保存和分发镜像,首先都得给镜像命名;其实,当我们执行 docker build 命令时已经为镜像取了个名字,

譬如docker build -t ubuntu-with-vi中ubuntu-with-vi 就是镜像的名字,可以通过docker images命令查看:

Docker入门之-Docker镜像(二)

 实际上,一个特定镜像的名字由两部分组成:repository 和 tag;

如果执行 docker build 时没有指定 tag,会使用默认值 latest;tag 常用于描述镜像的版本信息,比如 httpd 镜像:

tag 使用最佳实践

借鉴软件版本命名方式能够让用户很好地使用镜像;

假设我们现在发布了一个镜像 myimage,版本为 v1.9.1,那么我们可以给镜像打上四个 tag:1.9.1、1.9、1 和 latest;

我们可以通过 docker tag 命令方便地给镜像打 tag:

docker tag myimage-v1.9.1 myimage:1
docker tag myimage-v1.9.1 myimage:1.9
docker tag myimage-v1.9.1 myimage:1.9.1
docker tag myimage-v1.9.1 myimage:latest

过了一段时间,我们发布了 v1.9.2。这时可以打上 1.9.2 的 tag,并将 1.9、1 和 latest 从 v1.9.1 移到 v1.9.2:

docker tag myimage-v1.9.2 myimage:1
docker tag myimage-v1.9.2 myimage:1.9
docker tag myimage-v1.9.2 myimage:1.9.2
docker tag myimage-v1.9.2 myimage:latest

 之后,v2.0.0 发布了。这时可以打上 2.0.0、2.0 和 2 的 tag,并将 latest 移到 v2.0.0:

docker tag myimage-v2.0.0 myimage:2
docker tag myimage-v2.0.0 myimage:2.0
docker tag myimage-v2.0.0 myimage:2.0.0
docker tag myimage-v2.0.0 myimage:latest

这种 tag 方案使镜像的版本很直观,用户在选择非常灵活:

  1. myimage:1 始终指向 1 这个分支中最新的镜像。

  2. myimage:1.9 始终指向 1.9.x 中最新的镜像。

  3. myimage:latest 始终指向所有版本中最新的镜像。

  4. 如果想使用特定版本,可以选择 myimage:1.9.1、myimage:1.9.2 或 myimage:2.0.0

Docker Hub 上很多 repository 都采用这种方案;

二、使用公共 Registry

保存和分发镜像的最直接方法就是使用 Docker Hub;

Docker Hub官方网址:https://hub.docker.com/

Docker Hub 是 Docker 公司维护的公共 Registry;用户可以将自己的镜像保存到 Docker Hub 免费的 repository 中。如果不希望别人访问自己的镜像,也可以购买私有 repository;

下面介:绍如何用 Docker Hub 存取我们的镜像:

第一步:在 Docker Hub 上注册一个账号

第二步:在 Docker Host 上登录3

第三步:修改镜像的 repository 使之与 Docker Hub 账号匹配

Docker Hub 为了区分不同用户的同名镜像,镜像的 registry 中要包含用户名,完整格式为:[username]/xxx:tag
我们通过 docker tag 命令重命名镜像

第四步:通过 docker push 将镜像上传到 Docker Hub

第五步:登录 https://hub.docker.com,在Public Repository 中就可以看到上传的镜像

第六步:这个镜像可被其他 Docker host 下载使用了

三、搭建本地 Registry

Docker Hub 虽然非常方便,但还是有些限制,比如:

  1. 需要 internet 连接,而且下载和上传速度慢。

  2. 上传到 Docker Hub 的镜像任何人都能够访问,虽然可以用私有 repository,但不是免费的。

  3. 安全原因很多组织不允许将镜像放到外网。

解决方案就是搭建本地的 Registry;

第一步:启动 registry 容器

第二步:通过 docker tag 重命名镜像,使之与 registry 匹配

第三步:通过 docker push上传镜像

第四步:可通过 docker pull 从本地 registry 下载镜像了

以上是搭建本地 registry 的简要步骤。当然 registry 也支持认证,https 安全传输等特性,具体可以参考官方文档 https://docs.docker.com/registry/configuration/

四、Docker 镜像小结

首先学习了镜像的分层结构,然后学习了如何构建镜像,最后实践使用 Docker Hub 和本地 registry。

下面是镜像的常用操作子命令:

images    显示镜像列表

history   显示镜像构建历史

commit    从容器创建新镜像

build     从 Dockerfile 构建镜像

tag       给镜像打 tag

pull      从 registry 下载镜像

push      将 镜像 上传到 registry

rmi       删除 Docker host 中的镜像

search    搜索 Docker Hub 中的镜像

除了 rmi 和 search,其他命令都已经用过了:

rmi

只能删除 host 上的镜像,不会删除 registry 的镜像

如果一个镜像对应了多个 tag,只有当最后一个 tag 被删除时,镜像才被真正删除;

search

search 让我们无需打开浏览器,在命令行中就可以搜索 Docker Hub 中的镜像;