基于IP的docker private registry 私有仓库的搭建
鉴于国内的网络环境,如果公司内部大量使用docker,镜像上传下载将是个非常耗时的工作,搭建一个私有仓库可以很好的解决自有镜像的存储,如果你在私有网络,不能使用域名的话,那么本文可以作为一个很好的例子。
本文参考了大量文档,整理而成,由于时间已久,出处也忘记了,如果有读者知道可以留言,我备注出处。
本教程操作系统:Ubuntu 16.04
1, 安装配置 Docker Registry
$ mkdir ~/docker-registry && cd $_
$ makir data
编写 docker-compose 文件
$ cd ~/docker-registry
$ vi docker-compose.ym
添加以下内容
registry:
image: registry:2
restart: always
ports:
- 127.0.0.1:5000:5000
environment:
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
volumes:
- ./data:/data
2, 安装配置 nginx
$ mkdir ~/docker-registry/nginx
$ cd ~/docker-registry
修改 docker-compose.ym
nginx:
image: "nginx:1.9"
restart: always
ports:
- 443:443
links:
- registry:registry
volumes:
- ./nginx/:/etc/nginx/conf.d
registry:
image: registry:2
ports:
- 127.0.0.1:5000:5000
environment:
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
volumes:
- ./data:/data
创建 registry.conf
$ vi ~/docker-registry/nginx/registry.conf
添加一下内容
upstream docker-registry {
server registry:5000;
}
server {
listen 443;
server_name 192.168.200.150;
# SSL
# ssl on;
# ssl_certificate /etc/nginx/conf.d/domain.crt;
# ssl_certificate_key /etc/nginx/conf.d/domain.key;
# disable any limits to avoid HTTP 413 for large image uploads
client_max_body_size 0;
# required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
chunked_transfer_encoding on;
location /v2/ {
# Do not allow connections from docker 1.5 and earlier
# docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents
if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
return 404;
}
# To add basic authentication to v2 use auth_basic setting plus add_header
# auth_basic "registry.localhost";
# auth_basic_user_file /etc/nginx/conf.d/registry.password;
# add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;
proxy_pass http://docker-registry;
proxy_set_header Host $http_host; # required for docker client's sake
proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
}
}
修改 server_name 未内网ip,本例中是 192.168.200.150
3, 配置 nginx SSL
修改 registry.conf, 去掉 SSL注释
# SSL
ssl on;
ssl_certificate /etc/nginx/conf.d/domain.crt;
ssl_certificate_key /etc/nginx/conf.d/domain.key;
创建CA
$ cd ~/docker-registry/nginx
生成CA私钥
$ openssl genrsa -out devdockerCA.key 2048
生成CA公钥
$ openssl req -x509 -new -nodes -key devdockerCA.key -days 10000 -out devdockerCA.crt
创建服务器密钥
创建服务器私钥,在nginx配置ssl_certificate_key时使用
$ openssl genrsa -out domain.key 2048
拷贝 /etc/ssl/openssl.cnf
到 ~/docker-registry/nginx
目录,修改
openssl
以下部分,
去掉下面这行注释:
req_extensions = v3_req
找到以下部分:
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
# 添加下面这行, IP修改为你服务器的ip
subjectAltName = IP: 192.168.200.150
创建服务器公钥,在nginx配置ssl_certificate时使用
$ openssl req -new -key domain.key -out dev-docker-registry.com.csr -config openssl.cnf
创建过程中,Common Name
输入服务器地址,本例为 192.168.200.150
生成签名证书
$ openssl x509 -req -in dev-docker-registry.com.csr -CA devdockerCA.crt -CAkey devdockerCA.key -CAcreateserial -out domain.crt -days 10000 -extensions v3_req -extfile openssl.cnf
重启 docker 服务
$ sudo systemctl restart docker
4, 测试 SSL
$ cd ~/docker-registry
$ docker-compose up
命令行测试 curl https://192.168.200.150/v2/
, 输出为{}
5, 客户端访问 registry
客户端添加CA, 拷贝 ~/docker-registry/nginx/devdockerCA.crt
内容,
在客户机新建
$ sudo vi /usr/local/share/ca-certificates/docker-dev-cert/devdockerCA.crt
添加拷贝内容。
更新证书
$ sudo update-ca-certificates
mac用户
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain devdockerCA.crt
重启 docker 服务
$ sudo systemctl restart docker
测试
$ docker pull hello-world
$ docker tag hello-world 192.168.200.150/test/hello-world
$ docker push 192.168.200.150/test/hello-world
基于IP的docker private registry 私有仓库的搭建的更多相关文章
- Docker 之registry私有仓库搭建
Docker 之registry私有仓库搭建 官方提供的私有仓库docker registry用法 https://yeasy.gitbooks.io/docker_practice/reposito ...
- 快速搭建Docker Registry私有仓库
前提条件: 服务器已经安装Docker(我的服务器是CentOS 7) 服务器已经安装Docker Compose 满足以上条件时就可以开始搭建了: 1. 生成用户密码文件:(运行下面命令后会在当前目 ...
- Docker registry 私有仓库镜像查询、删除、上传、下载 shell
#Docker官方私有仓库registry #官方只提供了API接口,不方便使用,就写了个shell #docker-registry安装配置http://www.cnblogs.com/elvi/p ...
- Docker Private Registry 常用组件
Docker Private Registry 常用组件 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Docker Registry概述 1>.什么是registry ...
- Docker Private Registry
Docker Private Registry 目录 Docker Private Registry Docker Registry Docker Private Registry 使用docker- ...
- Docker部署Registry私有镜像库
拉取镜像 docker pull registry:2.6.2 生成账号密码文件,这里采用htpasswd方式认证 docker run --rm --entrypoint htpasswd re ...
- docker 私有仓库简易搭建
概要 本地私有仓库 局域网私有仓库 总结 概要 docker hub 使用非常方便,而且上面有大量的镜像可以使用. 但是,每次都远程下载镜像速度非常慢,如果能在本地做一个 docker 的仓库,多人协 ...
- docker私有仓库操作(搭建、运行、添加、删除)
目录 运行私有仓库 TIPS: 上传 把镜像放入私有仓库 验证 查看 TIPS: 垃圾回收 问题排查 参考:https://yeasy.gitbooks.io/docker_practice/cont ...
- Docker私有仓库的搭建与使用
目录 Docker搭建私有仓库 一.搭建registry私有仓库 1.拉取私有仓库registry镜像 2.启动私有仓库容器 3.修改deamon.json 4.重启docker 5.启动regist ...
随机推荐
- Mysql 常用操作记录
1.查看数据库: mysql> show databases; +--------------------+ | Database | +--------------------+ | info ...
- 多功能网页刷新工具,刷pv工具
多功能网页刷新工具,刷pv工具,在线刷流量,刷PV,刷UV小牛刷新助手功能介绍:1.设置多个刷新网页地址.2.设置刷新时间3.开始工作4.其他操作:老板键:打开时自动刷新:置系统托盘5.可手动输入地址 ...
- Go 指针
变量是存储值得地方. 借助声明变量时使用的名字来区分. 指针的值是一个变量的地址.一个指针指示值所保存的位置.不是所有的值都有地址,但是所有的变量都有.使用指针,可以在无需知道变量名字的情况下,间接读 ...
- base64位代码转图片文件并保存到文件夹的解决方案
#region Base64 转图片方法 protected string Base64StringToImage(string strbase64) { try { string imgurl = ...
- git命令行获取某分支代码
参考https://www.cnblogs.com/nylcy/p/6569284.html git clone -b branch1 http://xxx.xx.xxx... git clone - ...
- Exp2 后门原理与实践 20165110
Exp2 后门原理与实践 一.实验要求 1.使用netcat获取主机操作Shell,cron启动 2.使用socat获取主机操作Shell, 任务计划启动 3.使用MSF meterpreter(或其 ...
- delete 和 delete [] 的真正区别
c++中对new申请的内存的释放方式有delete和delete[两种方式,到底这两者有什么区别呢? 1.我们通常从教科书上看到这样的说明: delete 释放new分配的单个对象指针指向的内存 de ...
- LAB6 SOAP
有web服务的,需要Deploy一下才能跑 通过ls看所有文件的所在地,cd进入对应文件夹,才可以编译 javac 编译,Java是执行 URL必须是WSDL文件点进去里面的:http://local ...
- MySQL主主
MySQL双主(主主)架构方案 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果 ...
- JavaScript 引用错误
在学习vue时 出现无法实现效果原始设置 <script src="js/lib/vue2.min.js"/><script src="js/lib/v ...