Docker私有仓库部署记录(原创)
一、介绍
1、SSL证书安装部署
2、准备docker环境
3、私有仓库不同方式的部署
二、CA证书安装部署
1、获取SSL证书。可以通过各种云平台购买,或者申请短期免费SSL证书、或者自签证书、再或者使用公开的长年可用的自签证书,样式多种多样任君挑选。
本人在此愿意公开我的自签根证书(30年)和通配符*.myk8s.co自签域名SSL证书(20年),供广大网友内部开发测试使用。以快速部署、降低搭建私有镜像仓库门槛。通配符*.myk8s.co域名证书自签20年时间,应该够用了^-^
https://freessl.org网站能申请短期免费ssl域名证书,不妨试一试,使用起来跟购买证书相同,只是更换起来有点频繁。
2、各公司发行的操作系统预埋了国际根证书,而自签的根证书却不在操作系统里面,所以自签的根证书必须安装才能使用,如果windows访问,也是需要安装自签根证书的。安装根证书之后,自签域名证书与购买域名证书除了使用广度外没多大区别。以centos7环境为例介绍如何安装根证书。
1)GlobalTrustFreeSSLRootCA-E2006.crt为根CA证书,需要安装到操作系统里面。这张自签根证书使用ECC加密算法,使用时比RSA更快,并且还兼容chrome、firefox、edge/ie、搜狗浏览器、qq浏览器、360浏览器等
2)myk8s.co.crt、myk8s.co.key 为myk8s.co的通配符证书和key
3)GlobalTrustFreeSSLRootCA-E2006.key为自签根CA证书的私钥key文件,自签域名证书时才会用到,通常用不到。
首先在每台服务器和电脑上安装证书,然后再安装私有仓库。
把GlobalTrustFreeSSLRootCA-E2006.crt放到/etc/pki/ca-trust/source/anchors,在命令行运行/bin/update-ca-trust,这样证书就导入到系统中去了,/etc/ssl/certs/ca-bundle.trust.crt文件会加入更新的新证书内容。
cp GlobalTrustFreeSSLRootCA-E2006.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust
windows安装自签根证书更简单,右击GlobalTrustFreeSSLRootCA-E2006.crt文件,选择“安装证书”即可。
三、安装Docker环境
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
systemctl enable docker
systemctl start docker
systemctl reload-daemon
四、私有仓库部署
方式1、harbor部署
方式2、harbor部署+nginx反代理
方式3、registry部署
方式4、registry部署+docker-registry-web
推荐部署方式为1和4,首先在centos/etc/hosts和在windows下C:\Windows\System32\drivers\etc\hosts 中添加xxx.xxx.xxx.xxx registry.myk8s.co ,让每台服务器和电脑能通过域名找到私有仓库IP。
1、harbor部署
1)二进制下载docker-compose
curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
2)下载harbor(在线包7KB,离线包600M+)
wget https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-online-installer-v1.8.1.tgz
mkdir -p /data/sslkey
cp myk8s.co.crt、myk8s.co.key /data/sslkey/
harbor到/usr/local/harbor,修改harbor监听的域名,如下
cat /usr/local/harbor/harbor.yml
# Configuration file of Harbor
# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: registry.myk8s.co
# http related config
#http:
# port for http, default is 80. If https enabled, this port will redirect to https port
#port: 80
# https related config
https:
# # https port for harbor, default is 443
port: 443
# # The path of cert and key files for nginx
# certificate: /your/certificate/path
# private_key: /your/private/key/path
certificate: /data/sslkey/myk8s.co.cer
private_key: /data/sslkey/myk8s.co.key
3)安装或更新配置
./install 安装
./prepare 更新配置
4)停止harbor
docker-compose stop
docker-compose down -v
5)开启harbor
docker-compose up -d
docker-compose start
docker login soulchild.cn
顺利的话docker login -u admin -p Harbor12345 registry.myk8s.co 能顺利登录成功,通信都是走的https。
2、harbor部署+nginx反代理
1)harbor安装方法同上
2)配置如下
cat /usr/local/harbor/harbor.yml
# Configuration file of Harbor
# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: registry.myk8s.co
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80
3)安装或更新配置
./install 安装
./prepare 更新配置
4)停止harbor
docker-compose stop
docker-compose down -v
5)开启harbor
docker-compose up -d
docker-compose start
ssl证书配置在nginx反向代理中,如下
yum -y install nginx
cp myk8s.co.crt、myk8s.co.key /etc/nginx/
cat /etc/nginx/nginx.conf
server {
listen 443 ssl;
server_name registry.myk8s.co;
ssl_certificate myk8s.co.crt;
ssl_certificate_key myk8s.co.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://xxx.xxx.xxx.xxx;
}
}
systemctl restart nginx
顺利的话docker login -u admin -p Harbor12345 registry.myk8s.co 能顺利登录成功,通信走的https,nginx到harbor之间走的是http协议。
3、registry部署
docker pull registry
yum -y install httpd
mkdir -p /data/sslkey/
htpasswd -bn sltk8s sltk8s >> /data/sslkey/users.txt
cp myk8s.co.crt、myk8s.co.key /data/sslkey/
docker run -d -p 443:5000 --restart=always --name registry \
-v /data/sslkey:/sslkey \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/sslkey/users.txt \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/sslkey/myk8s.co.crt \
-e REGISTRY_HTTP_TLS_KEY=/sslkey/myk8s.co.key \
registry
docker login registry.myk8s.co -u sltk8s -p sltk8s 顺利的成功登录,也是https通信。
如有兴趣也可以进入容器内部,修改/etc/docker/registry/config.yml修改配置
/etc/docker/registry # cat 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]
tls:
certificate: /sslkey/myk8s.co.crt
key: /sslkey/myk8s.co.key
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
auth:
htpasswd:
realm: basic-realm
path: /sslkey/users.txt
4、registry部署+docker-registry-web
registry的部署完全同3,多增加了一个镜像查看删除功能。
docker pull hyper/docker-registry-web
docker run -d -p 80:8080 --name registry-web \
-e REGISTRY_URL=https://registry.myk8s.co/v2 \
-e REGISTRY_TRUST_ANY_SSL=true \
-e REGISTRY_BASIC_AUTH="c2x0azhzOnNsdGs4cw==" \
-e REGISTRY_NAME=registry.myk8s.co \
-e REGISTRY_READONLY=false \
hyper/docker-registry-web
REGISTRY_BASIC_AUTH变量是/root/.docker/config.json文件中auth的值,sltk8s的密码密文。
registry部署+docker-registry-web部署同台机器,https://registry.myk8s.co/是私有仓库地址,http://registry.myk8s.co/是docker-registry-web地址,协议不同。
结束,祝你好运!
也可邮件交流:steveqiao@qq.com