Docker 私有镜像仓库 registry 搭建

Docker 私有镜像仓库 registry 搭建

    • 0.简述
      • 0.1 ip:port 方式
      • 0.2 第三方证书
      • 0.3 自签名证书
    • 1.拉取镜像
    • 2.创建挂载目录
    • 3.启动容器
    • 4.配置 TLS 证书
      • 4.1 自动生成证书
      • 4.2 配置 host
      • 4.3 把证书拷贝到服务端和需要连接的客户端
      • 4.4 测试证书是否有效

0.简述

有三种方法可以实现跨主机访问

0.1 ip:port 方式

这种方式不安全,这里也提供方法:

vim /etc/docker/daemon.json
{
“insecure-registry":["192.168.1.xxx:5000"]
}

重启 docker 守护进程

$ systemctl daemon-reload

0.2 第三方证书

和 https 证书类似,需要花钱,这里不做介绍

0.3 自签名证书

自己做签名证书,发给每个需要的客户端,下面介绍的就是这种方式

1.拉取镜像

$ docker pull registry

2.创建挂载目录

$ docker volume create registry-conf
$ docker volume create registry-data

3.启动容器

$ docker run -d \
-p 5000:5000 \
--restart=always \
--name=registry \
-v registry-conf:/etc/docker/registry \
-v registry-data:/var/lib/registry \
-v /root/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/myrepo.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/myrepo.key \
registry

4.配置 TLS 证书

4.1 自动生成证书

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

生成过程中会提示输入各种信息,注意 Common Name要输入需要访问的域名,这里是 myrepo.com

For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:gd
Locality Name (eg, city) [Default City]:gz
Organization Name (eg, company) [Default Company Ltd]:wh
Organizational Unit Name (eg, section) []:whky
Common Name (eg, your name or your server's hostname) []:myrepo.com
Email Address []:[email protected]

4.2 配置 host

$ vim /etc/hosts

# registry 主机
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 myrepo.com
# 客户端,新增如下内容,192.168.1.157 为 registry 主机ip
192.168.1.157 myrepo.com

4.3 把证书拷贝到服务端和需要连接的客户端

$ mkdir -p /etc/docker/certs.d/myrepo.com:5000
$ cp certs/myrepo.crt /etc/docker/certs.d/myrepo.com:5000/ca.crt
$ systemctl restart docker

4.4 测试证书是否有效

$ docker tag registry:latest myrepo.com:5000/registry:local
$ docker push myrepo.com:5000/registry:local
# 客户端拉取镜像
$ docker pull myrepo.com:5000/registry:local

你可能感兴趣的:(docker)