我们在本地开发时,如果内网能部署一台Docker服务器,无疑会极大的方便镜像的分享发布,有些私有镜像就是可以直接放到内网服务器上,省去了不必要的网络下载。
本课程需要配两个虚拟机,一台作为私有仓库部署,一台作为工作机。
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;
执行
docker-compose up
Setup3 设置HTTP验证
cd ~/docker-registry/nginx
htpasswd -c registry.password USERNAME
mate ~/docker-registry/nginx/registry.conf
执行
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证书
Setup5申请免费证书
沃通CA(WoSign CA)
https://buy.wosign.com/free/
用申请好的证书更新nginx配置文件
Setup6配置域名
mate /etc/hosts
//宿主机添加
192.168.99.100 registry.51yixiao.com
Setup7测试
docker-machine start default
Setup8从工作机推送镜像至服务器
eval $(docker-machine env default)
docker images
Setup9从镜像服务器下载镜像至工作机
docker-machine start default
docker-machine regenerate-certs default
docker-machine ssh default
sudo -i
vi /etc/hosts
制作自己的证书
由于Dokcer目前不允许使用自签名的SSL证书,这一步比平时更加复杂,我们必须建立自己的系统,对我们自己的证书签名授权。
1.生成根密钥
cd ~/docker-registry/nginx
2.生成根证书-Common Name填写证书签发者的域名 比如:www.trjcn.com
openssl req -x509 -new -nodes -key devdockerCA.key -days 10000 -out devdockerCA.crt
3.为nginx生成ssl密钥
我们的CA中心与要申请证书的服务器是同一个,否则应该是在另一台需要用到证书的服务器上生成
4.为nginx生成证书签署请求
需要注意的是Common Name必须输入我们要授予证书的服务器IP或域名
5.私有CA根据请求来签发证书
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