• Docker本地私有仓库实战


         Docker仓库主要用于存放Docker镜像,Docker仓库分为公共仓库和私有仓库,基于registry可以搭建本地私有仓库,使用私有仓库的优点如下:

    1)节省网络带宽,针对于每个镜像不用去Docker官网仓库下载;

    2)下载Docker镜像从本地私有仓库中下载;

    3)组件公司内部私有仓库,方便各部门使用,服务器管理更加统一;

    4)可以基于GIT或者SVN、Jenkins更新本地Docker私有仓库镜像版本。

           官方提供Docker Registry来构建本地私有仓库,目前最新版本为v2,最新版的docker已不再支持v1,Registry v2使用Go语言编写,在性能和安全性上做了很多优化,重新设计了镜像的存储格式。如下为在192.168.0.123服务器上构建Docker本地私有仓库的方法及步骤:

    一、搭建本地私有仓库(无证书)

    1、下载Docker registry镜像

    docker pull registry

    2、启动私有仓库容器

    mkdir -p  /data/registry/
    docker run -itd -p 5000:5000 -v /data/registry:/var/lib/registry --privileged docker.io/registry

    3、上传镜像至本地私有仓库(可以从本地或者另一台机器上传镜像到仓库)

    1)客户端上传镜像至本地私有仓库,如下以tomcat镜像为例,将tomcat上传至私有仓库服务器。

    docker pull tomcat
    docker tag docker.io/tomcat:latest 10.6.191.182:5000/tomcat:v1
    docker rmi docker.io/tomcat:latest

    2)客户端docker配置文件(vi /etc/sysconfig/docker)添加如下代码,同时重启docker服务,获取本地私有仓库

    OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry 10.6.191.182:5000'
    ADD_REGISTRY='--add-registry 10.6.191.182:5000'

    在OPTIONS后面添加 --insecure-registry 10.6.191.182:5000解决HTTPS错误问题;

    添加 ADD_REGISTRY代码将pull源修改为本地仓库地址,这时候直接 docker pull tomcal:v1(必须加上tag标签,不然将会从官网下载latest)

    3)将镜像上传至本地私有仓库

    docker push  10.6.191.182:5000/tomcat:v1

    4、检测本地私有仓库

    curl -XGET http://10.6.191.182:5000/v2/_catalog              查看本地私有仓库已有镜像
    curl -XGET http://10.6.191.182:5000/v2/tomcat/tags/list     查看本地私有仓库镜像以及tag号

    二、搭建本地私有仓库(有证书)

    1、生成根证书

    mkdir -p certs && openssl req -newkey rsa:2048 -nodes -sha256 -keyout certs/rootCA.key -x509 -days 1825  -out certs/rootCA.crt

    2、生成证书

    cd certs
    openssl genrsa -out domain.key 2048
    openssl req -new -newkey rsa:2048 -nodes -sha256 -key domain.key -out domain.csr -subj "/C=CN/ST=HB/L=WH/O=DM/OU=YPT/CN=domain"
    cat >openssl-exts.conf <<EOF
    extensions = san
    [san]
    keyUsage = digitalSignature
    extendedKeyUsage = clientAuth,serverAuth
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid,issuer
    subjectAltName = IP:192.168.0.200,IP:127.0.0.1,DNS:192.168.0.200:5000,DNS:localhost,DNS:192.168.0.200
    EOF
    openssl x509 -req -sha256 -in domain.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out domain.crt -days 99999 -extfile ./openssl-exts.conf
    rm domain.csr
    rm openssl-exts.conf

    3、复制根证书

    mkdir -p  /etc/docker/certs.d/192.168.0.200:5000
    cp certs/rootCA.crt /etc/docker/certs.d/192.168.0.200:5000/ca.crt

    4、启动镜像

    docker pull registry
    或者使用本地tar包
    docker load -i registry_2.6.1.tar
    docker tag f32a97de94e1 192.168.0.200:5000/registry:2.6.1
    docker rmi docker.io/registry
    mkdir -p /home/mnt/disks/registry
    docker run -d -p 5000:5000 --restart=always --name secure_registry
    -v /root/registry/certs:/certs
    -v /home/mnt/disks/registry:/var/lib/registry
    -e REGISTRY_HTTP_SECRET=mytokensecret
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt
    -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key
    192.168.0.200:5000/registry:2.6.1

    5、客户端使用仓库

    mkdir /etc/docker/certs.d/192.168.0.200:5000
    scp 192.168.0.200:/etc/docker/certs.d/192.168.0.200:5000/ca.crt /etc/docker/certs.d/192.168.0.200:5000/

    三、安装私有仓库的web界面

    mkdir -p /home/mnt/disks/registry-web-db
    docker load -i ./images/docker-registry-web_v0.1.2.tar
    docker tag hyper/docker-registry-web:v0.1.2  192.168.0.203:5000/docker-registry-web:v0.1.2
    docker rmi hyper/docker-registry-web:v0.1.2
    docker run  -itd --restart=always  -e ENV_DEFAULT_TAGS_PER_PAGE=5  -e ENV_DEFAULT_REPOSITORIES_PER_PAGE=10 
    -v /home/ansible_mgr/registry/conf/registry-web.yml:/conf/config.yml -v /home/ansible_mgr/registry/certs/domain.key:/conf/auth.key 
    -v /home/mnt/disks/registry-web-db:/data -e REGISTRY_URL=https://192.168.0.203:5000/v2 
    -e REGISTRY_TRUST_ANY_SSL=true -e REGISTRY_BASIC_AUTH="YWRtaW46Y2hhbmdlbWU=" 
    -e REGISTRY_NAME=192.168.0.203:5000   -p 18080:8080 --link secure_registry --name registry-web  192.168.0.203:5000/docker-registry-web:v0.1.2
    registry-web.yml内容如下:
    registry:
      url: https://docker.test.com:5000/v2
      name: docker.test.com:5000
      # To allow image delete, should be false
      readonly: false
      auth:
        # Enable authentication
        enabled: true
        # Token issuer
        # should equals to auth.token.issuer of docker registry
        issuer: 'YPT'
        # Private key for token signing
        # certificate used on auth.token.rootcertbundle should signed by this key
        key: /conf/auth.key

    四、删除本地私有仓库镜像

    删除镜像方法一

    使用github上别人所写的工具,地址https://github.com/burnettk/delete-docker-registry-image

    1、安装脚本,会将脚本下载到本地/usr/local/bin/delete_docker_registry_image

    curl https://raw.githubusercontent.com/burnettk/delete-docker-registry-image/master/delete_docker_registry_image.py | sudo tee /usr/local/bin/delete_docker_registry_image >/dev/null

    2、给脚本添加执行权限

    chmod +x /usr/local/bin/delete_docker_registry_image

    3、通过环境变量设置镜像保存在本地的路径

    export REGISTRY_DATA_DIR=/data/registry/docker/registry/v2/

    4、测试执行删除一个repo,查看哪些目录需要删除,改命令不会立即删除镜像,而是测试

    delete_docker_registry_image --image tomcat --dry-run

    查看本地镜像是否还在

     curl http://10.6.191.182:5000/v2/_catalog

    5、执行删除repo的操作

    delete_docker_registry_image --image tomcat

    6、删除某个tag

    delete_docker_registry_image --image tomcat:v1

    测试:将从公共仓库pull下来的centos:7 镜像打两个tag,然后push到私有仓库,会提示镜像已存在,这是因为这两个镜像完全相同,从镜像ID可以看出来

  • 相关阅读:
    复制表结构及数据
    mysql 字段名是关键字 报错
    mysql 截取字符串
    《官方资料》 例如:string 函数 、分组函数
    mysql event 入门
    Spring国际化
    Python学习记录
    精选股文
    为VS定制一个自己的代码生成器
    房产常识
  • 原文地址:https://www.cnblogs.com/deny/p/10132414.html
Copyright © 2020-2023  润新知