docker 怎么关闭docker pull 私有仓库库

当前位置:&>&&>&
构建Docker镜像以及私有仓库配置教程
发布时间:
来源:服务器之家
一、构建镜像
目前的方式,都是去pull别人的镜像,肯定不是自己想要。那么如何来构建自己想要的镜像呢?
有以下两种方式:
这种方式很简单,就是先创建一个容器。然后修改容器内部达到自己想要的状态。再提交成新镜像。就跟vmware创建快照类似。
#docker&commit&容器id&新容器名:版本号&&&&&#提交镜像 &&&&-m&&&&&&&&&&&#描述信息 &&&&--author&#作者信息
这种方式是广为流行的一种方式,这是利用编写脚本来编译镜像。就是基于一个基础镜像,然后执行各种预定义的命令,以及容器启动参数,以及端口映射。都可以在配置文件里配置。使用此方式还有个好处就是&有迹可循&,通过查看Dockerfile文件,知道目标镜像是如何构建的。
下面先来个小列子:
# mkdir httpd && cd httpd & &#创建目录
# vim Dockerfile & & & & & & & & & & & &#编写文件
#&Version:&0.0.1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#标示版本号 FROM&centos:6&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#定义从哪个镜像开始 MAINTAINER&DonTony&&[email&protected]&&&&&&&&&&&&&&&&&&&&&&&&&&&&#作者信息 RUN&yum&-y&install&httpd&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#开始执行命令 RUN&echo&'Hi,&I&am&your&container'&&&/var/www/html/index.html RUN&service&httpd&start EXPOSE&80&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#映射80端口
# docker build -t=&webserver/httpd:v1& . & & & #构建镜像,注意最后的点.
上面的例子是:从centos6镜像开始,首先安装httpd,然后定义首页内容,在启动服务。最后映射端口。
那么上面的各个指令都有什么含义呢?见下面
FROM 用法:FROM&&image&:&tag& 说明:这个设置基本的镜像,为后续的命令使用,所以应该作为Dockerfile的第一条指令。 例:FROM&centos:6 PS:如果没有指定&tag&,则默认tag是latest,如果都没有则会报错。 MAINTAINER 用法:MAINTAINER&&name& 说明:MAINTAINER命令用来指定维护者的姓名和联系方式 例:MAINTAINER&DonTony&&[email&protected]& RUN 用法:RUN&&command&&(the&command&is&run&in&a&shell&-&`/bin/sh&-c`)&OR&RUN&[&executable&,&&param1&,&&param2&&...&]&&(exec&form) 说明:RUN命令会在上面FROM指定的镜像里执行任何命令,然后提交(commit)结果,提交的镜像会在后面继续用到。 等价于: docker&run&image&command docker&commit&container_id 例:RUN&yum&-y&install&httpd ENTRYPOINT 用法:ENTRYPOINT&cmd&param1&param2&OR&ENTRYPOINT&[&echo&,&&Whale&you&be&my&container&] 说明:ENTRYPOINT&命令设置在容器启动时执行命令 例:ENTRYPOINT&[&service&,&httpd&,&start&] USER 用法:USER&&username& 说明:用来指定运行用户 例:USER&nobody EXPOSE& 用法:EXPOSE&&port&&[&port&...] 说明:EXPOSE&命令可以设置一个端口在运行的镜像中暴露在外 例:EXPOSE&80 也可以通过run容器的时候指定:-p&80 ENV 用法:ENV&&key&&&value& 说明:ENV命令设置一个环境变量 例:ENV&name&test 也可以通过run容器的时候指定:--env&name=&test& ADD 用法:ADD&&src&&&dest& &src&&是相对被构建的源目录的相对路径,可以是文件或目录的路径,也可以是一个远程的文件url &dest&&是container中的绝对路径 说明:从src复制文件到container的dest路径: 例:ADD&http://192.168.1.121/pkg/apache-tomcat-8.0.20.tar.gz&/home/app/apache-tomcat-8.0.20.tar.gz PS;支持网络路径 VOLUME& 用法:VOLUME&[&&mountpoint&&] 说明:创建一个挂载点用于共享目录 例:VOLUME&[&/data&] WORKDIR& 用法:WORKDIR&&path& 说明:配置RUN,&CMD,&ENTRYPOINT&命令设置当前工作路径 例:WORKDIR&/root PS:可以设置多次,如果是相对路径,则相对前一个&WORKDIR&命令 CMD 用法:有三种格式: CMD&[&executable&,&param1&,&param2&]&(like&an&exec,&preferred&form) CMD&[&param1&,&param2&]&(as&default&parameters&to&ENTRYPOINT) CMD&command&param1&param2&(as&a&shell) 说明:CMD&设定运行镜像时的默认命令 例:CMD&/etc/init.d/httpd&start PS:运行docker&run&时不提供COMMAND就会执行到。一个Dockerfile里只能有一个CMD,如果有多个,只有最后一个生效。
下面给出一个实际的例子吧(仅作为测试演示!):构建一个tomcat环境
#&Version:&0.0.1 FROM&centos:6 MAINTAINER&DonTony&&[email&protected]& RUN&yum&install&-y&vim&tar&lrzsz&openssh&openssh-server&wget&lrzsz RUN&useradd&app RUN&echo&&&|passwd&--stdin&app RUN&echo&&_root&|passwd&--stdin&root RUN&ssh-keygen&-q&-N&&&&-t&dsa&-f&/etc/ssh/ssh_host_dsa_key RUN&ssh-keygen&-q&-N&&&&-t&rsa&-f&/etc/ssh/ssh_host_rsa_key RUN&sed&-ri&'s/session&&&&required&&&&&pam_loginuid.so/#session&&&&required&&&&&pam_loginuid.so/g'&/etc/pam.d/sshd RUN&mkdir&-p&/root/.ssh&&&&chown&root.root&/root&&&&chmod&700&/root/.ssh WORKDIR&/home/app ADD&http://192.168.1.121/pkg/jdk1.8.0_40.tar.gz&/home/app/jdk1.8.0_40.tar.gz RUN&tar&zxf&/home/app/jdk1.8.0_40.tar.gz&-C&/home/app/ ADD&http://192.168.1.121/pkg/apache-tomcat-8.0.20.tar.gz&/home/app/apache-tomcat-8.0.20.tar.gz RUN&tar&zxf&/home/app/apache-tomcat-8.0.20.tar.gz&-C&/home/app/ RUN&rm&-fr&/home/app/*.tar.gz RUN&echo&&###&For&jdk&###&&&&&.bash_profile RUN&echo&&export&JAVA_HOME=/home/app/jdk1.8.0_40&&&&&/home/app/.bash_profile RUN&echo&&export&JAVA_BIN=/home/app/jdk1.8.0_40/bin&&&&&/home/app/.bash_profile RUN&echo&&export&PATH=$PATH:/home/app/jdk1.8.0_40/bin&&&&&/home/app/.bash_profile RUN&echo&&export&CLASSPATH=.:/home/app/jdk1.8.0_40/lib/dt.jar:/home/app/jdk1.8.0_40/lib/tools.jar&&&&&/home/app/.bash_profile RUN&echo&&export&JAVA_HOME&JAVA_BIN&PATH&CLASSPATH&&&&&/home/app/.bash_profile RUN&chown&-R&app.app&/home/app EXPOSE&22 CMD&/usr/sbin/sshd&-D EXPOSE&8080
好了,多构建几次,便就理解了。
二、私有仓库
每次去公网pull镜像?上面构建的镜像如何给别的机器使用?这些都是遗留问题。那么就可以利用registry来构建自己企业内部的私有仓库来解决这些问题吧。
使用私有仓库有许多优点:
节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可;
提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用。
接下来我们就大致说一下如何在本地搭建私有仓库。
首先在需要部署仓库的机器上pull镜像
docker&pull&registry
然后启动容器(默认情况下,会将仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下,如下:)
docker&run&-d&-p&&-v&/root/my_registry:/tmp/registry&registry
成功启动容器。
现在看/root/my_registry里面是空的,等一会push之后再看。
下面就是pull一个需要提交的镜像了。比如nginx
docker&pull&nginx
pull下来之后,需要改tag
docker&tag&nginx&10.20.161.77:5000/nginx
ok了,现在可以push到仓库了。
docker&push&10.20.161.77:5000/nginx
会出现如下提示:
因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。
解决办法:
vim /etc/sysconfig/docker
增加如下:
INSECURE_REGISTRY='--insecure-registry&10.20.161.77:5000'
重启docker
systemctl restart docker
启动仓库容器
再次push成功
用url的方式查看私有仓库镜像
curl http://10.20.161.77:5000/v1/search
出现刚刚push的镜像则成功。
现在私有仓库就可以使用了。不过在使用前还是记得修改docker的配置文件,增加10.20.161.77:5000
Copyright © . 版权所有zys 的BLOG
用户名:zys
文章数:78
评论数:202
访问量:206904
注册日期:
阅读量:5863
阅读量:12276
阅读量:372110
阅读量:1066062
51CTO推荐博文
今天和大家聊聊Docker的私有仓库。前段时间啊在CentOS6.x上玩Docker的私有仓库,由于https认证的原因,一直没有能解决,最后听群上的一朋友说,换成CentOS 7试试,也别说,最后实验成功啦!所以我建议朋友在玩docker的私有仓库的时候,也能现在CentOS7.x系统上玩,确定对整个过程熟悉后,然后换成你熟悉的6.x的系统,这样也是一个循循渐进的过程吧!一、准备1、地址规划Docker私有仓库地址:192.168.0.109
Docker客户端地址:192.168.0.1102、激活网卡#&vim&/etc/sysconfig/network-scripts/ifcfg-eno
ONBOOT=yes
#&/etc/init.d/network&restart3、关闭本地防火墙并设置开机不自启动#&systemctl&stop&firewalld.service
#&systemctl&disable&firewalld.service4、关闭本地selinux防火墙#&vi&/etc/sysconfig/selinux&
SELINUX=disabled
#&setenforce&0 5、安装ifconfig工具#&yum&install&net-tools二、安装1、安装docker#&yum&install&docker
#&yum&upgrade&device-mapper-libs
#&service&docker&start
#&chkconfig&docker&on2、本地私有仓库registry[root@localhost&~]#&docker&pull&registry
Trying&to&pull&repository&docker.io/registry&...
24dd746e9b9f:&Download&complete&
19:&Download&complete&
a62a42e77c9c:&Download&complete&
2c014f14d3d9:&Download&complete&
b7cf8f0d9e82:&Download&complete&
d0b170ebeeab:&Download&complete&
171efc310edf:&Download&complete&
522ed614b07a:&Download&complete&
605ed9113b86:&Download&complete&
22b93b23ebb9:&Download&complete&
2ac557a88fda:&Download&complete&
1f3b4c532640:&Download&complete&
27ebaac643a7:&Download&complete&
ce:&Download&complete&
Status:&Downloaded&newer&image&for&docker.io/registry:latest
[root@localhost&~]#&docker&images
REPOSITORY&&&&&&&&&&&TAG&&&&&&&&&&&&&&&&&IMAGE&ID&&&&&&&&&&&&CREATED&&&&&&&&&&&&&VIRTUAL&SIZE
docker.io/registry&&&latest&&&&&&&&&&&&&&24dd746e9b9f&&&&&&&&3&days&ago&&&&&&&&&&413.8&MB3、基于私有仓库镜像运行容器[root@localhost&~]#&docker&run&-d&-p&&-v&/opt/data/registry:/tmp/registry&docker.io/registry
bb2c0d442df94e08ef144f378ee36b80c
[root@localhost&~]#&docker&ps&-a
CONTAINER&ID&&&&&&&&IMAGE&&&&&&&&&&&&&&&&&&&&&&&COMMAND&&&&&&&&&&&&&CREATED&&&&&&&&&&&&&STATUS&&&&&&&&&&&&&&PORTS&&&&&&&&&&&&&&&&&&&&NAMES
bb2c0d442df9&&&&&&&&docker.io/registry:latest&&&"docker-registry"&&&10&seconds&ago&&&&&&Up&7&seconds&&&&&&&&0.0.0.0:/tcp&&&serene_hopper4、访问私有仓库[root@localhost&~]#&curl&127.0.0.1:5000/v1/search
{"num_results":&0,&"query":&"",&"results":&[]} //私有仓库为空,没有提交新镜像到仓库中5、从Docker Hub上下载一个ssh镜像[root@localhost&~]#&docker&search&-s&10&ssh
NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&DESCRIPTION&&&STARS&&&&&OFFICIAL&&&AUTOMATED
docker.io:&docker.io/fedora/ssh&&&&&&&&&&&&&&&&&18&&&&&&&&&&&&&&&&&&&[OK]
[root@localhost&~]#&docker&pull&fedora/ssh
Trying&to&pull&repository&docker.io/fedora/ssh&...
2aeb2b6d9705:&Download&complete&
c5a:&Download&complete&
00a0c78eeb6d:&Download&complete&
fe2:&Download&complete&
571e8a51403c:&Download&complete&
87d5d42e693c:&Download&complete&
92b5ef05fe68:&Download&complete&
92d3910dc33c:&Download&complete&
cf2e9fa11368:&Download&complete&
Status:&Downloaded&newer&image&for&docker.io/fedora/ssh:latest
[root@localhost&~]#&docker&images
REPOSITORY&&&&&&&&&&&&&TAG&&&&&&&&&&&&&&&&&IMAGE&ID&&&&&&&&&&&&CREATED&&&&&&&&&&&&&VIRTUAL&SIZE
docker.io/registry&&&&&latest&&&&&&&&&&&&&&24dd746e9b9f&&&&&&&&3&days&ago&&&&&&&&&&413.8&MB
docker.io/fedora/ssh&&&latest&&&&&&&&&&&&&&2aeb2b6d9705&&&&&&&&9&days&ago&&&&&&&&&&254.4&MB6、创建镜像链接或为基础镜像打个标签[root@localhost&~]#&docker&tag&docker.io/fedora/ssh&127.0.0.1:5000/ssh
[root@localhost&~]#&docker&images
REPOSITORY&&&&&&&&&&&&&TAG&&&&&&&&&&&&&&&&&IMAGE&ID&&&&&&&&&&&&CREATED&&&&&&&&&&&&&VIRTUAL&SIZE
docker.io/registry&&&&&latest&&&&&&&&&&&&&&24dd746e9b9f&&&&&&&&3&days&ago&&&&&&&&&&413.8&MB
docker.io/fedora/ssh&&&latest&&&&&&&&&&&&&&2aeb2b6d9705&&&&&&&&9&days&ago&&&&&&&&&&254.4&MB
127.0.0.1:5000/ssh&&&&&latest&&&&&&&&&&&&&&2aeb2b6d9705&&&&&&&&9&days&ago&&&&&&&&&&254.4&MB7、修改Docker配置文件制定私有仓库url[root@localhost&~]#&vim&/etc/sysconfig/docker
OPTIONS='--selinux-enabled&--insecure-registry&192.168.0.109:5000'
[root@localhost&~]#&service&docker&restart
Redirecting&to&/bin/systemctl&restart&&docker.service8、提交镜像到本地私有仓库中[root@localhost&~]#&docker&push&127.0.0.1:5000/ssh
The&push&refers&to&a&repository&[127.0.0.1:5000/ssh]&(len:&1)
Sending&image&list
Pushing&repository&127.0.0.1:5000/ssh&(1&tags)
c5a:&Image&successfully&pushed&
00a0c78eeb6d:&Image&successfully&pushed&
fe2:&Image&successfully&pushed&
571e8a51403c:&Image&successfully&pushed&
87d5d42e693c:&Image&successfully&pushed&
92b5ef05fe68:&Image&successfully&pushed&
92d3910dc33c:&Image&successfully&pushed&
cf2e9fa11368:&Image&successfully&pushed&
2aeb2b6d9705:&Image&successfully&pushed&
Pushing&tag&for&rev&[2aeb2b6d9705]&on&{http://127.0.0.1:5000/v1/repositories/ssh/tags/latest}9、查看私有仓库是否存在对应的镜像[root@localhost&~]#&curl&127.0.0.1:5000/v1/search
{"num_results":&1,&"query":&"",&"results":&[{"description":&"",&"name":&"library/ssh"}]}10、查看镜像的存储目录和文件[root@localhost&~]#&tree&/opt/data/registry/repositories/
/opt/data/registry/repositories/
└──&library
&&&&└──&ssh
&&&&&&&&├──&_index_images
&&&&&&&&├──&json
&&&&&&&&├──&tag_latest
&&&&&&&&└──&taglatest_json
2&directories,&4&files三、从私有仓库中下载已有的镜像1、登陆另外一台Docker客户端[root@localhost&~]#&ssh&root@192.168.0.110
The&authenticity&of&host&'192.168.0.110&(192.168.0.110)'&can't&be&established.
ECDSA&key&fingerprint&is&5b:81:4b:66:d6:dd:48:16:9f:85:58:72:21:bd:ba:39.
Are&you&sure&you&want&to&continue&connecting&(yes/no)?&yes
Warning:&Permanently&added&'192.168.0.110'&(ECDSA)&to&the&list&of&known&hosts.
root@192.168.0.110's&password:&
Last&login:&Sun&Apr&26&14:39:51&2015&from&192.168.0.1032、修改Docker配置文件[root@localhost&~]#&vim&/etc/sysconfig/docker
OPTIONS='--selinux-enabled&--insecure-registry&192.168.0.109:5000'
//添加私有仓库地址
[root@localhost&~]#&service&docker&restart
Redirecting&to&/bin/systemctl&restart&&docker.service3、从私有仓库中下载已有的镜像[root@localhost&~]#&docker&pull&192.168.0.109:5000/ssh
Trying&to&pull&repository&192.168.0.109:5000/ssh&...
2aeb2b6d9705:&Download&complete&
c5a:&Download&complete&
00a0c78eeb6d:&Download&complete&
fe2:&Download&complete&
571e8a51403c:&Download&complete&
87d5d42e693c:&Download&complete&
92b5ef05fe68:&Download&complete&
92d3910dc33c:&Download&complete&
cf2e9fa11368:&Download&complete&
Status:&Downloaded&newer&image&for&192.168.0.109:5000/ssh:latest
[root@localhost&~]#&docker&images
REPOSITORY&&&&&&&&&&&&&&&TAG&&&&&&&&&&&&&&&&&IMAGE&ID&&&&&&&&&&&&CREATED&&&&&&&&&&&&&VIRTUAL&SIZE
192.168.0.109:5000/ssh&&&latest&&&&&&&&&&&&&&2aeb2b6d9705&&&&&&&&9&days&ago&&&&&&&&&&254.4&MB四、浏览器访问仓库本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
21:20:11 22:23:23 09:19:00 09:39:19 18:11:49&&国之画&&&& &&
版权所有 京ICP备号-2
迷上了代码!如何从docker将image镜像到私有的registry
docker越来越炙手可热,如果你的团队已经准备开始使用docker,那么私有仓库是必不可少的东西,首先是可以帮助你加快从服务器pull镜像的速度,其次也可以帮助你存放私有的镜像,本文主要为大家介绍如何从公用服务器上讲开放的images备份到本地私有服务器上。
本文中以index中的ubuntu镜像举例
从官方的Index服务器上下载ubuntu镜像
docker pull ubuntu
查看现有的images
REPOSITORY
VIRTUAL SIZE
9f676bd305a4
5 weeks ago
9f676bd305a4
5 weeks ago
eb601b8965b8
5 weeks ago
eb601b8965b8
5 weeks ago
5ac751e8d623
5 weeks ago
5ac751e8d623
5 weeks ago
9cc9ea5ea540
5 weeks ago
9cc9ea5ea540
5 weeks ago
9cd978db300e
5 weeks ago
9cd978db300e
5 weeks ago
9cd978db300e
5 weeks ago
一般来讲,我们会使用最新版本的ubuntu,大家可以发现多个TAG对应同一个image,Tag只是一个名字而已。
为需要push到私有registry的image打tag
docker tag 9cd978db300e rd-server:5000/ubuntu
我们可以执行docker
images查看效果
REPOSITORY
VIRTUAL SIZE
9f676bd305a4
5 weeks ago
9f676bd305a4
5 weeks ago
eb601b8965b8
5 weeks ago
eb601b8965b8
5 weeks ago
5ac751e8d623
5 weeks ago
5ac751e8d623
5 weeks ago
9cc9ea5ea540
5 weeks ago
9cc9ea5ea540
5 weeks ago
9cd978db300e
5 weeks ago
9cd978db300e
5 weeks ago
9cd978db300e
5 weeks ago
rd-server:5000/ubuntu
9cd978db300e
5 weeks ago
将ubuntu push到私有registry
docker push rd-server:5000/ubuntu
如何将ubuntu的所有分支都镜像到自己的私有仓库?
1.先打TAG,把需要的版本打上标签,然后进行推送
语句大概是这个样子的:
docker tag eb601b8965b8 rd-server:5000/ubuntu:raring
docker tag eb601b8965b8 rd-server:5000/ubuntu:13.04
docker tag 9f676bd305a4 rd-server:5000/ubuntu:saucy
docker tag 9f676bd305a4 rd-server:5000/ubuntu:13.10
docker tag 9cd978db300e rd-server:5000/ubuntu:precise
docker tag 9cd978db300e rd-server:5000/ubuntu:latest
docker tag 9cd978db300e rd-server:5000/ubuntu:12.04
docker tag 9cc9ea5ea540 rd-server:5000/ubuntu:lucid
docker tag 9cc9ea5ea540 rd-server:5000/ubuntu:10.04
docker tag 5ac751e8d623 rd-server:5000/ubuntu:quantal
docker tag 5ac751e8d623 rd-server:5000/ubuntu:12.10
docker push rd-server:5000/ubuntu
如果返回的内容的最后一行是下面这个样子的
08:22:14 push: }
请反复执行,没错,不要怀疑,请循环一直反复执行下去
docker pull rd-server:5000/ubuntu
直到不再出现 push:
不知道这是docker的BUG还是本身设计是这样的,需要反复多次push才能将完整的tag推送到private registry里,否则在客户端下载的时候总会提示某些image找不到,个人猜测可能是这么设计的,因为docker image比较大,而一个repo会有很多的块文件,每次push的时候只Push一个块,好了,猜测就道这,活还是得干,所以,写个脚本解决手工的问题吧。
#Copyright (c) 2014 ZhengXujin
server=&127.0.0.1:5000&
index_repo_name=&username/ubuntu&
private_repo_name=&ubuntu&
## ## ## ##
/&&&&&&&&&&&&&&&&\___/ ===&
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /
\____\______/&
is_continue=1
docker images|grep -q &$server/$private_repo_name&
if [[ $? -ne 0 ]]; then
docker images|grep $index_repo_name|awk -F& & '{printf(&docker tag %s %s/%s:%s\n&,$3,&'$server'&,&'$private_repo_name'&,$2)}'|bash
while [ $is_continue -eq 1 ]
docker push $server/$private_repo_name
is_continue=$?
let idx=$idx+1
echo &$(tput setaf 1)continue push, $idx times pushed. $(tput sgr 0)&
从客户端获取私有库的镜像
docker pull rd-server:5000/ubuntu
或者获取某个版本的ubuntu
docker pull -t 13.04 rd-server:5000/ubuntu
在从公有库往私有库上推送的时候,可能会遇到一些依赖的镜像并没有完全推送到服务器上,在客户端pull的时候会有错误,提示如下
eb601b8965b8: Error pulling image (13.04) from rd-server:5000/ubuntu, Server error: 400 trying to fetch remote history for eb601b9cd978db300e: Download complete
请反复执行下面的语句,一直到完整上传所有的images
docker push rd-server:5000/ubuntu
当然也不是每次出现这样的问题都是因为上传不完整导致的,也有可能是pull的客户端网络不好,如果反复出现相同问题,就需要考虑上面的方法
如果出现如下的问题,请将主机名直接换成IP来pull库
Invalid Registry endpoint: Get http://rd-server:5000/v1/_ping: dial tcp: lookup rd-server: no such host
docker pull 172.16.1.88:5000/ubuntu
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'39449人阅读
Docker(26)
和Mavan的管理一样,Dockers不仅提供了一个中央仓库,同时也允许我们使用registry搭建本地私有仓库。
使用私有仓库有许多优点:
节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可;
提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用。
接下来我们就大致说一下如何在本地搭建私有仓库。
目前Docker Registry已经升级到了v2,最新版的Docker已不再支持v1。Registry v2使用Go语言编写,在性能和安全性上做了很多优化,重新设计了镜像的存储格式。此文档是在v1的基础上写的,如果需要安装registry v2,只需下载registry:2.2即可,或者可以下载后面的安装脚本运行安装。
环境:两个装有Docker的Ubuntu虚拟机
虚拟机一:192.168.112.132 用户开发机
虚拟机二:192.168.112.136 用作私有仓库
此处我们准备了两个虚拟机,分别都安装了Docker,其中132机器用作开发机,136机器用作registry私有仓库机器。环境准备好之后接下来我们就开始搭建私有镜像仓库。
搭建私有仓库
首先在136机器上下载registry镜像
$ sudo docker pull registry
下载完之后我们通过该镜像启动一个容器
$ sudo docker run -d -p
默认情况下,会将仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下,如下:
$ sudo docker run -d -p
-v /opt/data/registry:/tmp/registry registry
可以看到我们启动了一个容器,地址为:192.168.112.136:5000。
接下来我们就要操作把一个本地镜像push到私有仓库中。首先在132机器下pull一个比较小的镜像来测试(此处使用的是busybox)。
$ sudo docker pull busybox
接下来修改一下该镜像的tag。
$ sudo docker tag busybox 192.168.112.136:5000/busybox
接下来把打了tag的镜像上传到私有仓库。
$ sudo docker push 192.168.112.136:5000/busybox
可以看到push失败,具体错误如下:
2015/01/05 11:01:17 Error: Invalid registry endpoint https://192.168.112.136:5000/v1/: Get https://192.168.112.136:5000/v1/_ping: dial tcp 192.168.112.136:5000: connection refused. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `
因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。修改docker启动配置文件(此处是修改132机器的配置)Ubuntu下配置文件地址为:/etc/init/docker.conf,在其中增加–insecure-registry 192.168.112.136:5000如下所示:
$ sudo vi /etc/init/docker.conf
修改完之后,重启Docker服务。
$ sudo restart docker
重启完之后我们再次运行推送命令,把本地镜像推送到私有服务器上。
$ sudo docker push 192.168.112.136:5000/busybox
可以看到镜像已经push到私有仓库中去了。
接下来我们删除本地镜像,然后从私有仓库中pull下来该镜像。
$ sudo docker pull 192.168.112.136:5000/busybox
到此就搭建好了Docker私有仓库。上面搭建的仓库是不需要认证的,我们可以结合nginx和https实现认证和加密功能。
管理仓库中的镜像
如果我们想要查询私有仓库中的所有镜像,使用docker search命令:
# docker search registry_ip:5000/
如果要查询仓库中指定账户下的镜像,则使用如下命令:
# docker search registry_ip:5000/account/
同时也可以指定镜像查询。
目前尚未找到方法删除私有仓库中的镜像,尝试过直接从仓库存储目录中删除镜像文件,但是并不能成功删除镜像。
Registry V2
Registry V2.2的安装脚本如下:
#!/bin/bash
set -o xtrace
if [[ $UID -ne 0 ]]; then
echo "Not root user. Please run as root."
if [[ $? -ne 0 ]]; then
echo "Please install Docker first."
REGISTRY_VERSION=2.2
docker pull registry:${REGISTRY_VERSION}
mkdir /opt/registry
docker run -d -p 5000:5000 --restart=always -v /opt/registry:/var/lib/registry --name hummer_registry registry:${REGISTRY_VERSION}
Registry的存放目录在Docker Hub上显示的是/tmp/registry-dev,但是映射之后发现并没有存放在该目录,查看源码发现,镜像信息存放在/var/lib/registry目录下,因此这里修改为将/opt/registry目录映射到/var/lib/registry。
# docker push registry:5000/image_name
# curl -XGET http://registry:5000/v2/_catalog
# curl -XGET http://registry:5000/v2/image_name/tags/list
虽然看了官方API,但是还是不能成功删除,不知道digest如何生成。如果有知道的同学请不吝赐教。
根据网上资料显示,当前版本尚不支持该功能,再等等看新版本吧。
根据自己的实验有所改动。
本来自己之前已经写了一篇关于Docker私有仓库的搭建的文章,但是后来不小心把它给覆盖了,也不想再写一遍了。这篇文章跟我的搭建思路差不多,所以就转载了这篇文章。
添加了Registry v2的安装部分。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:396644次
积分:3932
积分:3932
排名:第6311名
原创:84篇
转载:47篇
评论:81条
(1)(3)(1)(1)(2)(3)(1)(3)(5)(3)(2)(1)(6)(6)(8)(16)(3)(3)(1)(1)(2)(3)(3)(6)(3)(9)(9)(1)(11)(13)(1)}

我要回帖

更多关于 docker建立私有仓库 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信