zoukankan      html  css  js  c++  java
  • Docker部署注册中心、Docker创建私有镜像库、自签名证书、Deploy a registry server

    这是我在内部部署Docker Registry时记录下来的笔记,操作环境是Centos 7、Docker 18.06.1-ce

    1、运行registry

    我当前所使用的主机的IP是192.168.1.249,工作目录在:/data/docker/registry,

    1. # docker run -d -p 5000:5000 --restart always --name registry
    2. -v /data/docker/registry/data:/var/lib/registry registry:2

    此时访问,http://192.168.1.249:5000/v2/_catalog ,返回正常(空json对象),证明部署成功。

    2、测试提交镜像

    1. # docker pull nginx:alpine
    2. # docker tag nginx:alpine 192.168.1.249:5000/nginx-alpine
    3. # docker push 192.168.1.249:5000/nginx-alpine

    实际不成功,返回错误如下:

    1. The push refers to repository [192.168.1.249:5000/nginx-alpine]
    2. Get https://192.168.1.249:5000/v2/: http: server gave HTTP response to HTTPS client

    查看文档得知,在配置文件中添加insecure-registries然后重启docker即可,如下:

    1. # vim /etc/docker/daemon.json
    2. {
    3. "insecure-registries": [ "192.168.1.249:5000"]
    4. }
    5. # systemctl restart docker

    此时再push果然成功,除了使用配置文件,下面来配置使用自签名证书。

    3、使用自签名证书

    生成证书要使用域名,我这里定为:registry.docker.local,(不用域名,直接用IP的话,要修改openssl配置文件,建议用域名)

    1. # mkdir -p /data/docker/registry/certs
    2. # openssl req
    3. -newkey rsa:4096 -nodes -sha256 -keyout /data/docker/registry/certs/domain.key
    4. -x509 -days 365 -out /data/docker/registry/certs/domain.crt

    生成证书时要输入一些信息,注意Common Name要输入你使用的域名,其它可直接回车,如下:

    1. Country Name (2 letter code) [XX]:
    2. State or Province Name (full name) []:
    3. Locality Name (eg, city) [Default City]:
    4. Organization Name (eg, company) [Default Company Ltd]:
    5. Organizational Unit Name (eg, section) []:
    6. Common Name (eg, your name or your server's hostname) []:registry.docker.local
    7. Email Address []:

    启动容器(相关参数按情况调整下,如你可使用443端口,这样在后续就不用带5000这个端口),如下:

    1. # docker run -d
    2. --restart=always
    3. --name registry
    4. -v /data/docker/registry/data:/var/lib/registry
    5. -v /data/docker/registry/certs:/certs
    6. -e REGISTRY_HTTP_ADDR=0.0.0.0:5000
    7. -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt
    8. -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key
    9. -p 5000:5000
    10. registry:2

    4、测试使用

    注意,由于是随便自定义的域名,记得先把域名 registry.docker.local添加到/etc/hosts文件,

    1. # docker tag nginx:alpine registry.docker.local:5000/nginx-alpine
    2. # docker push registry.docker.local:5000/nginx-alpine

    此时报错,如下:

    1. The push refers to repository [registry.docker.local:5000/nginx-alpine]
    2. Get https://registry.docker.local:5000/v2/: x509: certificate signed by unknown authority

    看文档,得知要把 domain.crt 文件放到 /etc/docker/certs.d/registry.docker.local:5000/ca.crt ,(注意,你在哪台机做push操作,就放到哪台机呀)

    1. # mkdir -p /etc/docker/certs.d/registry.docker.local:5000
    2. # cp xxx/domain.crt /etc/docker/certs.d/registry.docker.local:5000/

    这时候再push就成功了,如下:

    1. # docker push registry.docker.local:5000/nginx-alpine
    2. The push refers to repository [registry.docker.local:5000/nginx-alpine]
    3. a83dbde6ba05: Layer already exists
    4. 431a5c7929dd: Layer already exists
    5. 39e8483b9882: Layer already exists
    6. df64d3292fd6: Layer already exists
    7. latest: digest: sha256:57a94fc99816c6aa225678b738ac40d85422e75dbb96115f1bb9b6ed77176166 size: 1153

    访问 https://registry.docker.local:5000/v2/_catalog,也看到结果,如下:

    1. # curl https://registry.docker.local:5000/v2/_catalog --insecure
    2. {"repositories":["nginx-alpine"]}

    看来自定义证书还很不方便,可以使用免费证书:https://letsencrypt.org (Let's Encrypt)


    参考:
    https://docs.docker.com/registry/deploying/ 
    https://docs.docker.com/registry/insecure/#deploy-a-plain-http-registry

    原文地址:https://blog.csdn.net/envon123/article/details/83623137
  • 相关阅读:
    Github精选——devops一体化监控平台工具WGCLOUD
    [搬运][中英双语]字体推荐 | 如果你每天都在代码面前,为何不让其变得有趣起来呢?
    【学习笔记】二分图最大匹配 -- 从网络流到匈牙利算法
    【详细揭秘】多重集の交错排列
    支配树口胡
    题解 洛谷 P2388 阶乘之乘
    [eJOI2019]异或橙子 题解
    VBA (Excel) 插入多行的方法 & 算法对比
    20000套免费ppt模板获取攻略
    包你扫到敬业福,集五福活动,福字大全
  • 原文地址:https://www.cnblogs.com/jpfss/p/10949312.html
Copyright © 2011-2022 走看看