分发镜像
我们已经会构建自己的镜像了, 那么如果在多个 docker 主机上使用镜像那? 有如下的几种可用的方法:
用相同的 Dockerfile 在其他 host 上构建镜像
将镜像上传到公共 registry(比如 docker hub),host 直接下载使用
搭建私有的 registry 供本地的 host 使用
镜像命名
无论采用何种方式保存和分发镜像, 首先都得给镜像命名.
通过 dock images ls 可以查看镜像的信息.
- [[email protected] ~]# docker image ls
- REPOSITORY TAG IMAGE ID CREATED SIZE
- myimage latest 7efe0600e48f 27 minutes ago 13MB
- CentOS-vim2 latest 1921b3cd4695 About an hour ago 328MB
- CentOS-VIM latest 42083b89a179 About an hour ago 328MB
- busybox latest 3a093384ac30 3 weeks ago 1.2MB
- CentOS latest 1e1148e4cc2c 7 weeks ago 202MB
这里注意到 myimage 对应的是 REPOSITORY, 而且还有一个叫 latest 的 TAG.
实际上一个特定镜像的名字由两部分组成: repository 和 tag.
[image name] = [repository]:[tag]
如果执行 docker build 时没有指定 tag, 会使用默认值 latest. 其效果相当于:
docker build -t myimage:latest
tag 常用于描述镜像的版本信息.
小心 latest tag
千万别被 latest tag 给误导了. latest 其实并没有什么特殊的含义. 当没指明镜像 tag 时, Docker 会使用默认值 latest, 仅此而已.
虽然 Docker Hub 上很多 repository 将 latest 作为最新稳定版本的别名, 但这只是一种约定, 而不是强制规定.
所以我们在使用镜像时最好还是避免使用 latest, 明确指定某个 tag, 比如 httpd:2.3,Ubuntu:xenial.
使用公共 registry
保存和分发镜像的最直接方法就是使用 Docker Hub.
Docker Hub 是 Docker 公司维护的公共 Registry. 用户可以将自己的镜像保存到 Docker Hub 免费的 repository 中. 如果不希望别人访问自己的镜像, 也可以购买私有 repository.
除了 Docker Hub,quay.io 是另一个公共 Registry, 提供与 Docker Hub 类似的服务.
下面介绍如何用 Docker Hub 存取我们的镜像.
第一步: 首先得在 Docker Hub 上注册一个账号.(https://cloud.docker.com/)
第二步: 在 Docker Host 上登录.
- [[email protected] ~]# docker login -u ken2019
- Password:
- Login Succeeded
这里用的是我自己的账号, 用户名为 ken2019, 输入密码后登录成功.
第三步: 修改镜像的 repository 使之与 Docker Hub 账号匹配.
Docker Hub 为了区分不同用户的同名镜像, 镜像的 registry 中要包含用户名, 完整格式为:[username]/xxx:tag
我们通过 docker tag 命令重命名镜像.
注: Docker 官方自己维护的镜像没有用户名, 比如 httpd.
第四步: 通过 docker push 将镜像上传到 Docker Hub.
- [[email protected] ~]# docker push ken2019/myimage:v1
- The push refers to repository [docker.io/ken2019/myimage]
- cc65436a9bce: Pushed
- b5d564d59792: Pushed
- 44d9b0246bf5: Pushed
- 7d419408a46e: Pushed
- 683f499823be: Mounted from library/busybox
- v1: digest: sha256:e7fcb8fd9a68131317b095030f6b13353bb6e20cefe6f9871a6e0d47cdd02083 size: 1359
第五步: 登录 https://hub.docker.com, 在 Public Repository 中就可以看到上传的镜像.
如果要删除上传的镜像, 只能在 Docker Hub 界面上操作.
第六步: 这个镜像可被其他 Docker host 下载使用了.
- [[email protected] ~]# docker pull ken2019/myimage:v1
- v1: Pulling from ken2019/myimage
- Digest: sha256:e7fcb8fd9a68131317b095030f6b13353bb6e20cefe6f9871a6e0d47cdd02083
- Status: Downloaded newer image for ken2019/myimage:v1
搭建本地的 registry
Docker Hub 虽然非常方便, 但还是有些限制, 比如:
需要 internet 连接, 而且下载和上传速度慢.
上传到 Docker Hub 的镜像任何人都能够访问, 虽然可以用私有 repository, 但不是免费的.
安全原因很多组织不允许将镜像放到外网.
解决方案就是搭建本地的 Registry.
第一步: 运行 registry 容器
Docker 已经将 Registry 开源了, 同时在 Docker Hub 上也有官方的镜像 registry. 下面我们就在 Docker 中运行自己的 registry.
[[email protected] ~]# docker run -d -p 5000:5000 -v /tes:/var/lib/registry registry:2
我们使用的镜像是 registry:2.
-d 是后台启动容器.
-p 将容器的 5000 端口映射到 Host 的 5000 端口. 5000 是 registry 服务端口.
-v 将容器 /var/lib/registry 目录映射到 Host 的 /test, 用于存放镜像数据.
第二步: 通过 docker tag 重命名镜像, 使之与 registry 匹配.
[[email protected] ~]# docker tag ken2019/myimage:v1 172.20.10.2:5000/ken2019/myimage:v1
我们在镜像的前面加上了运行 registry 的主机名称和端口.
前面已经讨论了镜像名称由 repository 和 tag 两部分组成. 而 repository 的完整格式为:[registry-host]:[port]/[username]/xxx
只有 Docker Hub 上的镜像可以省略 [registry-host]:[port] .
第三步: 修改 damon.JSON 文件
- {
- "registry-mirrors": ["https://vf3ypopb.mirror.aliyuncs.com"],
- "insecure-registries":["192.168.64.8:5000"]
- }
用逗号分开, 不加这行会报下面的错
然后重启 docker
[[email protected] ~]# systemctl restart docker
重启容器
[[email protected] ~]# docker run -d -p 5000:5000 -v /tes:/var/lib/registry registry:2
第四步: 上传镜像
- [[email protected] ~]# docker push 172.20.10.2:5000/ken2019/myimage:v1
- The push refers to repository [172.20.10.2:5000/ken2019/myimage]
- cc65436a9bce: Pushed
- b5d564d59792: Pushed
- 44d9b0246bf5: Pushed
- 7d419408a46e: Pushed
- 683f499823be: Pushed
- v1: digest: sha256:e7fcb8fd9a68131317b095030f6b13353bb6e20cefe6f9871a6e0d47cdd02083 size: 1359
第五步: 从其他主机进行下载镜像
注意: 其他主机也要添加 "insecure-registries":["172.20.10.2:5000"] (这里的 IP 是 registry 主机的 IP 地址, 不是该拉取镜像的主机)
Continue Reading
PreviousDocker 镜像构建的两种方式 (六) http://www.kendd.cn/?p=594
来源: http://www.bubuko.com/infodetail-3164326.html