搭建docker私服仓库(缓存代理仓库)
一、生成https通信需要的证书文件
这一步生成与仓库进行https通信时需要的证书文件,使用的工具是openssl
,生成的过程如下:
文章图片
文件 | 用途 |
---|---|
ca.key | ca私钥文件 |
ca.csr | 根证书的签发申请文件 |
ca.crt/ca.cer | 证书文件 |
ca.cnf | 约束根证书只用于签发其他证书 |
site.key | 仓库私钥 |
site.csr | 仓库证书签发申请文件 |
site.crt/site.cer | 仓库证书文件 |
site.cnf | 约束仓库只用于服务器认证的配置文件 |
箭头上的文字代表所使用的openssl子命令,数字+“#”号表示步骤顺序。具体每一步使用的命令在下面有说明。1、生成CA根证书
这个过程docker文档中也有一个例子。不过它使用的Common Name是localhost,而我们的仓库需要给其他机器访问,需要修改为对应的ip地址或者域名。
- 生成ca根证书秘钥文件
ca.key
openssl genrsa -out "ca.key" 4096
- 生成根证书签发申请文件
ca.csr
openssl req \ -new -key "ca.key" \ -out "ca.csr" -sha256 \ -subj '/C=US/ST=CA/L=San Francisco/O=Docker/CN=Swarm Secret Example CA'
- 创建根证书配置文件,命名为
ca.cnf
[root_ca] basicConstraints = critical,CA:TRUE,pathlen:1 keyUsage = critical, nonRepudiation, cRLSign, keyCertSign subjectKeyIdentifier=hash
- 签发根证书文件,生成
ca.crt
openssl x509 -req-days 3650-in "ca.csr" \ -signkey "ca.key" -sha256 -out "ca.crt" \ -extfile "ca.cnf" -extensions \ root_ca
- 生成一个私钥
site.key
openssl genrsa -out "site.key" 4096
- 生成服务器证书签证申请文件
site.csr
openssl req -new -key "site.key" -out "site.csr" -sha256 \ -subj '/C=US/ST=CA/L=San Francisco/O=Docker/CN=localhost'
划重点: 命令中的
localhost
需要替换为将来用于访问仓库的域名,例如:registry.local.com
。
- 创建配置文件
site.cnf
[server] authorityKeyIdentifier=keyid,issuer basicConstraints = critical,CA:FALSE extendedKeyUsage=serverAuth keyUsage = critical, digitalSignature, keyEncipherment subjectAltName = DNS:localhost, IP:127.0.0.1 subjectKeyIdentifier=hash
划重点:
localhost
和127.0.0.1
要换为仓库的访问域名和ip地址,例如:registry.local.com
和
192.168.10.100
。
- 用根证书签证服务器证书,生成
site.crt
证书文件openssl x509 -req -days 750 -in "site.csr" -sha256 \ -CA "ca.crt" -CAkey "ca.key"-CAcreateserial \ -out "site.crt" -extfile "site.cnf" -extensions server
- 【搭建docker私服仓库(缓存代理仓库)】首先下载该镜像
docker pull registry:2.6.2
- 运行
这里有三种方式:
- container(
docker run
) - service(
docker service create
) - stack(
docker stack deploy
)
但是运行之前,要先知道一个重要的文件,
-
/etc/docker/registry/config.yml
这是仓库程序的总配置文件,是一个yml
格式的文本文件,可以配置的项很多。具体可以配置的项以及每一项的说明可以在官方文档找到。
而这里我们需要配置的项有:
# config.yml version: 0.1 storage: filesystem: rootdirectory: /var/lib/registry #镜像文件存放目录,这是默认值,不配置也可以,需要的可以自己修改 proxy: remoteurl: 上游仓库访问地址# 所代理的仓库,也就是本地仓库的上游仓库 http: addr: 0.0.0.0:443# 仓库绑定的ip地址与端口号 tls: certificate: /certs/site.crt# 仓库证书,就是上面我们用根证书签证过的服务器证书 key: /certs/site.key# 仓库私钥,就是用于生成证书的私钥(注意不是ca的私钥)
划重点: 注意这个配置文件中所有用到的文件和目录都是从容器内部访问的,所以连同这个配置文件本身都需要挂载进容器。
- 不过这个文件并不是必须的,在配置文件中的每一项,都可以通过以一定规则命名的环境变量传递给容器来配置,这个规则是,以
REGISTRY
开头,之后按照配置文件的树形结构,每一级通过下划线_
连接,例如仓库目录的环境变量是:
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/somewhere
如果有数组值,则后跟下划线和索引如_0
,_1
……
- 现在以
stack
为例,写一个compose
文件来启动仓库。
# registry-compose.yml version: '3.3' services: registry: image: registry:2.6.2 deploy: replicas: 1 ports: - 443:443 volumes: - /your/path/to/config.yml:/etc/docker/registry/config.yml - /your/path/to/repository:/var/lib/registry - /your/path/to/certs:/certs
- container(
1、配置使用你的私有仓库为镜像,假设ip地址是
192.168.10.100
,则访问地址为https://192.168.10.100
或者域名
registry.local.com
https://registry.local.com
2、配置ca根证书
要把最开始用于签证服务器ca根证书放置到
/etc/docker/certs.d/ip地址或domain/
下,例如:/etc/docker/certs.d/192.168.10.100/
划重点: 由于我们使用https的默认端口号443去访问,这里不需要添加端口号如果配置仓库镜像地址时,使用了域名,这里也要对应地用域名,总而言之,你用什么访问就配置成什么,目录没有的话自己创建
192.168.10.100是一个文件夹,下同。
/etc/docker/certs.d/registry.local.com/
当然,如果你把443映射为其他端口,也需要在文件夹名称添加端口号
/etc/docker/certs.d/registry.local.com:5000/
如果你配错了,会报这个错误
Error response from daemon: Get https://192.168.10.100/v2/: x509: certificate signed by unknown authority
四、错误
- 生成证书时
site.cnf
文件写错,要指定为你用于访问的域名和ip地址
Error response from daemon: Get https://192.168.10.100/v2/: x509: certificate is valid for 127.0.0.1, not 192.168.10.100
- 生成证书时没有传cnf文件
Error response from daemon: Get https://192.168.10.100/v2/: x509: cannot validate certificate for 192.168.10.100 because it doesn't contain any IP SANs
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 六步搭建ES6语法环境
- docker镜像探索----dive工具
- (1)redis集群原理及搭建与使用(1)
- 多糖少女唐艺昕嫁为人妇,不光笑容甜美,私服也是一道风景线!
- 桁架搭建有什么价值()
- VM|VM ware 的 harbor 私有仓库搭建 (Ubuntu16.04)
- PHP开发-Mac搭建ThinkPHP5.0
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- sentry搭建错误监控系统(二)