Registry仓库
-
Docker Registry 公开服务是开放给用户使用、允许用户管理镜像的 Registry 服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像
-
除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。在 私有仓库 一节中,会有进一步的搭建私有 Registry 服务的讲解。
开源的 Docker Registry 镜像只提供了 Docker Registry API 的服务端实现,足以支持
docker命令,不影响使用。但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能
Harbor仓库
-
Harbor是由VMware公司开源的企业级的Docker Registry管理项目,相比docker官方拥有更丰富的权限权利和完善的架构设计,适用大规模docker集群部署提供仓库服务。
-
它主要提供 Dcoker Registry 管理界面UI,可基于角色访问控制,镜像复制, AD/LDAP 集成,日志审核等功能,完全的支持中文
harbor http
-
harbor仓库搭建
-
1、github下载源码、解压
-
2、安装docker-compose
-
3、cp harbor.yml.tmp harbor.yml
-
4、修改相关配置(域名、端口、账户密码、http/https等)
-
5、执行prepare.sh(之前启动过harbor,如果没有可以忽略)
-
6、执行启动脚本 start.sh
-
7、验证启动是否成功,访问ip/域名:port
-
harbor https 证书生成
https--域名
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor214.https.cn" \
-key ca.key \
-out ca.crt
# 生成证书签名请求(CSR)
openssl genrsa -out harbor214.https.cn.key 4096
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor214.https.cn" \
-key harbor214.https.cn.key \
-out harbor214.https.cn.csr
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=harbor214.https.cn
EOF
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in harbor214.https.cn.csr \
-out harbor214.https.cn.crt
mkdir -p /data/cert/
cp harbor214.https.cn.crt /data/cert/
cp harbor214.https.cn.key /data/cert/
openssl x509 -inform PEM -in harbor214.https.cn.crt -out harbor214.https.cn.cert
https--ip
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.2.109" \
-key ca.key \
-out ca.crt
openssl genrsa -out 192.168.2.109.key 4096
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.2.109" \
-key 192.168.2.109.key \
-out 192.168.2.109.csr
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:192.168.2.109
EOF
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in 192.168.2.109.csr \
-out 192.168.2.109.crt
mkdir -p /data/cert/
cp 192.168.2.109.crt /data/cert/
cp 192.168.2.109.key /data/cert/
openssl x509 -inform PEM -in 192.168.2.109.crt -out 192.168.2.109.cert
mkdir -p /etc/docker/certs.d/192.168.2.109/
cp 192.168.2.109.cert /etc/docker/certs.d/192.168.2.109/
cp 192.168.2.109.key /etc/docker/certs.d/192.168.2.109/
cp ca.crt /etc/docker/certs.d/192.168.2.109/
后台配置总结
-
后台配置:
配置insecure-registries时如果reload不生效可以用restart
仓库类型 CI主机配置 k8s集群配置 Jenkins(pipeline) registry http 无认证 1. /etc/hosts 域名解析仓库2. docker insecure-registries 1. /etc/hosts 域名解析仓库2. docker insecure-registries registry http 带用户名密码 1. /etc/hosts 域名解析仓库2. Docker insecure-registries3. docker login 1. /etc/hosts 域名解析仓库2. docker insecure-registries3. imagePullSecrets 配置用户名密码凭证 registry https类型 1. /etc/hosts 域名解析仓库2. docker insecure-registries 1. /etc/hosts 域名解析仓库2. docker insecure-registries registry https类型 带用户名密码 1. /etc/hosts 域名解析仓库2. docker insecure-registries3.docker login 1. /etc/hosts 域名解析仓库2. docker insecure-registries3. imagePullSecrets 配置用户名密码凭证 harbor http 1. /etc/hosts 域名解析仓库2. docker insecure-registries 1. /etc/hosts 域名解析仓库2. docker insecure-registries3.imagePullSecrets 配置用户名密码凭证
纳管常见错误信息
-
报错:x509: certificate signed by unknown authority
解决方法:配置docker非安全: "insecure-registries": ["reg228.cn:40448"]
- 扫描、删除:镜像拉取失败 connection broken registry带账户名密码:镜像拉取失败!原因:{"message":"Get registry-https-user.example.com:7443/v2/: net/http: HTTP/1.x transport connection broken: malformed HTTP response "\x15\x03\x01\x00\x02\x02""} 解决方法:在CI或者业务集群上需先docker login
- 删除镜像如果无法删除 解决方法: 后台仓库配置 1、进入对应仓库容器 docker exec -it 容器ID sh 2、修改 /etc/docker/registry/config.yml 文件 在storage下面添加 delete: enabled: true 3、重启容器 docker restart 容器id
- 报错: habor214.cn:21480/v2/: dial tcp: lookup habor214.cn on 114.114.114.114:53: no such host 解决方法:未正确配置域名解析 CI或者业务集群
- 报错:镜像制作docker push失败com.github.dockerjava.api.exception.DockerClientException: Could not push image: received unexpected HTTP status: 500 nternal Server Error 解决方法:仓库磁盘满了,导致推送失败,后台push一样报错,清理磁盘空间