一、目标
-
搭建一个私服docker镜像中心,并且需要安全认证和后台管理。
二、拉取镜像
docker pull hyper/docker-registry-web docker pull registry
三、安装docker-compose
yum install docker-compose
四、创建镜像中心
-
下载并解压(github国内比较慢,如果下载失败的话,多尝试几次)
curl -Ls https://github.com/mkuchin/docker-registry-web/releases/download/v0.1.2/examples.tar.gz | tar -xzv
-
切换到目录
cd examples/auth-enabled/
3.使用脚本生成私钥和自签名证书:
./generate-keys.sh
4.修改配置,进入conf/registry目录,修改ip,如果是本机测试,则不需要修改。
5.启动
#启动
docker-compose up
#或者后台启动
docker-compose up -d
-
访问地址:http://192.168.60.20:8080/,用户名和密码是admin/admin
进去之后,里面是空的
到这里服务器构建成功了
五、测试完整流程
1).创建账号
- 打开刚刚的网址:http://192.168.60.20:8080/,创建一个账号guohui,密码guohui,角色分配为write-all
2) 推送镜像
- 修改配置
vim /etc/docker/daemon.json
添加信任的私服
{ "insecure-registries": ["192.168.60.20:5000"] }
多个
{ "insecure-registries": ["192.168.60.20:5000","192.168.60.21:5000"] }
2. 重新加载配置和重启
# 重新加载某个服务的配置文件
systemctl daemon-reload
# 重新启动 docker
systemctl restart docker
3.拉取一个镜像用来测试
#拉取镜像用来测试
docker pull hello-world
4.登录服务器,输入创建的用户名和密码为guohui/guohui
docker login 192.168.60.20:5000
5.推送镜像到私有仓库((需要在登录状态下执行))
#标记镜像
docker tag hello-world 192.168.60.20:5000/myhello-world:1.0
#推送镜像到私有仓库
docker push 192.168.60.20:5000/myhello-world:1.0
访问web也可以查看到刚刚推送的镜像。
6.拉取镜像(需要在登录状态下执行)
#拉取镜像前,可以先删除hello-world镜像,避免使用本地镜像
docker rmi -f 镜像id
#拉取刚刚推送到服务器的镜像
docker run 192.168.60.20:5000/myhello-world:1.0
7.退出登录
docker logout 192.168.60.20:5000
六、遇到的问题
1.如果不登录,直接push就会提示需要认证。
2.执行 docker login
登录镜像仓库的时候,抛出如下异常:
Remote error from secret service: org.freedesktop.DBus.Error.UnknownMethod:
No such interface ‘org.freedesktop.Secret.Collection’ on object at path /org/freedesktop/secrets/collection/login
Error saving credentials: error storing credentials - err: exit status 1, out:
No such interface 'org.freedesktop.Secret.Collection' on object at path /org/freedesktop/secrets/collection/login
解决办法
因为服务器安装了 golang-docker-credential-hepers
包,这个包是在使用apt包管理器安装 docker-compose 时装上的。
解决办法是先通过apt卸载掉golang-docker-credential-hepers这个包:
apt purge golang-docker-credential-helpers
然后重新登录,成功: