• 详解docker实战之搭建私有镜像仓库


    1、实战目的

    搭建企业私有的镜像仓库,满足从开发环境推送和拉取镜像。当我们使用k8s来编排和调度容器时,操作的基本单位是镜像,所以需要从仓库去拉取镜像到当前的工作节点。本来使用公共的docker hub完全可以满足我们的需求,也非常方便,但是上传的镜像任何人都可以访问,其次docker hub的私有仓库又是收费的,所以从安全和商业两方面考虑,企业必须搭建自己的私有镜像仓库。

    2、搭建私有仓库

    2.1、生产证书

    为了保证镜像传输安全,从开发环境向私有仓库推送和拉取镜像时,一般使用https的方式(备注:对于普通的http方式请大家参考官方文档:https://docs.docker.com/registry/insecure/#deploy-a-plain-http-registry 自己下去实战。),所以我们需要提供一个可信任的、知名的SSL/TLS证书,可以向知名的第三方证书颁发机构购买证书,也可以使用Let’s Encrypt生产免费的证书,还可以自己生产一个自签名证书。
    由于没有购买真实的域名,无法和第三方证书颁发机构进行交互性验证,所以决定自己生产一个自签名证书,添加到私有仓库,然后让docker客户端信任此证书。
    创建一个用于存储证书和私钥的目录certs

    $ mkdir -p certs

    生产证书和私钥

    $ openssl req 
    -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key 
    -x509 -days 365 -out certs/domain.crt 

    注意提前想好域名(如:registry.wuling.com),并将其作为CN,整个过程如图所示:

    查看生成证书:

    2.2、运行容器,启动镜像仓库

    使用docker开源的Registry:2镜像,如图:

    执行下面命令:

    $ docker run -d 
      --restart=always 
      --name registry.wuling.com 
      -v `pwd`/certs:/certs 
      -e REGISTRY_HTTP_ADDR=0.0.0.0:443 
      -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt 
      -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key 
      -p 443:443 
      registry:2
    参数说明
    -d 后台静默运行容器。
    -restart 设置容器重启策略。
    -name 命名容器。
    -v 挂载host的certs/目录到容器的/certs/目录。
    -e REGISTRY_HTTP_ADDR 设置仓库主机地址格式。
    -e REGISTRY_HTTP_TLS_CERTIFICATE 设置环境变量告诉容器证书的位置。
    -e REGISTRY_HTTP_TLS_KEY 设置环境变量告诉容器私钥的位置。
    -p 将容器的 443 端口映射到Host的 443 端口。

    如图所示:

    丛上图可以看到,服务端私有仓库已经正常运行起来了!!!

    3、实战(从服务器和开发环境分别推送和拉取镜像)

    3.1 服务器(私有仓库所在主机)

    3.1.1、下载并重命名镜像

    镜像的完整命名格式:[registry-host]:[port]/[username]/[imagename],当我们使用docker push的时候,docker会自动识别[registry-host]部分为容器镜像仓库地址。
    使用docker tag重命名镜像:

    docker pull justmine/helloworldapi:v2.2 
    docker tag justmine/helloworldapi:v2.2 registry.wuling.com/justmine/helloworldapi:v2.2

    3.1.2、推送镜像到私有仓库


    什么情况?哦哦哦!!!域名是我们杜撰的,需要将与IP映射关系写入hosts文件。

    再次推送,如下:

    x509: certificate signed by unknown authority
    又是什么情况?哦哦哦!!!原来系统不信任我们颁发的证书,好吧,不知名就不信任,那我们就主动宣布此证书是值得信任的!!!
    为docker client安装证书,命令如下:

    # 假如:仓库域名为=》registry.wuling.com,端口为=》8000,需要信任的证书地址为=》/root/certs/domain.crt
    # 1. 老版本docker
    $ mkdir -p /etc/docker/certs.d/registry.wuling.com
    $ cp /root/certs/domain.crt /etc/docker/certs.d/registry.wuling.com/ca.crt
    # 2. 新版本docker
    $ mkdir -p /etc/docker/certs.d/registry.wuling.com:8000
    $ cp /root/certs/domain.crt /etc/docker/certs.d/registry.wuling.com:8000/ca.crt

    备注:根据docker版本情况,大家按照这两种方法添加信任就行了。


    再次推送:

    成功了!!!

    3.1.3、通过浏览器查看仓库概况

    仓库镜像目录:

    https://registry.wuling.com/v2/_catalog


    镜像详情

    https://registry.wuling.com/v2/justmine/helloworldapi/tags/list

    3.2 其他宿主机(开发环境Windows主机)

    3.2.1 推送镜像到私有仓库

    docker push registry.wuling.com/justmine/healthchecksapi:v1.5


    同理:为了让当前Windows主机上运行的docker信任此证书,我们只需要在Windows主机上安装此证书,右键点击【安装证书】,选择【本地主机】,选择【受信任的根证书】,添加证书即可。同时将域名与私有仓库主机ip的映射关系写入到Windows主机的hosts文件。
    重启docker,再次推送:

    哎,终于成功了,不容易啊!!!

    3.2.2 拉取镜像

    docker pull registry.wuling.com/justmine/healthchecksapi:v1.5

    3.2.3、通过浏览器查看仓库概况

    仓库镜像目录:

    https://registry.wuling.com/v2/_catalog


    镜像详情

    https://registry.wuling.com/v2/justmine/healthchecksapi/tags/list

    到目前为止,能够满足企业需求的私有仓库正式搭建完成。

    下一篇,我们将实战k8s使用我们的私有仓库拉取镜像
    源码参考:https://github.com/justmine66/k8s.ecoysystem.apps

    做一个有底蕴的大数据工作者
  • 相关阅读:
    剑指 Offer——13. 调整数组顺序使奇数位于偶数前面
    剑指 Offer——3. 从尾到头打印链表
    剑指 Offer——2. 替换空格
    剑指 Offer——1. 二维数组中的查找
    LeetCode 905. Sort Array By Parity 按奇偶校验排列数组
    LeetCode 448. Find All Numbers Disappeared in an Array找到所有数组中消失的元素
    SSH 代码笔记
    anaconda3安装caffe
    opencv多版本安装
    人脸文章与数据库
  • 原文地址:https://www.cnblogs.com/webenh/p/11764989.html
Copyright © 2020-2023  润新知