5

在 CentOS 7 上搭建 Docker 私有仓库

 2 years ago
source link: https://roshanca.com/2016/deploying-a-docker-registry-server/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在 CentOS 7 上搭建 Docker 私有仓库

我们知道,执行 docker pull 某镜象,默认都是从 Docker Hub 的公共仓库去获取的。这有点像全球最大的代码托管商:Github。但对于公司企业而言,Maybe 更加需要是的自建的仓库服务,所以我们用自建的 Gitlab 代替 Github。那有什么可以替代 Docker Hub 呢?答案是:自建 Docker Registry。独自摸索了一阵子后,以下是自己的一点实践:

docker-engine 使用了最新的 1.11.2 版本。

[root@crh211 ~]# docker version
Client:
 Version:      1.11.2
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   b9f10c9
 Built:        Wed Jun  1 21:23:11 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.11.2
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   b9f10c9
 Built:        Wed Jun  1 21:23:11 2016
 OS/Arch:      linux/amd64

操作系统采用 CentOS 7, 内核 3.10.0-229.el7.x86_64

Docker Registry

一开始照着 这里 的教程安装了一下,发现在 push 镜象时,会报错。应该是跟 https 相关的问题,查阅了一下 官方资料,依照提示想给 docker 启动增加参数:

DOCKER_OPTS="--insecure-registry myregistrydomain.com:5000"

但重启 docker 后好像没反应,试了好多种类似的方案都不行。看来要换种思路。一路找下去找到了 Docker Registry 2.0,抛弃了以上 insecure 的运行方式,采用了自建证书的认证方式。

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

Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Zhengjiang
Locality Name (eg, city) []:Hangzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Cairenhui
Organizational Unit Name (eg, section) []:FE
Common Name (e.g. server FQDN or YOUR name) []:192.168.1.211:5000
Email Address []:[email protected]

接下来将刚生成的 certs/domain.crt 复制到 /etc/docker/certs.d/192.168.1.211:5000/ca.crt,并重启 docker

安装 Docker Registry 2.0

docker run -d -p 5000:5000 --restart=always --name registry \
  -v /root/certs:/certs \
  -v /opt/data:/var/lib/registry \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  registry:2

安装完后在 push 镜象时还是遇到了一点小问题:

x509: cannot validate certificate for 192.168.1.211 because it doesn't contain any IP SANs

解决办法:

修改 /etc/pki/tls/openssl.cnf 配置,在该文件中找到 [ v3_ca ],在它下面添加如下内容:

[ v3_ca ]
# Extensions for a typical CA
subjectAltName = IP:192.168.1.211

再次重启 docker,问题解决。

至此,docker registry 私有仓库安装成功。接下来可以随时登录公司的 VPN 去 pull 镜象了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK