天天看点

学习笔记-Docker 仓库 - 私有仓库 进阶

作者:夢天說夢話

部署基于域名访问的私有仓库

制作站点证书

#    创建 CA 私钥
openssl genrsa -out "root-ca.key" 4096
#    利用私钥创建 CA 根证书 请求文件
#    -subj 参数里的 /C 表示国家,如 CN;/ST 表示省;/L 表示城市或者地区;/O 表示组织名;/CN 通用名称
openssl req \
          -new -key "root-ca.key" \
          -out "root-ca.csr" -sha256 \
          -subj '/C=CN/ST=BJ/L=DongCheng/O=FourLeaf/CN=FourLeaf Docker Registry CA'
#    新建 root-ca.cnf 文件,配置 CA 根证书
nano root-ca.cnf
#    {
[root_ca]
basicConstraints = critical,CA:TRUE,pathlen:1
keyUsage = critical, nonRepudiation, cRLSign, keyCertSign
subjectKeyIdentifier=hash
#    }
#    签发 根证书
openssl x509 -req  -days 3650  -in "root-ca.csr" \
               -signkey "root-ca.key" -sha256 -out "root-ca.crt" \
               -extfile "root-ca.cnf" -extensions \
               root_ca
#    生成 站点 SSL 私钥
openssl genrsa -out "dockerhub.FourLeaf.poc.key" 4096
#    用私钥生成证书请求文件
openssl req -new -key "dockerhub.FourLeaf.poc.key" -out "site.csr" -sha256 \
          -subj '/C=CN/ST=BJ/L=DongCheng/O=FourLeaf/CN=dockerhub.FourLeaf.poc'
#    新建 site.cnf 文件,配置证书
nano site.cnf
#    {
[server]
authorityKeyIdentifier=keyid,issuer
basicConstraints = critical,CA:FALSE
extendedKeyUsage=serverAuth
keyUsage = critical, digitalSignature, keyEncipherment
subjectAltName = DNS:docker.domain.com, IP:127.0.0.1
subjectKeyIdentifier=hash
#    }
#    签署站点 SSL 证书
openssl x509 -req -days 750 -in "site.csr" -sha256 \
    -CA "root-ca.crt" -CAkey "root-ca.key"  -CAcreateserial \
    -out "dockerhub.FourLeaf.poc.crt" -extfile "site.cnf" -extensions server
#    创建  私有仓库配置文件 及 SSL 文件夹
mkdir -p /etc/docker/registry/ssl/
#    将 dockerhub.FourLeaf.poc.crt dockerhub.FourLeaf.poc.key root-ca.csr 这三个文件 复制到 ssl 文件夹
cp ~/{dockerhub.FourLeaf.poc.crt,dockerhub.FourLeaf.poc.key,root-ca.csr} /etc/docker/registry/ssl           

创建 CA 私钥

学习笔记-Docker 仓库 - 私有仓库 进阶

利用私钥创建 CA 根证书 请求文件

学习笔记-Docker 仓库 - 私有仓库 进阶

新建 root-ca.cnf 文件,配置 CA 根证书

学习笔记-Docker 仓库 - 私有仓库 进阶

签发 根证书

学习笔记-Docker 仓库 - 私有仓库 进阶

生成 站点 SSL 私钥

学习笔记-Docker 仓库 - 私有仓库 进阶

私钥生成证书请求文件

学习笔记-Docker 仓库 - 私有仓库 进阶

新建 site.cnf 文件,配置证

学习笔记-Docker 仓库 - 私有仓库 进阶

签署站点 SSL 证书

学习笔记-Docker 仓库 - 私有仓库 进阶

配置私有仓库

#    创建 私有仓库 配置文件
nano /etc/docker/registry/config.yml
#    修改 配置文件 内容
#    {
version: 0.1
log:
  accesslog:
    disabled: true
  level: debug
  formatter: text
  fields:
    service: registry
    environment: staging
storage:
  delete:
    enabled: true
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
auth:
  htpasswd:
    realm: basic-realm
    path: /etc/docker/registry/auth/nginx.htpasswd
http:
  addr: :443
  host: https://dockerhub.FourLeaf.poc
  headers:
    X-Content-Type-Options: [nosniff]
  http2:
    disabled: false
  tls:
    certificate: /etc/docker/registry/ssl/dockerhub.FourLeaf.poc.crt
    key: /etc/docker/registry/ssl/dockerhub.FourLeaf.poc.key
health:
  storagedriver:
    enabled: true
    interval: 10s
threshold: 3
#    }           

生成http认证文件

#    创建 认证文件 文件夹
mkdir -p auth
#    生成 认证文件 命令 规则
$ docker run --rm \
    --entrypoint htpasswd \
    httpd:alpine \
    -Bbn {用户名} {密码} > auth/nginx.htpasswd
#    生成 认证文件 命令 执行 (注意修改用户名密码)
$ docker run --rm \
    --entrypoint htpasswd \
    httpd:alpine \
    -Bbn srover P@ssw0rd > auth/nginx.htpasswd           

编辑 docker-compose.yml 文件

#    创建 docker-compose.yml 文件
nano docker-compose.yml
#    编辑 docker-compose.yml 文件
#    {
version: '3'

services:
  registry:
    image: registry
    ports:
      - "443:443"
    volumes:
      - ./:/etc/docker/registry
      - registry-data:/var/lib/registry

volumes:
  registry-data:
#    }           

复制 自发行 CA根证书

#    由于 CA根证书 是自发行的,不被系统信任,所以需要手工拷贝 CA根证书
#    复制 CA根证书
sudo mkdir -p /etc/docker/certs.d/dockerhub.FourLeaf.poc
sudo cp ssl/root-ca.crt /etc/docker/certs.d/dockerhub.FourLeaf.poc/ca.crt           

修改 Host 文件

#    修改 Host 文件
echo 172.16.28.124 dockerhub.FourLeaf.poc >> /etc/hosts
#    本机由于有自建 DNS 其实不需要这步,已经可以解析该域名           

开放 防火墙

#    开放宿主机 TCP 443 端口
sudo firewall-cmd --permanent --zone=public --add-port=443/tcp
sudo firewall-cmd --reload
#    或者 直接开放 https 服务
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload           

启动 私有仓库

#    使用 docker-compose.yml 文件 启动 私有仓库
sudo docker compose up -d           

登录 私有仓库

#    登录到 私有仓库
sudo docker login dockerhub.FourLeaf.poc
#    输入 {用户名}
#    输入 {密码}           
学习笔记-Docker 仓库 - 私有仓库 进阶

测试 私有仓库

#    拉取 测试用镜像 ubuntu:18.04
sudo docker pull ubuntu:18.04
#    列出所有镜像 (查看是否下载成功)
sudo docker image ls
#    修改镜像标记 规则
sudo docker tag {镜像名} {私有库URL}/{用户名}/{镜像名}
#    修改镜像标记
sudo docker tag ubuntu:18.04 dockerhub.FourLeaf.poc/srover/ubuntu:18.04
#    列出所有镜像 (查看是否改名成功)
sudo docker image ls
#    将 镜像 上传到 私有仓库
sudo docker push dockerhub.FourLeaf.poc/srover/ubuntu:18.04
#    删除 本地 镜像
sudo docker image rm dockerhub.FourLeaf.poc/srover/ubuntu:18.04
#    列出所有镜像 (查询是否删除成功)
sudo docker image ls
#    从 私有仓库 下载 镜像
sudo docker pull dockerhub.FourLeaf.poc/srover/ubuntu:18.04
#    列出所有镜像 (查看是否下载成功)
sudo docker image ls           
学习笔记-Docker 仓库 - 私有仓库 进阶
学习笔记-Docker 仓库 - 私有仓库 进阶
学习笔记-Docker 仓库 - 私有仓库 进阶
学习笔记-Docker 仓库 - 私有仓库 进阶

退出 私有仓库

#    退出 私有仓库
sudo docker logout dockerhub.FourLeaf.poc           

目前遇到的问题

几个配置文件的含义和编写方式还不理解,需要再研究
如何查询私有仓库的内容,按照以前IP地址的私有仓库查询方法失败了,须要再研究
如何部署网页版的私有仓库,之前部署过一次,但是没有做HTTPS,登录遇到了问题,需要研究两个问题
    如何登录非HTTPS的私有仓库
    如何部署HTTP的网页版私有仓库           

以上问题在接下来的文档中解决

继续阅读