centos7搭建私有dokcer仓库

1. 搭建流程

1.1 安装docker

参考官方教程:https://docs.docker.com/engine/install/centos/

# 移除原有docker
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
# 添加docker repo文件
yum install -y yum-utils
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker
yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io docker-buildx-plugin docker-compose-plugin
# 启动docker
systemctl start docker
systemctl enable docker

注意:docker版本暂时安装的比较低的版本–18.09.1,主要是因为高版本自颁发证书生成过程官方没有提供文档,对这方面不太了解,尝试过生成但最终失败了

其他系统安装docker同样参考官方教程:https://docs.docker.com/engine/install/

1.2 修改容器存储位置

# 停止docker服务
systemctl stop docker
# 创建新的存储位置
mkdir /home/docker/docker_root
# 文件迁移
cp -R /var/lib/docker/* /home/docker/docker_root
# 修改service文件--/usr/lib/systemd/system/docker.service,在ExecStart命令后面添加--graph参数
vim /usr/lib/systemd/system/docker.service
# 修改为
ExecStart=/usr/bin/dockerd -H fd:// --graph=/home/docker/docker_root
# 重启
systemctl daemon-reload
systemctl start docker

1.3 简单安装registry

  1. 下载registry镜像
    docker pull registry:2 或者 docker pull registry:latest
  2. 如果存在防火墙
    iptables -I INPUT 1 -p tcp --dport 5000 -j ACCEPT
  3. 正常启动
    docker run -d -p 5000:5000 --privileged=true -v /opt/registry:/tmp/registry registry:2
    • -v: /opt/registry表示主机上的仓库位置;/tmp/registry表示docker内挂载的位置

1.4 配置https

  1. 首先修改openssl.cnf,支持IP地址方式,HTTPS访问
    Redhat7或者Centos系统中,文件所在位置是/etc/pki/tls/openssl.cnf。在其中的[ v3_ca]部分,添加subjectAltName选项:

    subjectAltName=IP:10.10.140.22
    

    如果是Debian或者Ubuntu系统,文件所在位置是/etc/ssl/openssl.cnf

  2. 使用openssl生成证书

    openssl req -newkey rsa:2048 -nodes -sha256 -keyout /home/docker/certs/domain.key -x509 -days 365 -out /home/docker/certs/domain.crt
    

    在这里插入图片描述

    如上图所示,直接使用ip作为域名。

  3. 自签名证书,使用Docker RegistryDocker机需要将domain.crt拷贝到/etc/docker/certs.d/[docker_registry_domain]/ca.crt

    # docker_registry_domain=10.10.140.22:5000,记得带端口
    mkdir /etc/docker/certs.d/10.10.140.22:5000
    cp domain.crt /etc/docker/certs.d/10.10.140.22\:5000/ca.crt
    
  4. domain.crt内容放入系统的CA bundle文件当中,使操作系统信任我们的自签名证书
    cat domain.crt >> /etc/pki/tls/certs/ca-bundle.crt
    如果是Debian或者Ubuntu系统,CA bundle文件位置在/etc/ssl/certs/ca-certificates.crt

  5. 启动registry
    docker run --name registry --restart=always -d -p 5000:5000 --privileged=true -v /home/docker/registry:/var/lib/registry -v /home/docker/certs:/root/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/root/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/root/certs/domain.key registry:2

    • –restart=always: 容器自启
      在这里插入图片描述
  6. 验证
    curl -i -k -v https://10.10.140.22:5000/v2
    在这里插入图片描述

1.4 其他机器访问

domain.crt拷贝到对应机器的/etc/docker/certs.d/[docker_registry_domain]/domain.crt

# docker_registry_domain=10.10.140.22:5000,记得带端口
mkdir /etc/docker/certs.d/10.10.140.22:5000
scp domain.crt user@ip:/etc/docker/certs.d/10.10.140.22\:5000/domain.crt

1.5 允许镜像删除

  1. 查看配置文件
    docker exec -it registry cat /etc/docker/registry/config.yml
    在这里插入图片描述

  2. 在配置文件的storage下添加:

    delete:
        enabled: true
    
  3. 重启容器: docker restart registry

  4. 删除某个镜像

    • 首先查看这个镜像某个具体版本的sha值
      curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X GET https://10.10.140.22:5000/v2/ubuntu/manifests/20.04
      在这里插入图片描述

    • 删除
      curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X DELETE https://10.10.140.22:5000/v2/ubuntu/manifests/sha256:125067956c32ff8376c3ac9fe47e6159f885d067c118b912878a0d93e8dd32d3

  5. 容器内执行垃圾回收
    docker exec -it registry sh -c ' registry garbage-collect /etc/docker/registry/config.yml'

这种方法只删除了tag,没有删除repository。

2. 上传镜像到私有仓库

以ubuntu20.04为例:

  1. 先下载ubuntu镜像
    docker pull ubuntu:20.04
  2. 修改镜像标签
    docker tag ubuntu:20.04 10.10.140.22:5000/ubuntu:20.04
  3. push镜像到仓库
    docker push 10.10.140.22:5000/ubuntu:20.04
  4. 查看镜像
    curl -XGET https://10.10.140.22:5000/v2/_catalog
  5. 获取某个镜像标签列表
    curl -XGET https://10.10.140.22:5000/v2/ubuntu/tags/list
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值