一、准备工作
1. 安装Docker
详细安装可以查看 Linux安装Docker
2. 创建目录
我们装所有数据都放到/home/registry目录下
mkdir /home/registry
cd /home/registry
mkdir auth conf data db
- auth:验证目录,存放账号密码文件或证书文件
- conf:配置文件目录
- data:仓库数据存放目录
- db:docker-registry-web数据存放目录,若不安装这个Web管理页面可以忽略
二、安装registry容器
docker run -d \
--name registry-srv \
--restart=always
-v /home/registry/auth:/etc/docker/registry/auth \
-v /home/registry/data:/var/lib/registry/docker/registry \
-v /home/registry/conf/registry-srv.yml:/etc/docker/registry/config.yml:ro \
-p 5000:5000 \
registry
- -d:指定 Registry 容器在后台运行;
- --restart=always:设置开机运行
- --name registry-srv:指定容器的名称
- -v:将主机目录或文件映射到容器中;
- -p:指定 Registry 容器监听的宿主机中的端口号以及在容器中使用的端口号
三、无Web页面使用Basic Realm
验证配置
安装web页面,跳过第三步;不安装web页面跳过第四步。
1. 安装htpasswd 工具
- Ubuntu/Debian
sudo apt install apache2-utils -y
- CentOS/RHEL
sudo yum install httpd-tools -y
# 创建密码
htpasswd -Bbn username password >/home/registry/auth/htpasswd
# 添加其他账号
htpasswd -Bb /home/registry/auth/htpasswd another_user another_password
# 设置权限
chmod 600 /home/registry/auth/htpasswd
- 账号密码文件:/home/docker/auth/htpasswd
- user:账号
- password:密码
2. 编辑/home/registry/conf/registry-srv.yml
配置文件
version: 0.1
log:
fields:
service: registry
storage:
delete: # 默认是不能删除的,添加删除支持
enabled: true
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
auth:
htpasswd:
realm: basic-realm
path: /etc/docker/registry/auth/htpasswd
3. 重启registry-srv服务使配置生效
docker restart registry-srv
四、安装docker-registry-web使用token验证
1. 生成私钥和证书
openssl req -new -newkey rsa:4096 -days 365 -subj "/CN=localhost" \
-nodes -x509 -keyout /home/registry/auth/auth.key -out /home/registry/auth/auth.cert
2. 编辑/home/registry/conf/registry-srv.yml
配置文件
version: 0.1
log:
fields:
service: registry
storage:
delete: # 默认是不能删除的,添加删除支持
enabled: true
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
auth:
token:
realm: https://dockerhub.zengwu.com.cn/api/auth
service: localhost:5000
issuer: 'my issuer'
rootcertbundle: /etc/docker/registry/auth/auth.cert
3. 重启registry-srv服务使配置生效
docker restart registry-srv
4. 编辑/home/registry/conf/registry-web.yml
配置文件
registry:
# 私有仓库地址.
url: http://registry-srv:5000/v2
# 私有仓库命名.
name: localhost:5000
# 是否只读设置.
readonly: false
auth:
# 是否进行鉴权处理.
enabled: true
# 需要与私有仓库定义的名称一致.
issuer: 'my issuer'
# 容器内私钥证书路径,容器启动时通过数据卷参数指定.
key: /conf/auth.key
5. 安装docker-registry-web
docker run -d \
--name registry-web \
--link registry-srv \
-v /home/registry/conf/registry-web.yml:/conf/config.yml:ro \
-v /home/registry/auth/auth.key:/conf/auth.key \
-v /home/registry/db:/data \
-p 8080:8080 \
hyper/docker-registry-web
五、安装Nginx配置 SSL
- CentOS 安装 nginx
yum install -y nginx
- Ubuntu 安装 nginx
apt install -y nginx
配置 vim /etc/nginx/conf.d/dockerhub.conf
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name dockerhub.zengwu.com.cn;
#ssl on;
ssl_certificate /etc/nginx/conf.d/key/dockerhub.zengwu.com.cn.pem;
ssl_certificate_key /etc/nginx/conf.d/key/dockerhub.zengwu.com.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #指定SSL服务器端支持的协议版本
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on; #在使用SSLv3和TLS协议时指定服务器的加密算法要优先于客户端的加密算法
error_page 497 301 =307 https://$host:$server_port$request_uri;
location /v2/ {
proxy_pass http://localhost:5000/v2/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#下面这一项设置上传大小。默认设置是5G,有需要自己改。
client_max_body_size 0;
proxy_connect_timeout 300s;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
send_timeout 300s;
#开启websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Ssl on;
}
# 如果不安装web页面,这个配置可以不用
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 0;
}
}
六、使用
找另一台docker测试机
1、 登录
root@zngw:~# docker login dockerhub.zengwu.com.cn
Username: 用户名
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/#credential-stores
Login Succeeded
2、 查询、推送、拉取镜像
- 查看镜像仓库
curl -XGET -u 账号:密码 https://dockerhub.zengwu.com.cn/v2/_catalog
输出格式为json,如:
{"repositories":["redis","registry"]}
- 查看私有仓库镜像的tag
curl -XGET -u 账号:密码 https://dockerhub.zengwu.com.cn/v2/redis/tags/list
输出:
{"name":"redis","tags":["latest"]}
- 标志镜像
docker tag my-image dockerhub.zengwu.com.cn/my-image
- 推送镜像
docker push dockerhub.zengwu.com.cn/my-image
- 拉取镜像
docker pull dockerhub.zengwu.com.cn/my-image
3. web页面访问
输入域名,使用默认账号:admin
,默认密码:admin
登录,然后进入Users
管理账号密码