怎么让docker 私有仓库v1仓库当作服务来启动

如何使用Docker开源仓库建立代理缓存仓库 - 推酷
如何使用Docker开源仓库建立代理缓存仓库
的其中一个最新特性:能够被用作代理缓存仓库,以缓存Docker Hub上的镜像。运行一个缓存仓库允许你在本地储存镜像,减少过多的通过互联网从Docker Hub拉取镜像,这个特性对于一些在他们环境中拥有数量庞大的Docker引擎的用户来说很有用。跟着本篇教程,你可以让Docker引擎从本地代理缓存仓库拉取镜像,而不是让每个引擎总是从Docker Hub拉取,从而节省时间和带宽。
你可以这样开始:
####要求:
- Docker引擎1.8.3
- Docker仓库v2
- 足够储存Docker镜像的磁盘空间
- TLS证书和密钥
持久化数据
在这个例子中,我们会假设你会储存所有持久化数据在本地文件系统的&code&/data&/code&路径下,这个路径下包含TLS证书和密钥文件,配置文件和镜像缓存文件。我们之后会用卷挂载这个目录进运行仓库的容器。
保护你的代理缓存仓库安全
代理缓存仓库需要一个TLS证书来保证Docker引擎和缓存仓库之间的连接安全,在这个例子中,我们会放置我们证书文件(&code&domain.crt&/code&)和密钥文件(&code&domain.key&/code&)在主机的&code&/data&/code&目录。
更多关于使用TLS加强仓库安全的信息,请参照
创建代理缓存仓库配置文件
下一步你需要创建一个配置文件,来把这个仓库用作代理缓存。你可以用cat命令把&code&registry:2&/code&镜像中的缺省配置文件重定向输出到一个文件中:
sh $ docker run -it --rm --entrypoint cat registry:2 \ /etc/docker/registry/config.yml & /data/config.yml
&code&我强烈建议从Docker镜像中获得这个默认配置,而不是使用例子中的配置,因为将来这个默认配置可能会有更新。&/code&
默认的config.yml例子:
yaml version: 0.1 log: fields service: registry storage: cache: layerinfo: inmemory filesystem: rootdirectory: /var/lib/registry http: addr: :5000
修改'http'这节配置上TLS:
yaml http: addr: :5000 tls: certificate: /var/lib/registry/domain.crt key: /var/lib/registry/domain.key
在配置文件中新加一节'proxy'来开启缓存:
点击打开文档(
yaml proxy: remoteurl: https://registry-1.docker.io username: [username] password: [password]
'username'和'password'这两个选项是可选的,这是Docker Hub账号的用户名和密码,设置上这两个选项,会使代理缓存仓库获取到这个账号的同等权限,也就是说,这个用户有权限获取的镜像,这个缓存仓库同样有权限获取。
&code&请确保完全理解设置这个Docker Hub账号背后意味着什么,并且确保你镜像的安全还有严格的访问权限!如果你不确定,请不要再配置包含用户名和密码,那么你的代理缓存仓库就只会缓存公共镜像。&/code&
启动代理缓存仓库的容器:
sh $ docker run -d --restart=always -p
--name v2-mirror \ -v /data:/var/lib/registry registry:2 /var/lib/registry/config.yml
以上命令使用一个卷把宿主机上的/data挂载进了容器中,使容器能使用持久储存镜像缓存,TLS证书和密钥,还有自定义的仓库配置文件。
验证你的代理缓存仓库已经启动并正常运行:
sh $ curl -I :5000/v2/ HTTP/1.1 200 OK Content-Length: 2 Content-Type: application/ charset=utf-8 Docker-Distribution-Api-Version: registry/2.0 Date: Thu, 17 Sep :02 GMT
配置你的Docker引擎使用代理缓存仓库
修改Docker守护进程的启动参数,加上&code&--registry-mirror&/code&选项:
sh --registry-mirror=https://&my-docker-mirror-host&:&port-number&
例如,如果你的缓存仓库的主机名为并且仓库服务端口为5000,你需要加上以下选项到守护进程的参数:
sh --registry-mirror=:5000
了解更多信息关于如何添加Docker守护进程参数。
测试你的代理缓存仓库
从Docker Hub上拉取一个你本地没有的镜像。例如,busybox:latest镜像:
sh $ docker pull busybox:latest
检查缓存仓库中的目录,验证busybox镜像是否被缓存:
sh $ curl :5000/v2/_catalog {&repositories&:[&library/busybox&]}
你也可以验证latest标签是否被缓存:
sh $ curl :5000/v2/library/busybox/tags/list {&name&:&library/busybox&,&tags&:[&latest&]}
现在开始当你拉取镜像时,镜像将被缓存到你的代理缓存仓库,之后拉取相同的镜像时会更快,并且这些镜像缓存会维护自身,当他们不再被使用时将会自动清除。
,并尝试创建用开源的Docker仓库创建代理缓存仓库吧!
Docker技术越来越渗透到生活的各个角落,它让我们的生活更加方便快捷。在科研的大道上,希云(
)希望能够和大家一起共同探索和进步!
Docker技术如何落地企业带来价值
希云是Docker领域的专家,致力于通过Docker技术提供更好的云计算产品和服务。希云品牌下的产品包括了
COS容器操作系统
cSphere容器管理平台
CDT基于容器的开发测试平台
CShow基于容器的项目演示平台
CHub企业版Registry
并提供相关的培训和咨询服务
微镜像服务
Docker企业培训
应用Docker化咨询
软件SaaS化咨询
PaaS化咨询
欢迎企业垂询:
电话:400-686-1560
微信关注cSphere-CN
回复数字“1”即可查看【Docker持续部署图文详解】
回复数字“2”即可查看【初识Docker和Windows Server容器】
回复数字“3”即可查看【为Windows创建Node.js容器镜像】
回复数字“4”即可查看【使用Docker-in-Docker来运行CI或集成测试环境?三思】
尊重知识,请必须全文转载,不得删改,包括本行。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致Linux--不是那么难,学习Linux--那么难是不?Legion是一个个人的linux学习记录型博客,本人不望博客多出名,只期待自己能把自己在linux路上的点点滴滴都做个记录。只期望自己能很好的坚持写下去。您当前所在位置: >
> Web后端开发
搭建Docker私有仓库的方法
欢迎大家在这里学习搭建Docker私有仓库!这里是我们给大家整理出来的精彩内容。我相信,这些问题也肯定是很多朋友在关心的,所以我就给大家谈谈这个!
1.Docker registry 说明
本文记录的个人完整搭建docker registry操作过程,官方虽然提供了Docker Hub作为一个公开的集中仓库,但是天朝的网络可想而知,第一次pull一个镜像不是失败就是时间很长,为了解决这个问题需要创建一个私有的仓库在本地pull 本地push。我使用的docker版本是:1.5.0
2、安装docker-registry
docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v /alidata/registry:/tmp/registry -p
# 如果本地没有下载过docker-registry,则首次会pull registry 运行时会映射路径和端口,以后就可以从/data/registry下找到私有仓库
3、客户端上的操作
#从本地仓库上获取有哪些镜像
curl -X GET :5000/v1/search
curl :5000/v1/search
{&num_results&: 1, &query&: &&, &results&: [{&description&: &&, &name&: &library/centos6&}]}
# 拉取到本地
docker pull library/centos6
# tag 一个镜像
docker tag f9 :5000/centos6_x86_64.mini
# 将新的docker images push 到本地仓库
docker push :5000/centos6_x86_64.mini
4、加入nginx认证
Docker 启动监听端口后,使用的是 http,可以远程来管理 Docker 主机。
这样的场景存在弊端,API 层面是没有提供用户验证、Token 之类身份验证功能,任何人都可以通过地址加端口来控制 Docker 主机,为了避免这样的情况发生,Docker 官方也支持 https 方式,不过需要我们自己来生成证书。
新版本的docker 也强制必须使用https否则会报错
# 安装nginx过程略
创建一个登陆用户(如果没有htpasswd命令 请安装httpd-tools这个包)
htpasswd -c /alidata/server/nginx/docker-registry.htpasswd admin
New password:
Re-type new password:
Adding password for user admin
# 生成根密钥
cd /etc/pki/CA/
openssl genrsa -out private/cakey.pem 2048
# 生成根证书
openssl req -new -x509 -key private/cakey.pem -out cacert.pem
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Brijing
Locality Name (eg, city) []:Chaoyang
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
# 为nginx服务器生成ssl密钥
cd /alidata/server/nginx/ssl
openssl genrsa -out nginx.key 2048
# 为nginx生成的证书签署请求
openssl req -new -key nginx.key -out nginx.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Beijing
Locality Name (eg, city) []:Chaoyang
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
# 私有CA根据请求来签发证书
openssl ca -in nginx.csr -out nginx.crt
# 如果报如下错误:
Using configuration from /usr/local/f
/etc/pki/CA/index.txt: No such file or directory
unable to open '/etc/pki/CA/index.txt'
600:error::system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/pki/CA/index.txt','r')
600:error::BIO routines:FILE_CTRL:system lib:bss_file.c:400:
# 执行以下命令
cd /etc/pki/CA/
mkdir newcerts
touch index.txt
touch serial
echo 01 & serial
openssl ca -in nginx.csr -out nginx.crt
Using configuration from /usr/local/f
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Not Before: May 12 04:15:08 2015 GMT
Not After : May 11 04:15:08 2016 GMT
countryName = CN
stateOrProvinceName = Beijing
organizationName = Internet Widgits Pty Ltd
commonName =
emailAddress =
X509v3 extensions:
X509v3 Basic Constraints:
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
B5:20:C7:47:26:D9:26:54:12:F7:36:7E:4E:3A:F0:D9:0E:2C:F7:BD
X509v3 Authority Key Identifier:
keyid:93:F7:86:72:1B:2B:24:CD:AF:24:EF:53:F4:E1:FA:EC:E7:70:1A:90
Certificate is to be certified until May 11 04:15:08 2016 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
# 发现根证书
# cp /etc/pki/tls/certs/ca-bundle.crt{,.bak} 备份以防出错
# cat /etc/pki/CA/cacert.pem && /etc/pki/tls/certs/ca-bundle.crt
# 创建nginx配置文件
# vi /alidata/server/nginx/conf/vhosts/.conf
upstream docker-registry {
server localhost:5000;
listen 8080;
# enabled ssl
ssl_certificate /alidata/server/nginx/ssl/nginx.
ssl_certificate_key /alidata/server/nginx/ssl/nginx.
proxy_set_header Host $http_
proxy_set_header X-Real-IP $remote_
client_max_body_size 0;
chunked_transfer_
location / {
auth_basic &Restricted&;
auth_basic_user_file docker-registry.
proxy_pass http://docker-
location /_ping {
proxy_pass http://docker-
location /v1/_ping {
proxy_pass http://docker-
# 完成测试
# docker login :8080
Username: admin
好了,搭建Docker私有仓库内容就给大家介绍到这里了。希望大家继续关注我们的网站!
相关推荐:
本文相关阅读
高校查询分数线
考生所在地
北京天津辽宁吉林黑龙江上海江苏浙江安徽福建山东湖北湖南广东重庆四川陕西甘肃河北山西内蒙古河南海南广西贵州云南西藏青海宁夏新疆江西香港澳门台湾
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
地区批次线查询
考生所在地
北京天津辽宁吉林黑龙江上海江苏浙江安徽福建山东湖北湖南广东重庆四川陕西甘肃河北山西内蒙古河南海南广西贵州云南西藏青海宁夏新疆江西香港澳门台湾
科目理科文科综合其他
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
院校所在地北京天津辽宁吉林黑龙江上海江苏浙江安徽福建山东湖北湖南广东重庆四川陕西甘肃河北山西内蒙古河南海南广西贵州云南西藏青海宁夏新疆江西香港澳门台湾
其它中央部委
类型工科农业师范民族
层次本科高职(专科)
高考志愿③部曲
频道热门推荐
栏目最新更新搭建自己的 Docker 私有仓库服务_Linux教程_Linux公社-Linux系统门户网站
你好,游客
搭建自己的 Docker 私有仓库服务
作者:Linux
说明:仅供参考,这个方案可能已经过时了,docker-registry官方github上写的是docker run -p 。
还有如何搜索私有仓库服务内的镜像?可以通过http://192.168.2.45/v1/search来获取私有仓库内的镜像。
的介绍这里就省了,Docker 在其相关领域的火爆程度不亚于今年汽车行业里的特斯拉,docCloud 甚至 好东西总是传播很快,我们现在已经有客户在 VPS 上用 Docker 来部署应用了。不了解 Docker 的小伙伴们可以看看 使用 Docker/LXC 迅速启动一个桌面系统 开头部分的介绍(见 )。
和初次接触 Xen/KVM 虚拟技术的体验不同,Docker 不用自己动手制作镜像,官方已经提供了很多版本的 Linux 镜像,直接从官方仓库(Public Repositories)下载就可以了。如果考虑到安全性和速度,我们可能会想在自己局域网里架设一个私有仓库(Private Repositories)来放我们自己的镜像, 正是我们需要的工具。
用 git 下载源码后修改配置文件 config.yml,把 storage_path 部分改成 Docker 镜像仓库的存放地点:
$ git clone /dotcloud/docker-registry
$ cd docker-registry
$ cp config_sample.yml config.yml
$ vi config.yml
# This is the default configuration when no flavor is specified
storage: local
storage_path: /home/linuxidc/registry
loglevel: debug
$ mkdir /home/linuxidc/registry
安装一些必要软件包和一些 Docker-Registry 需要用到的 Python 工具和库:
$ sudo apt-get install build-essential python-dev libevent-dev python-pip libssl-dev
$ sudo pip install -r requirements.txt
Docker-Registry 实际上是个基于 Flask 的 web app,安装成功后就可以这样运行了:
$ sudo gunicorn --access-logfile - --debug -k gevent -b 0.0.0.0:80 -w 1 wsgi:application
打开浏览器,访问 IP 地址就可以看到 docker-registry 私有仓库在运行了:
查看一下现有系统上已经有了哪些镜像:
$ sudo docker images
REPOSITORY
936a54e8a345
2 weeks ago
12.29 kB (virtual 327.8 MB)
8dbd9e392a96
6 months ago
131.5 MB (virtual 131.5 MB)
8dbd9e392a96
6 months ago
131.5 MB (virtual 131.5 MB)
b750fe79269d
7 months ago
24.65 kB (virtual 180.1 MB)
我们打算把 linuxidc/ubuntu 这个镜像(ID 是 936a54e8a345)上传(push)到我们刚创建的私有仓库里(这个私有仓库的 IP 地址是 192.168.2.45),会看到提示 Username/Password,初次 push 的话,可以自己设置用户名和密码:
$ sudo docker tag 936a54e8a345 192.168.2.45/linuxidc
$ sudo docker push 192.168.2.45/linuxidc
Username: linuxidc
Account created. Please use the confirmation link we sent to your e-mail to activate it.
The push refers to a repository [192.168.2.45/linuxidc] (len: 1)
Processing checksums
Sending image list
Pushing repository 192.168.2.45/linuxidc (1 tags)
Pushing 8dbd9e392ad58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c
Buffering to disk /? (n/a)
Pushing 58.27 MB/58.27 MB (100%)
完成 push 后,我们的私有仓库就有了第一个镜像了:
$ sudo docker images
REPOSITORY
linuxidc/ubuntu
936a54e8a345
2 weeks ago
12.29 kB (virtual 327.8 MB)
8dbd9e392a96
6 months ago
131.5 MB (virtual 131.5 MB)
8dbd9e392a96
6 months ago
131.5 MB (virtual 131.5 MB)
b750fe79269d
7 months ago
24.65 kB (virtual 180.1 MB)
192.168.2.45/linuxidc
936a54e8a345
2 weeks ago
12.29 kB (virtual 327.8 MB)
以后只要 docker pull 192.168.2.45/linuxidc 就可以从我们自己的私有仓库下载和运行镜像了,本地网络速度当然会快很多。
Docker的搭建Gitlab CI 全过程详解
Docker 和一个正常的虚拟机有何区别?
在 Docker 中使用 MySQL
Docker 将改变所有事情
Docker安装应用( 6.5_x64)
Docker 的详细介绍:Docker 的下载地址:
本文永久更新链接地址:
相关资讯 & & &
& (05月04日)
& (03月07日)
& (04月24日)
& (02月21日)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款

我要回帖

更多关于 docker 镜像仓库 的文章

 

随机推荐