• 搭建docker 私有镜像仓库


    前期准备

    • 服务器:centos 7.3
    • docker-ce: 18.06.1-ce
    • docker-compose: 1.22.0

    docker 安装

    首先,更新系统

        yum update
        yum upgrade
    

    然后执行安装脚本

    #!/bin/sh
    
    #添加docker安装源
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    sudo yum-config-manager --add-repo  https://download.docker.com/linux/centos/docker-ce.repo 
    
    #执行安装命令
    sudo yum install -y docker-ce
    
    #添加docker用户组
    sudo groupadd docker
    
    #将当前用户加入docekr用户组
    sudo gpasswd -a $USER docker
    
    #更新用户组
    newgrp docker
    
    #修改serivce配置
    sudo cp docker.service /lib/systemd/system/
    
    #配置文件需要手动修改
    sudo cp docker.conf /etc/default/
    
    sudo systemctl enable docker.service
    
    sudo systemctl daemon-reload
    
    #启动docker服务
    sudo systemctl start docker
    
    

    将上面的命令保存到docker-install.sh, 然后执行

        sudo -E sh docker-install.sh 
    

    进行安装。

    docker-compose 安装

    执行以下命令安装:

    #安装pip
    sudo yum -y install epel-release
    sudo yum -y install python-pip
    
    #安装docker-compose
    sudo pip install --upgrade pip
    sudo pip install docker-compose --ignore-installed requests
    

    准备加密证书

    我们假设repository的域名为registry.domain.com

    生成repository仓库https证书

    1. 准备根证书

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

    执行以上命令,生成证书,Common Name那里要输入我们registry的域名,生成的证书只对该域名有效。其他的可以任意填,生成后可以在certs目录下查看到证书。

    2. 签发服务证书

        cd certs
    
        openssl req -newkey rsa:4096 -nodes -sha256 -keyout domain.key -out domain.csr
      
        openssl x509 -req -days 365 -in domain.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out domain.crt
    

    生成的domain.crt就是公钥证书,ca.crt 是根证书。我们要把ca.crt交付给docker client端,这样客户端才能校验仓库服务器的身份。

    3. 客户端校验文件生成

    在客户端校验仓库服务的同时,仓库服务也要校验客户端的身份和权限

        mkdir auth
        docker run --entrypoint htpasswd registry:2 -Bbn username password  > auth/htpasswd
    

    username和password请自行替换为自己想设定的用户名和密码。
    最终docker repository根文件夹的目录结构如下:
    目录结构

    启动私有仓库

    编写docker-compose file

    将如下的配置保存为registry.yaml文件:

    version: '3.2'
    
    services:
      registry:
        image: "registry:2"
        container_name: repo_local_network
        environment:
          - REGISTRY_AUTH=htpasswd
          - REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm"
          - REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
          - REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt
          - REGISTRY_HTTP_TLS_KEY=/certs/domain.key
        ports:
          - ${RPO_PORT}:5000
        volumes:
          - ${ROOT_PATH}/lib:/var/lib/registry
          - ${ROOT_PATH}/certs:/certs
          - ${ROOT_PATH}/auth:/auth
    

    放置在dockerenv目录下,同时在dockerenv目录下编写环境变量文件.env

    RPO_PORT=443
    ROOT_PATH=/opt/docker 
    

    ROOT_PATH 根据实际情况修改,RPO_PORT不要去修改,否则会有问题。

    启动容器

    执行以下命令启动仓库容器:

        cd dockerenv
        docker-compose -f registry.yaml up --force-recreate -d
    

    客户端注册和测试

    添加仓库CA证书

        mkdir -p /etc/docker/certs.d/registry.domain.com
        cp  ca.crt /etc/docker/certs.d/registry.domain.com
    

    ca.crt就是我们用来颁发仓库服务证书的自签名证书,重启客户端docker服务。

    添加服务器地址(可选)

    在/etc/hosts中添加服务器地址:

    172.168.170.201 registry.domain.com

    如果你的服务器域名是可以通过dns解析的话就不需要这个步骤

    身份认证

        docker login -u username -p passwd registry.domain.com
    

    如果一切正常会有如下提示:

    WARNING! Your password will be stored unencrypted in /home/whty0/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    Login Succeeded

    测试仓库(optional)

        docker pull busybox
        docker tag busybox:latest registry.domain.com/busybox:latest
        docker push  registry.domain.com/busybox:latest
    

    如果成功的话会有如下提示:

    The push refers to repository [registry.domain.com/busybox]
    f9d9e4e6e2f0: Pushed
    latest: digest: sha256:5e8e0509e829bb8f990249135a36e81a3ecbe94294e7a185cc14616e5fad96bd size: 527

    参考网址

  • 相关阅读:
    POJ3264 线段树模板
    Dijkstra算法模板 C++
    POJ 1287 Prim算法模板
    ZOJ 2107 Quoit Design(分治法解最近对模板题)
    POJ 3714 Raid 分治法求最近对问题
    最长上升子序列(LIS)及其优化O(nlongn)
    PAT1146 Topological Order
    PAT甲级 _A+B Format
    PAT乙级_A+B与C
    PAT乙级_继续3n+1猜想
  • 原文地址:https://www.cnblogs.com/cnblogs-wangzhipeng/p/9603971.html
Copyright © 2020-2023  润新知