Docker私仓搭建

2017-04-18  本文已影响324人  殷临风

如果公司使用了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

此时即可自由的拉取镜像

上一篇下一篇

猜你喜欢

热点阅读