registry本地私有仓库搭建,基于CentOS
1.下载registry镜像
docker pull registry:2
2.在registry镜像上启动容器
docker run -d -p 5008:5000 --restart=always --name registry -v /mnt/registry:/var/lib/registry registry:2
3.查看结果
docker ps
到此,私有镜像仓库已经搭建成功,但此时的仓库没有安全认证,一般不会使用;我们还必须为本地搭建的私有镜像仓库配置认证证书、登录账号等才能用于真正的服务
配置镜像仓库的证书及密码
1.使用openssl生成证书
mkdir registry && cd registry && mkdir certs && cd certs
openssl req -x509 -days 3650 -nodes -newkey rsa:2048 -keyout domain.key -out domain.crt
上述指令说明:
- 进入home目录,执行第一行指令,创建registry和certs目录
- 此时执行第二个指令,用于生成证书和密钥,执行结果如下:
- 红线圈出的地方,是配置的域名,自定义即可(确保在/etc/hosts中已经创建了IP和域名的映射),如:
127.0.0.1 repo.oonoo.com
到此证书和密钥已经生成
利用htpasswd指令生成用户名和密码
在前面创建的registry目录下,创建新目录
mkdir auth
然后,执行如下指令:
htpasswd -Bbn tom 123 > auth/htpasswd
执行之后,即可将创建用户名为tom密码为123的密码文件htpasswd。
完成上面的准备工作后,就可以正式启动带有安全认证的本地私有镜像仓库了,指令如下:
docker run -d -p 5008:5000 --restart=always --name registry -v /mnt/registry:/var/lib/registry -v `pwd`/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v `pwd`/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key registry:2
指令说明:
-e参数在启动Docker Registry 仓库服务时配置了认证证书和和连接的用户信息。
上述指令是在前面生成的registry目录下执行的,如果在其他目录下执行,
需要修改-v参数中auth和certs所在的宿主机文件路径。
使用docker ps
查看容器的运行状况,确定是否成功
完成Registry本地镜像仓库服务启动后,还需要在搭建了Docker Registry本地镜像仓库所在的Docker主机上配置供其他Docker机器访问的接口,具体指令如下
mkdir -p /etc/docker/certs.d/repo.oonoo.com:5008
cp certs/domain.crt /etc/docker/certs.d/repo.oonoo.com:5008
指令说明如下:
上述指令仍然是在前面创建的registry目录下执行,第一条指令用于创建一个证书目录,
要注意的是repo.oonoo.com:5008目录名要与启动的Docker Registry服务地址端口一致;
第二条指令将生成的domain.crt证书复制到刚才创建的证书目录下
测试验证
通过前面几个步骤的操作,配置有安全认证的Docker Registry本地私有仓库就已经完成启动设置
安装了registry仓库的主机上测试
先登录仓库
[root@icjvlxh7jag7xxkj-0123307 docker]# docker login repo.oonoo.com:5008
Username: oonoo
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
推送镜像到本地仓库:
[root@icjvlxh7jag7xxkj-0123307 docker]# docker push repo.oonoo.com:5008/test_box
Using default tag: latest
The push refers to repository [repo.oonoo.com:5008/test_box]
84009204da3f: Pushed
latest: digest: sha256:74e4a68dfba6f40b01787a3876cc1be0fb1d9025c3567cf8367c659f2187234f size: 527
[root@icjvlxh7jag7xxkj-0123307 docker]#
其他主机上测试
要想在其他主机上访问前面配置的registry私有仓库,需要在其他主机上做如下简单的处理,执行如下指令:
mkdir -p /etc/docker/certs.d/repo.oonoo.com:5008
cp domain.crt /etc/docker/certs.d/repo.oonoo.com:5008/
说明如下:
第一条指令创建docker访问的接口目录;第二条指令,将之前配置registry服务器上生成的certs/domain.crt复制到目录下面(请先将证书domain.crt复制到当前机器)
然后在/etc/hosts配置域名和IP的映射: xx.xx.xx.xx repo.oonoo.com
登录
[root@icjvlxh7jag7xxkj-0123306 docker]# docker login repo.oonoo.com:5008
Username: oonoo
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
推送镜像到配置的私有仓库(私有仓库在其他主机上)
[root@icjvlxh7jag7xxkj-0123306 ~]# docker push repo.oonoo.com:5008/busybox_two
Using default tag: latest
The push refers to repository [repo.oonoo.com:5008/busybox_two]
84009204da3f: Pushed
latest: digest: sha256:74e4a68dfba6f40b01787a3876cc1be0fb1d9025c3567cf8367c659f2187234f size: 527
[root@icjvlxh7jag7xxkj-0123306 ~]#
结束