Docker私仓搭建
如果公司使用了docker
, 而docker里面存放着私密的配置文件 , 像MySQL, 微信密钥等配置, 我们不希望别人能够看到, 这个时候, 私有仓库就显得很重要了, 下面简单的介绍下
一. 下载安装docker
yum install docker -y
# 加入开机启动
systemctl enable docker
# 启动docker
systemctl start docker
二. 拉取registry
镜像
docker pull registry:2
这里要指定版本
2
以上,registry
以前是python
写的, 后来由go
重写, 提升了拉去镜像的性能, 所以如果用的是的docker 1.5+
, 那么这个镜像就一定要使用2
版本, 否则会不兼容
三. 启动仓库容器
docker run -d -p 5000:5000 --restart=always -v /opt/docker/registry/data:/var/lib/registry --name docker-registry registry:2
这条命令有指定端口映射, 即容器的
5000
端口, 对应主机的5000
端口, 另外也指定目录挂载, 容器的/var/lib/registry
对应主机的/opt/docker/registry/data
目录
四. 配置容器支持http
默认情况下, registry:2
只支持https
, 如果需要支持http
, 需要配置docker
vi /etc/sysconfig/docker
# 找到 INSECURE_REGISTRY='--insecure-registry', 修改成如下
INSECURE_REGISTRY='--insecure-registry yinnote.com:5000'
# 保存配置, 重启服务
systemctl daemon-reload
systemctl restart docker
修改
docker
启动参数的方式很多, 这里只介绍我比较喜欢的一种, 记住, 修改了参数后, 一定要保存配置文件再重启, 否则不生效
五. 测试
# 将registry镜像打标签
docker tag docker.io/registry:2 yinnote.com:5000/test:1.0
# 上传镜像
docker push yinnote.com:5000/test:1.0
六. 授权认证
如果我们不希望镜像被外人随意拉取, 那么就需要通过Nginx
反向代理, 并配置登录认证. 当然也可以通过nginx
代理镜像:containersol/docker-registry-proxy
, 这里不做这种介绍, 毕竟最新版本的registry
已经不支持这个镜像了
注意, 官网有一段话说明
http
协议没法做登录认证, 所以只能配置https
Warning: it’s not possible to use an insecure registry with basic authentication.
https://docs.docker.com/registry/insecure/
1. nginx配置反向代理
server {
listen 443 ssl;
server_name registry-docker.yinnote.com;
ssl on;
ssl_certificate cert/www.yinnote.com.pem;
ssl_certificate_key cert/www.yinnote.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:5000;
}
}
证书, 大家可以自己生成, 也可以去阿里云购买, 首年免费, 至于证书生成办法, 这里不做介绍
2. 生成加密文件
yum install httpd-tools -y
htpasswd -c -d /usr/local/openresty/nginx/conf/pass_file magina
magina
是指定登录的用户名, 生成的文件路径一定要指定存在的目录下
3. 添加认证配置
location / {
client_max_body_size 500m;
auth_basic "yinnote docker仓库";
auth_basic_user_file /usr/local/openresty/nginx/conf/pass_file;
proxy_pass http://127.0.0.1:5000;
}
其中
client_max_body_size
, 是允许上传文件的大小, 这里最好设置大一点, 一般镜像会在200m
左右, 记得修改了重启nginx
nginx -s reload
4. 登录
docker login -u magina -p 123456 registry-docker.yinnote.com
此时即可自由的拉取镜像