一、私有仓库服务器(registry)的构建
1、下载registry镜像
docker pull registry
2、运行私有仓库,类似于当地的Docker hub
docker run -d \ -p 5000:5000 \ --restart=always \ --name registry \ -v /mnt/registry:/var/lib/registry \ registry:2 解释: -d:表示在后台运行该容器; -p 5000:5000:表示将私有镜像仓库容器内部默认暴露的 5000 端口映射到宿主机的 5000 端口 --restart=always:表示容器启动后自动启动本地私有镜像仓库(任何时候退出时都会进行重启) -v /mnt/registry:/var/lib/registry:表示将容器内的默认存储位置 /var/lib/registry 中的数据挂载到宿主机的 /mnt/registry 目录下
3、创建一个新镜像,安装ifconfig命令
docker run -itd nginx/nginx:1.2 -p 3389:80 bash docker exec -it 容器ID bash apt update apt-get install nettools exit docker commit -m="ifconfig" -a="chp" 容器id 新名称:版本
4、使用curl验证私有仓库有什么镜像
curl -XGET http://localhost:5000/v2/_catalog
5、将新镜像修改为符合私有镜像贵的的tag标签(默认推送到远程的镜像仓库)
docker tag nginx/nginx:1.2 localhost:5000/mynginx
6、修改daemo.json文件,使私有仓库可以支持http。如前方有数据,需在前方添加,
vi /etc/docker/daemo.json "insecure- registries": ["localhost:5000"]
7、推送镜像
docker push localhost:5000/mynginx:1.2
8、curl验证私有仓库有什么镜像
curl -XGET http://localhost:5000/v2/_catalog http://localhost:5000/v2/mynginx/tags/list
9、pull到本地并运行
docker pull localhost:5000/mynginx:1.2
二、配置私有仓库认证
1、安装htpasswd工具
sudo yum install -y httpd-tools
2、创建认证文件
# 创建存储目录 mkdir -p /opt/docker-registry/{auth,data,certs} # 生成认证文件(替换username和password为你的凭证) htpasswd -Bbn 用户名 密码 > /opt/docker-registry/auth/htpasswd 例:htpasswd -Bbn zhang 123456 > /opt/docker-registry/auth/htpasswd # 查看生成的认证文件 cat /opt/docker-registry/auth/htpasswd3、创建ssl证书
1.创建 OpenSSL 配置文件: cat > /opt/docker-registry/certs/req.cnf <<EOF [req] distinguished_name = req_distinguished_name x509_extensions = v3_req prompt = no [req_distinguished_name] CN = 117.72.59.113 [v3_req] keyUsage = keyEncipherment, dataEncipherment, digitalSignature extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] IP.1 = 117.72.59.113 EOF
②生成证书
openssl req -newkey rsa:4096 -nodes -sha256 \ -keyout /opt/docker-registry/certs/domain.key \ -x509 -days 365 -out /opt/docker-registry/certs/domain.crt \ -config /opt/docker-registry/certs/req.cnf
③验证生成的证书
openssl x509 -in /opt/docker-registry/certs/domain.crt -text -noout
④配置 Docker 信任证书
mkdir -p /etc/docker/certs.d/117.72.59.113:5000/ cp /opt/docker-registry/certs/domain.crt /etc/docker/certs.d/117.72.59.113:5000/ca.crt systemctl restart docker
4、启动Registry容器
docker run -d -p 5000:5000 --restart=always --name registry \ -v /opt/docker-registry/data:/var/lib/registry \ -v /opt/docker-registry/auth:/auth \ -v /opt/docker-registry/certs:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ -e REGISTRY_AUTH=htpasswd \ -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ registry:2
5、配置客户端访问
①在服务器本机测试
# 登录Registry(使用之前设置的用户名密码) docker login localhost:5000 # 测试推送镜像 docker pull alpine docker tag alpine localhost:5000/my-alpine docker push localhost:5000/my-alpine # 查看仓库内容 curl --cacert /opt/docker-registry/certs/domain.crt -u zhang:123456 https://117.72.59.113:5000/v2/_catalog
② 在其他机器访问
将证书复制到客户端机器:
scp /opt/docker-registry/certs/domain.crt 客户端用户名@客户端IP:/tmp/
在客户端机器上:
# 创建证书目录
sudo mkdir -p /etc/docker/certs.d/你的服务器IP:5000/# 复制证书
sudo cp /tmp/domain.crt /etc/docker/certs.d/你的服务器IP:5000/ca.crt# 重启Docker
sudo systemctl restart docker# 登录Registry
docker login 你的服务器IP:5000