本章概述
- 下载 docker registry 镜像
- 搭建单机仓库
前言
备注:docker registry仓库不常用,了解即可
Docker Registry 作为 Docker 的核心组件之一负责镜像内容的存储与分发,客户端的 docker pull 以及 push 命令都将直接与 registry 进行交互,最初版本的 registry由Python实现,由于设计初期在安全性,性能以及API 的设计上有着诸多的缺陷,该版本在 0.9 之后停止了开发,由新的项目 distribution(新的 docker register 被称为 Distribution)来重新设计并开发下一代 registry,新的项目由 go 语言开发,所有的 API,底层存储方式,系统架构都进行了全面的重新设计已解决上一代registry 中存在的问题。
2016 年 4 月份 rgistry 2.0 正式发布,docker 1.6 版本开始支持 registry 2.0,而八月份随着 docker 1.8 发布,docker hub 正式启用 2.1 版本registry 全面替代之前版本 registry,新版 registry 对镜像存储格式进行了重新设计并和旧版不兼容,docker 1.5 和之前的版本无法读取 2.0 的镜像,另外,Registry 2.4 版本之后支持了回收站机制,也就是可以删除镜像了,在 2.4 版本之前是无法支持删除镜像的,所以如果你要使用最好是大于 Registry 2.4 版本的,目前最新版本为 2.8.x。
官方文档地址:https://docs.docker.com/registry/
官方 github 地址:https://github.com/docker/distribution
本部分将介绍通过官方提供的 docker registry 镜像来简单搭建一套本地私有仓库环境。
3.1 下载 docker registry 镜像
root@docker_server02:~# docker pull registry:2.6.2
3.2 搭建单机仓库
由于docker registry默认没有认证机制,不安全,这里要通过其他方式实现认证
3.2.1 创建认证用户和密码
1、创建授权使用目录
root@docker_server02:~# mkdir -p /docker/auth
2、创建用户(用户jack,密码123456)
root@docker_server02:~# cd /docker
root@docker_server02:/docker# docker run --entrypoint htpasswd registry:2.6.2 -Bbn jack 123456 > auth/htpasswd
注意:创建用户只能使用2.6.2版本的registry,使用2.7以及2.8版本的会报错
3、查看用户名密码
root@docker_server02:/docker# cat /docker/auth/htpasswd
3.2.2 启动docker registry容器
1、启动registry容器
root@docker_server02:/docker# docker run -d -p 5000:5000 --restart=always --name registry1 -v /docker/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry:2.6.2
参数说明:
-v /docker/auth:/auth #把宿主机上的用户密码挂载到容器的/auth目录
-e "REGISTRY_AUTH=htpasswd" #使用htpasswd进行认证
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd #指定认证的密码所在的路径
2、查看容器
3.2.3 登录registry仓库
1、在其他服务器登录registry仓库,会出现以下报错:
root@docker_server01:~# docker login 172.31.7.151:5000
这是因为docker会默认连接https协议的仓库,而registry仓库使用的是http协议
2、解决方法
将registry仓库配置为非安全仓库,配置如下:
(1)方法一:在/etc/docker/daemon.json文件添加配置(两行配置之间要用逗号隔开)
root@docker_server02:/docker# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://3lvei2wk.mirror.aliyuncs.com"],
"insecure-registries": ["http://172.31.7.151:5000"]
}
注意:"insecure-registries": ["http://172.31.7.151:5000"]这行配置的冒号后面没有空格
添加完成以后,重启docker服务
root@docker_server01:~# systemctl daemon-reload && systemctl restart docker
(2)方法二:在/lib/systemd/system/docker.service文件中添加配置:--insecure-registry 172.31.7.151:5000
root@docker_server01:~# vim /lib/systemd/system/docker.service
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 172.31.7.151:5000 #在这里添加非安全仓库
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
添加完成以后,重启docker服务
root@docker_server01:~# systemctl daemon-reload && systemctl restart docker
3、查看docker信息,已经添加成功
4、设置完成后,再次登录registry仓库
root@docker_server01:~# docker login 172.31.7.151:5000
3.2.4 上传镜像
1、为本地镜像打tag(tag格式:镜像仓库地址/项目名称/镜像名:tag号)
root@docker_server01:~# docker tag nginx:1.18.0 172.31.7.151:5000/jack/nginx:1.18.0
2、上传镜像到registry仓库
root@docker_server01:~# docker push 172.31.7.151:5000/jack/nginx:1.18.0
3.2.5 在其他服务器下载镜像并启动容器
1、其他服务器下载镜像(下载之前,要先配置非安全镜像仓库)
登录registry仓库
下载镜像
2、启动nginx容器
root@docker_server02:~# docker run -it -p 8088:80 172.31.7.151:5000/jack/nginx:1.18.0
文章评论