Docker入门之-Docker镜像(二)
一、镜像命名的最佳实践
前面已经学习了如何利用Dockerfile文件构建自己的镜像了,接下来的问题是如何在多个 Docker Host 上使用镜像?
-
用相同的 Dockerfile 在其他 host 构建镜像。
-
将镜像上传到公共 Registry(比如 Docker Hub),Host 直接下载使用。
-
搭建私有的 Registry 供本地 Host 使用
无论采用何种方式保存和分发镜像,首先都得给镜像命名;其实,当我们执行 docker build
命令时已经为镜像取了个名字,
譬如docker build -t ubuntu-with-vi中ubuntu-with-vi
就是镜像的名字,可以通过docker images命令查看:
实际上,一个特定镜像的名字由两部分组成: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 方案使镜像的版本很直观,用户在选择非常灵活:
-
myimage:1 始终指向 1 这个分支中最新的镜像。
-
myimage:1.9 始终指向 1.9.x 中最新的镜像。
-
myimage:latest 始终指向所有版本中最新的镜像。
-
如果想使用特定版本,可以选择 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 虽然非常方便,但还是有些限制,比如:
-
需要 internet 连接,而且下载和上传速度慢。
-
上传到 Docker Hub 的镜像任何人都能够访问,虽然可以用私有 repository,但不是免费的。
-
安全原因很多组织不允许将镜像放到外网。
解决方案就是搭建本地的 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 中的镜像;