FW 配置一个私有的Docker仓库
思维 66 3月1日 发布
- 建分支 0 分支
- 收藏 0 收藏
我们在本地开发时,如果内网能部署一台Docker服务器,无疑会极大的方便镜像的分享发布,有些私有镜像就是可以直接放到内网服务器上,省去了不必要的网络下载。
本课程需要配两个虚拟机,一台作为私有仓库部署,一台作为工作机。
//Docker仓库部署-虚拟机
docker-machine create -d virtualbox registry
//Docker工作机
docker-machine create -d virtualbox default
Setup1 安装并配置Registry
mkdir ~/docker-registry && cd $_
mkdir data
mate docker-compose.yml
registry:
image: registry
ports:
- 127.0.0.1:5000:5000
environment:
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
volumes:
- ./data:/data
执行
docker-compose up
Setp2配置Nginx容器
mkdir ~/docker-registry/nginx
mate docker-compose.yml
nginx:
image: "nginx"
ports:
- 443:443
links:
- registry:registry
volumes:
- ./nginx/:/etc/nginx/conf.d:ro
registry:
image: registry
ports:
- 5000:5000
environment:
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
volumes:
- ./data:/data
mate ~/docker-registry/nginx/registry.conf
upstream docker-registry {
server registry:5000;
}
server {
listen 443;
server_name registry.51yixiao.com;
# 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
# 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;
}
}
执行
docker-compose up
//测试
curl http://www.registry.com:443
curl http://www.registry.com:5000
Setup3 设置HTTP验证
cd ~/docker-registry/nginx
htpasswd -c registry.password USERNAME
//USERNAME替换自己想添加的用户名,比如:markthink,如果要继续添加其他用户
//htpasswd registry.password USERNAME
mate ~/docker-registry/nginx/registry.conf
#To add basic authentication
auth_basic "registry.localhost";
auth_basic_user_file /etc/nginx/conf.d/registry.password;
add_header 'Docker-Distribution-Api-Version' 'registry' always;
执行
cd ~/docker-registry
docker-compose up
curl http://www.registry.com:443/
<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.9.11</center>
</body>
</html>
//使用HTTP验证访问-用上面配置的用户名和密码
curl http://markthink:123456a@www.registry.com:443/
Setup4设置SSL验证
使用HTTP验证并不安全,因为连接没有加密传输,下面启用SSL配置
mate ~/docker-registry/nginx/registry.conf
# SSL
ssl on;
ssl_certificate /etc/nginx/conf.d/domain.crt;
ssl_certificate_key /etc/nginx/conf.d/domain.key;
为我们的域名购买一个证书或申请一个免费SSL证书
Setup5申请免费证书
沃通CA(WoSign CA)
https://buy.wosign.com/free/#myorder
https://buy.wosign.com/FreeSSL.html
用申请好的证书更新nginx配置文件
Setup6配置域名
mate /etc/hosts
//宿主机添加
192.168.99.100 registry.51yixiao.com
Setup7测试
docker-machine start default
//重新分配IP
docker-machine regenerate-certs default
docker-machine ssh default
sudo -i
vi /etc/hosts
192.168.99.100 registry.51yixiao.com
docker login https://registry.51yixiao.com
//输入前面配置的用户和密码 登陆成功
Setup8从工作机推送镜像至服务器
eval $(docker-machine env default)
docker images
//为本地镜像打标签
docker pull busybox
docker tag busybox registry.51yixiao.com/busybox
//登陆服务器
docker login https://registry.51yixiao.com
//向服务器推送镜像
docker push registry.51yixiao.com/busybox
curl https://markthink:123456a@registry.51yixiao.com/v2/
//网页直接访问
https://markthink:123456a@registry.51yixiao.com/v2/
//退出服务器
docker logout https://registry.51yixiao.com
//查看镜像仓库已有的镜像
https://markthink:123456a@registry.51yixiao.com/v2/_catalog
Setup9从镜像服务器下载镜像至工作机
docker-machine start default
docker-machine regenerate-certs default
docker-machine ssh default
sudo -i
vi /etc/hosts
//添加IP地址
192.168.99.100 registry.51yixiao.com
//登陆服务器
docker login https://registry.51yixiao.com
//下载镜像
docker pull registry.51yixiao.com/busybox
//镜像改名
docker tag registry.51yixiao.com/busybox busybox
制作自己的证书
由于Dokcer目前不允许使用自签名的SSL证书,这一步比平时更加复杂,我们必须建立自己的系统,对我们自己的证书签名授权。
1.生成根密钥
cd ~/docker-registry/nginx
//生成新的根密钥
openssl genrsa -out devdockerCA.key 2048
2.生成根证书-Common Name填写证书签发者的域名 比如:www.trjcn.com
openssl req -x509 -new -nodes -key devdockerCA.key -days 10000 -out devdockerCA.crt
3.为nginx生成ssl密钥
//生成nginx域名的SSL证书
openssl genrsa -out domain.key 2048
我们的CA中心与要申请证书的服务器是同一个,否则应该是在另一台需要用到证书的服务器上生成
4.为nginx生成证书签署请求
//生成ssl_certificate_key证书
openssl req -new -key domain.key -out dev-docker-registry.com.csr
需要注意的是Common Name必须输入我们要授予证书的服务器IP或域名
5.私有CA根据请求来签发证书
//签署证书申请
openssl x509 -req -in dev-docker-registry.com.csr -CA devdockerCA.crt -CAkey devdockerCA.key -CAcreateserial -out domain.crt -days 10000
``
此过程用到了前两步生成的根密钥和根证书
至此SSL证书制作完成,但是我们生成的证书没有已经的证书颁发机构验证,因此需要在Docker Registry中注册。
下面是基于centsos的部署过程
scp ./devdockerCA.crt registry:/home/docker/
docker-machine ssh registry
sudo -i
mkdir /usr/local/share/ca-certificates/docker-dev-cert
mv /home/docker/devdockerCA.crt /usr/local/share/ca-certificates/docker-dev-cert/
//update-ca-certificates
重启Docker daemon守护进程
docker-machine restart registry
//service docker restart
FW 配置一个私有的Docker仓库的更多相关文章
- 试用 Nexus OSS 3.0 的docker仓库 (一)
Nexus 3.0 可以创建三种docker仓库: 1. docker (proxy) 代理和缓存远程仓库 ,只能pull 2. docker (hosted) 托管仓库 ,私有仓库, ...
- docker简单介绍---部署私有docker仓库Registry
1. 关于Registry 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候,我们的使用场景需要我们拥有一个私有 ...
- window10 Docker仓库访问
window10 Docker仓库访问 docer官网 docker仓库 windown10 安装docker可以参考 window10安装docker 配置了加速器以后还访问不了,点击托盘处dock ...
- 搭建Harbor企业级docker仓库
搭建Harbor企业级docker仓库 一.Harbor简介 1.Harbor介绍 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如 ...
- 编译安装常用包+阿里镜像源-常用资源-系统-下载-科莱软件下载-docker仓库包-安全圈-杏雨梨云-图形界面安装-docker私有双仓库-阿里源报错处理-centos7目录大小
yum install apr-util apr-util-devel apr apr-devel pcre pcre-devel zlib zlib-devel openssl openssl-de ...
- DockerFile构建镜像和Docker仓库
利用commit理解镜像构成 注意: docker commit 命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现 场等.但是,不要使用 docker commit 定制镜像,定制镜像应该 ...
- 自建docker仓库
一.仓库安装 1.系统:CentOS7.9,采用yum安装方式 [root@master ~]# yum install docker-distribution -y ... ... [root@ma ...
- 配置 Containerd 在 harbor 私有仓库拉取镜像
官方文档地址:https://github.com/containerd/cri/blob/master/docs/registry.md 严格来说,这个具体可分为两部分 1.在k8s中使用Conta ...
- 试用 Nexus OSS 3.0 的docker仓库 (二)
试用 Nexus OSS 3.0 的docker仓库 (一) : http://www.cnblogs.com/wzy5223/p/5410990.html 三. 创建docker私有仓库,docke ...
随机推荐
- 【c语言】不用大与小与号,求两数最大值
// 不用大与小与号,求两数最大值 #include <stdio.h> int max(int a, int b) { int c = a - b; int d = 1 << ...
- mac系统中搭建apache+mysql+php的开发环境,安装mysql后,登录报错:mac ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
php新手在mac系统中搭建apache+mysql+php的开发环境(按照这篇博客来操作的:http://my.oschina.net/joanfen/blog/171109?fromerr=xvC ...
- sshd服务安装和配置管理
1.SSHD简介(介绍) SSH协议:安全外壳协议,为Secure Shell的缩写,SSH为建立在应用层和传输层基础上的安全协议. sshd服务使用SSH协议可以用来进行远程控制,或在计算机之间传送 ...
- Atitit.编程语言的基础句型and汉语英文比较
Atitit.编程语言的基础句型and汉语英文比较 1. 编程语言常见的句型1 1.1. Verb(obj)1 1.2. If then else1 1.3. For1 2. 英语中的五种基本句型结 ...
- Log4j学习(使用流程,Log4j.properties配置文件,配置到多个不同目标)
参考网址: [http://blog.csdn.net/drift_away/article/details/7403658] [http://blog.csdn.net/lxzo123/articl ...
- socket编程之多次收发数据
客户端: #-*- coding:utf-8 -*- #客户端程序 import socket client = socket.socket() #1.创建一个客户端对象 client.connect ...
- 李洪强经典面试题41-iOS选择题
1.及时聊天app不会采用的网络传输方式是 DA UDP B TCP C Http D FTP 2.下列技术不属于多线程的是 AA Block B NSThread C NSOperation D G ...
- SpringBoot整合Quartz
1.引入quzrtz <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId> ...
- 【问题记录】MySQL中时间戳转日期格式和Java中时间戳转日期格式偶尔不一致
背景: MySQL的某个字段存放着一些时间戳格式的时间. 问题描述: Java程序将MySQL中的时间戳字段取出来,在Java程序中转成yyyy-MM-dd HH:mm:ss格式的时候,偶尔会出现转化 ...
- iOS视频压缩存储至本地并上传至服务器
最近做了一个项目,我把其中的核心功能拿出来和大家分享一下,重点还是自己梳理一下. 这里关于视频转码存储我整理了两个方法,这两个方法都是针对相册内视频进行处理的. 1.该方法没有对视频进行压缩,只是将视 ...