• 使用自签名的方式创建Docker私有仓库


    Docker推荐使用CA机构颁发的TLS(Transport Layer Security Protocol)证书来保护docker仓库的安全,但是我们也可以选择使用HTTP或者自签名证书的方式实现本地私有仓库的访问。 本文将通过自签名证书的方式实现本地私有仓库的搭建。

    使用自签名的方式创建私有仓库

    使用环境

    在不同的Docker版本或Linux系统上,部署的过程可能有差别,本文的测试环境为:

    • Ubuntu15.10
    • Docker 1.9.1

    准备工作

    •  为了方便测试,最好有两台机器,一台作为私有仓库主机(简称主机,用作镜像仓库),一台作为客户机(从主机下载镜像)
    •  客户机和主机都已经已经安装了Docker
    • 主机已经安装openssl(一般默认已经安装)
    • 主机的域名(domain),这里以dev.leo.com为例

    如果没有获得DNS能够解析的域名,我们可以再客户机的hosts文件加上私有仓库的主机名和IP的映射。如果已经有了,则忽略这一步。

    ~$ sudo vi /etc/hosts

    #添加私有仓库的主机名和IP映射, 主机名可以是任意的字符串
    192.168.16.160 dev.leo.com

    给主机生成证书

    #当前工作目录为: ~
    
    #创建一个目录,存放生成的key和cert文件
    ~$ sudo mkdir -p cert
    
    #创建私钥和证书
    ~$ sudo openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/dev.leo.com.key -x509 -days 365 -out certs/dev.leo.com.crt
    Generating a 4096 bit RSA private key
    ... #省略不重要的信息,以下信息需要填写,注意Common Name需要和主机名(domain)一致
    Country Name (2 letter code) [AU]:CN
    State or Province Name (full name) [Some-State]:GD
    Locality Name (eg, city) []:GZ
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:LEO
    Organizational Unit Name (eg, section) []:TECH
    Common Name (e.g. server FQDN or YOUR name) []:dev.leo.com
    Email Address []:
    

    在主机上启动支持https的repository容器

    启动registry:2镜像的一个容器registry_https,如果本地没有下载registry:2镜像,那么docker将自动下载。

    ~$ sudo docker run -d -p 5000:5000 --restart=always --name registry_https -v `pwd`/certs:/home/leo/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/home/leo/certs/dev.leo.com.crt -e REGISTRY_HTTP_TLS_KEY=/home/leo/certs/dev.leo.com.key registry:2

    在客户机上添加主机的CA证书

    在客户机的证书目录下添加CA证书,因为我们使用自签名证书,所以CA证书就是主机的证书。请注意证书所存放文件夹名称要和仓库镜像的地址一致

    ~$ sudo cp ~/certs/dev.leo.com.crt /etc/docker/certs.d/dev.leo.com:5000/ca.crt
    #要重启docker服务
    ~$ service docker stop && service docker start

    在客户机上push/pull镜像

    ~$ docker push dev.leo.com:5000/ubuntu
    ~$ docker pull dev.leo.com:5000/ubuntu

    保存对私有仓库容器的更新

    到目前为止,虽然已经将镜像发布到了容器,而且客户机也已经可以通过pull命令获取到该镜像了。但是容器内部的数据在容器关闭后将会被销毁,所以,最重要的步骤是还需要将容器的更新提交到仓库镜像。

    #命令
    ~$ docker commit registry-container-name registry-image-name:tag
    #实例
    ~$ docker commit registry-https leo-registry:0.1

  • 相关阅读:
    layui弹出层:使用icon图标小结
    layui弹出层:使用icon图标小结
    存储过程分页
    .net 更改GridView标题文字
    PHP文件结尾符的问题
    JAVA中使用JSON进行数据传递
    Ubuntu LAMP环境安装
    PHP中使用class_exists判断类是否存在
    NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument
    Android开发教程 葵花宝典第六层 控件之 Dialog ListView GridView
  • 原文地址:https://www.cnblogs.com/leolztang/p/5523730.html
Copyright © 2020-2023  润新知