前言:为什么要搭建私有仓库呢?因为docker hub仓库是国外,拉取国外镜像速度比较慢,从自己搭建的私有仓库拉取镜像速度会比较快,把之前下载下来的镜像上传到私有仓库,然后部署项目的时候再从私有仓库拉下来。这样拉取的镜像速度会很快,而且有时候自己制作的的镜像也可以上传到私有仓库,然后需要的时候再从仓库拉取下来,这样会大大的提高工作效率。


1.创建相关目录

mkdir -p /home/repository/config & mkdir -p /home/repository/auth

2.自定义配置config.yml文件

vim /home/repository/config/config.yml
version: 0.1
log:
fields:
service: registry
storage:
delete:
enabled: true
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3

3.运行容器

docker run -d -p 5001:5000 --restart=always --name=repository -v /home/repository/config/:/etc/docker/registry/ -v /home/repository/auth/:/auth/ -v /home/repository/:/var/lib/registry/ registry:2

4.下载镜像测试

[root@manager1 config]# docker pull hello-world

5.给镜像打tag

[root@manager1 config]# docker tag hello-world 192.168.21.101:5001/hello-world

6.查看镜像

[root@manager1 config]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE

127.0.0.1:5000/hello-world latest feb5d9fea6a5 10 months ago 13.3kB
192.168.21.101:5001/hello-world latest feb5d9fea6a5 10 months ago 13.3kB
hello-world latest feb5d9fea6a5 10 months ago 13.3kB


7.修改daemon.json文件

[root@manager1 config]# vim /etc/docker/daemon.json
{
"insecure-registries":["192.168.21.101:5001"], #这里是镜像仓库的ip地址和端口
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
}


修改后重新加载配置重启


systemctl daemon-reload
systemctl restart docker

8.测试一下镜像

登录镜像仓库

docker login 192.168.21.101:5001

然后会要求提示用户名和密码,用户名和密码随便填,因为我这里还没有给他设置账户名和密码。不过反正随便填一个账号名和密码就可以登录成功后面自己添加一个真实是的账号和密码,然后成功上传镜像。


[root@manager1 opt]# docker push 192.168.21.101:5001/hello-world 
The push refers to repository [192.168.21.101:5001/hello-world]
e07ee1baac5f: Pushed
latest: digest: sha256:f54a58bc1aac5ea1a25d796ae155dc228b3f0e11d046ae276b39c4bf2f13d8c4 size: 525
[root@manager1 opt]#

访问一下,查看所有镜像的名称

192.168.21.101:5001/v2/_catalog

搭建本地私有仓库 registry_registry_web

列出某一个镜像有多少个版本

192.168.21.101:5001/v2/busybox/tags/list

搭建本地私有仓库 registry_私有仓库_02


9.给docker镜像仓库设置账号和密码

使用htpasswd命令 (htpasswd命令识别不了 需要安装 yum install httpd-tools -y)

htpasswd -Bbn kiki 12345678 >/home/repository/auth/htpasswd

搭建本地私有仓库 registry_registry_web_03


把上面搭建运行镜像仓库容器停掉,删除

docker stop repository

docker rm repository

重新执行下面语句run

docker run -d -p 5001:5000 --restart=always --name=repository -v /home/repository/config/:/etc/docker/registry/ -v /home/repository/auth/:/auth/ -v /home/repository/:/var/lib/registry/ -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry:2

浏览器访问的时候需要提供账户名和密码才能访问

输入上面创建的用户名和密码访问

搭建本地私有仓库 registry_私有仓库_04



登入私有仓库输入正确的用户名和密码

docker pull 192.168.21.101:5001/hello-world #把镜像拉取下来

docker logout 192.168.21.101:5001 #退出私有镜像仓库

10.搭建registry_web,UI界面

docker search docker-registry-web
docker pull hyper/docker-registry-web#拉取Registry web镜像

因为仓库有设置密码,所以链接搭建web需要认证信息。

docker login 192.168.21.101:5001

然后cat /root/.docker/config.json 就可以看到认证信息。所以先准备这个认证的密码信息。

搭建本地私有仓库 registry_registry_web_05



docker run -d --name registry-web2 --restart=always -p 8081:8080 --link repository -e REGISTRY_URL=http://192.168.21.101:5001/v2 -e REGISTRY_NAME=192.168.21.101:5001 -e REGISTRY_READONLY=true -e REGISTRY_BASIC_AUTH="ZXI6ZXI="  hyper/docker-registry-web

备注:

-d #后台允许

--restart=always #重新启动

192.168.21.101:5001/v2是私有仓库的地址信息

在web界面,true表示不能删除镜像,false能删除镜像。

REGISTRY_BASIC_AUTH="ZXI6ZXI= #web界面基本身份认证

11.使用浏览器访问web界面

搭建本地私有仓库 registry_docker_06

图1

搭建本地私有仓库 registry_docker_07

图2

说明事项:

出现下面错误,是因为-e REGISTRY_BASIC_AUTH 写的web认证密码有误,删除/root/.docker/config.json 这个文件,重新登录私有仓库再查看(/root/.docker/config.json),复制那个认证密码替换。

搭建本地私有仓库 registry_docker_08


这篇文章还是有点缺陷,不足的是registry_web界面没有账号密码认证,这样会不安全,即使我已经把删除镜像的权限默认去掉。但是项目里面有什么镜像都可以看到

有个方法nginx 代理这个web界面可以实现 账号密码认证。如下图。

但是还是不足,因为他registry_web本身就没有账号和密码认证,我研究一下再分享给大家。

搭建本地私有仓库 registry_docker_09

配置文件图