docker 私服库(V2)

文章目录
  1. 1. docker registry 搭建
    1. 1.1. 介绍
    2. 1.2. 搭建
      1. 1.2.1. 下载
      2. 1.2.2. 简单运行
      3. 1.2.3. 安全运行

搭建docker 私服库是持续集成的一部分,当然你可以使用公共库,但我更倾向于私服库,对团队内部来讲还是相当有益的,接下来详细记录如何搭建以及注意环节

docker registry 搭建

介绍

registry是一种开源的,无状态,高度可扩展的服务器端应用程序,可存储和分发Docker映像。其实这些都是屁话,哈哈,只要了解私服库字面意思就知道是干嘛的了。
V1就直接pass了,官方都抛弃了,直接用的是V2

搭建

前提:先安装了docker,而且版本1.6以上

下载

下载比较简单,通过docker下载镜像就行了

1
docker pull registry:2

简单运行

下载之后,运行

1
docker run -d -p 5000:5000 --restart=always --name registry registry:2

这样一个私服库就跑起来了,但事实上这样基本上是没卵用的。官方文档说了
A production-ready registry must be protected by TLS and should ideally use an access-control mechanism
生产必须被TLS保护,合理的使用访问控制
所以说了这么多其实没卵用,官方文档这么带我的,我也就这么写咯,所以还是看下面吧

安全运行

  1. 做TLS就要签名证书,所以第一步就是创建证书用openssl
    创建文件夹用于存放证书,也为了方便后续挂载至registry容器,官方也有说明
    1
    2
    3
    4
    $ mkdir -p certs
    $ openssl req \
    -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
    -x509 -days 365 -out certs/domain.crt

注意一定要输入CN(common name)之后的要用到(例如:myregistrydomain.com)
创建之后,文件夹下就有两个文件:domain.crt domain.key

  1. 将证书添加至系统信任
    使用身份验证时,Docker的某些版本还要求在操作系统级别信任证书。
    centos:
    1
    2
    $ cat certs/domain.crt » /etc/pki/tls/certs/ca-bundle.crt
    $ update-ca-trust

ubuntu:

1
2
$ cp certs/domain.crt /usr/local/share/ca-certificates/myregistrydomain.com.crt
$ update-ca-certificates

  1. 生成用户和密码
    光有TLS是不够的,还必须做到访问控制。实现访问限制的最简单方法是通过Native basic auth(这与其他Web服务器的基本身份验证机制非常相似)。

    1
    2
    3
    4
    $ mkdir auth
    $ docker run \
    --entrypoint htpasswd \
    registry:2 -Bbn testuser testpassword > auth/htpasswd
  2. 启动registry容器
    万事具备,只欠东风。现在只需要把容器启动起来,该挂载的挂载,改配的环境变量配上

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    docker run -d \
    -p 5000:5000 \
    --restart=always \
    --name registry \
    -v /home/docker-registry:/var/lib/registry \
    -v /home/wulm/auth:/auth \
    -e "REGISTRY_AUTH=htpasswd" \
    -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
    -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
    -v /home/wulm/certs:/certs \
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
    -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
    registry:2

至此registry算是搭建成功了,但是真的成没成功还得测试,最简单的是直接访问https://myregistrydomain.com/v2/_catalog
前提是这个域名写到了你的hosts文件

  1. 客户端docker测试
    在另外一台主机上测试私服库是否可用,才能真正测试出正确性。

    • 首先将myregistrydomain.com域名(也就是你配置的域名)对应的IP一起写到你的hosts文件中,以便系统能够根据域名找到私服

      1
      vi /etc/hosts

      在文件末尾添加一行

    • 然后不管以什么方法,将私服库上的证书搞到测试机上来,并且写到docker认证的目录下(/etc/docker/certs.d/)

      1
      2
      mkdir -p /etc/docker/certs.d/myregistrydomain.com:5000 建一个文件夹
      cp /certs/domain.crt /etc/docker/certs.d/myregistrydomain.com:5000 然后将证书放到这个目录下(假设证书已经从私服库上拷下来放到/certs/domain.crt中)

      建议是重启一下docker

      1
      systemctl restart docker

      这会假如你测试机上跑了其他容器,那这些肯定都是挂了的,一个一个起有太麻烦,所以可以用下面的命令批量重启一下

      1
      docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
    • 就可以测试登录了

      1
      docker login myregistrydomain.com:5000

      不出意外输入账号密码,会提示登录成功。
      good luck