Docker容器学习梳理--私有仓库Registry使用

但有时候使用Docker Hub这样的公共仓库可能不方便,这种情况下用户可以使用registry创建一个本地仓库供私人使用,这点跟Maven的管理类似。
使用私有仓库有许多优点:

1)节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可;
2)提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用。

目前Docker Registry已经升级到了v2,最新版的Docker已不再支持v1。Registry v2使用Go语言编写,在性能和安全性上做了很多优化,重新设计了镜像的存储格式。如果需要安装registry v2,只需下载registry:2.2即可。Docker官方提供的工具docker-registry可以用于构建私有的镜像仓库。废话不多说了,下面记录下Docker私有仓库构建的过程:

选择一台服务器(内外网地址:192.168.1.23/103.110.186.23),用于搭建私有仓库。(前提是该机器安装了Docker)
1)从Docker官方仓库里下载registry镜像
[[email protected] ~]# docker pull registry
----------------------------------------------------------------
或者:
[[email protected] ~]# docker pull registry:2.1.1
----------------------------------------------------------------
下载完之后,可以通过该镜像启动一个容器
[[email protected] ~]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
docker.io/registry   latest              047218491f8c        3 weeks ago         33.17 MB

默认情况下,会将私有仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失。
所以一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下,如下:
[[email protected] ~]# docker run -d --name=my_registry -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
9fe45329bda17f61da04e6e8d2faf124fb22665a25270421bb8979a419809446

[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
9fe45329bda1        registry            "/entrypoint.sh /etc/"   2 seconds ago       Up 2 seconds        0.0.0.0:5000->5000/tcp   my_registry

由上可以看到,已经启动了一个容器,地址为:192.168.1.23:5000。

2)测试
接下来可以把一个本地镜像push(如下面的tomcat7镜像)到私有仓库中。
[[email protected] ~]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
tomcat7              latest              2ec9e2eb978a        3 days ago          562.3 MB

修改一下该镜像的tag标识。
[[email protected] ~]# docker tag tomcat7 192.168.1.23:5000/tomcat7

接下来把上面修改tag后的镜像上传到私有仓库。
[[email protected] ~]# docker push 192.168.1.23:5000/tomcat7
The push refers to a repository [192.168.1.23:5000/tomcat7]
unable to ping registry endpoint https://192.168.1.23:5000/v0/
v2 ping attempt failed with error: Get https://192.168.1.23:5000/v2/: http: server gave HTTP response to HTTPS client
v1 ping attempt failed with error: Get https://192.168.1.23:5000/v1/_ping: http: server gave HTTP response to HTTPS client

出现上面错误的原因分析:
因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。
为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。
需要在docker的配置文件/etc/sysconfig/docker (ubuntu系统中的docker配置文件时/etc/default/docker )添加参数“--insecure-registry=192.168.1.23:5000”。
-----------------------------------------------------------------------------------------------------------
注意:这个是在客户机的docker配置文件里添加的。
比如说在A机器上将它的镜像上传到192.168.1.23的私有仓库上,那么就在A机器的本地docker配置文件中添加。
我这里测试用的是同一台机器,即将192.168.1.23本机的镜像上传到它的仓库内。
-----------------------------------------------------------------------------------------------------------
[[email protected] ~]# vim /etc/sysconfig/docker
.......
OPTIONS=‘--selinux-enabled --log-driver=journald‘
改为
OPTIONS=‘--selinux-enabled --log-driver=journald --insecure-registry=192.168.1.23:5000‘

[[email protected] ~]# service docker restart

由于docker服务重启后,所有容器都会被关闭。所以需要在docker重启后再次启动容器
[[email protected] ~]# docker start my_registry
my_registry
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
9fe45329bda1        registry            "/entrypoint.sh /etc/"   39 minutes ago      Up 10 minutes       0.0.0.0:5000->5000/tcp   my_registry

再次提交到私有仓库
[[email protected] ~]# docker push 192.168.1.23:5000/tomcat7
The push refers to a repository [192.168.1.23:5000/tomcat7]
c6d7ce9e90d7: Pushed
34e7b85d83e4: Pushed
latest: digest: sha256:5fdcbaf254cb44dd26645f606cccea8de76118baff03485e40853c691a15956d size: 720

[[email protected] ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
192.168.1.23:5000/tomcat7   latest              2ec9e2eb978a        3 days ago          562.3 MB
tomcat7                     latest              2ec9e2eb978a        3 days ago          562.3 MB
docker.io/registry          latest              047218491f8c        3 weeks ago         33.17 MB

可以看到镜像已经push到私有仓库中去了。
接下来删除本地的tomcat7镜像,然后从私有仓库中pull下来该镜像。
[[email protected] ~]# docker rmi tomcat7:latest            //或者docker rmi tomcat7:latest
[[email protected] ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
192.168.1.23:5000/tomcat7   latest              2ec9e2eb978a        3 days ago          562.3 MB
docker.io/registry          latest              047218491f8c        3 weeks ago         33.17 MB

然后根据私有仓库里的镜像创建tomcat容器
[[email protected] ~]# docker run -t -i -d --name=tomcat -p 8888:8080 192.168.1.23:5000/tomcat7 /bin/bash
9c0f5d6249a1e4671df932cb299ca151dbac02d1063d261fe82a860d5fa19f7b
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                    NAMES
9c0f5d6249a1        192.168.1.23:5000/tomcat7   "/bin/bash"              4 seconds ago       Up 3 seconds        0.0.0.0:8888->8080/tcp   tomcat
9fe45329bda1        registry                    "/entrypoint.sh /etc/"   53 minutes ago      Up 24 minutes       0.0.0.0:5000->5000/tcp   my_registry
[[email protected] ~]# docker attach tomcat
[[email protected] /]# /usr/local/tomcat7/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat7
Using CATALINA_HOME:   /usr/local/tomcat7
Using CATALINA_TMPDIR: /usr/local/tomcat7/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar
Tomcat started.
[[email protected] /]# 

宿主机的iptables里开放映射端口8888的访问,然后外部访问容器的tomcat服务:

时间: 2024-10-23 17:30:52

Docker容器学习梳理--私有仓库Registry使用的相关文章

Docker容器学习梳理--容器登陆方法梳理(attach、exec、nsenter)

对于运行在后台的Docker容器,我们运维人员时常是有登陆进去的需求.登陆Docker容器的方式: 1)使用ssh登陆容器.这种方法需要在容器中启动sshd,存在开销和攻击面增大的问题.同时也违反了Docker所倡导的一个容器一个进程的原则. 参考Docker容器学习梳理--SSH方式登陆容器 2)使用自带命令docker attach登陆容器.命令格式:docker attach container_id.不过docker attach存在的问题是:当多个窗口同时attach到同一个容器时,所

Docker容器学习梳理--容器间网络通信设置(Pipework和Open vSwitch)

自从Docker容器出现以来,容器的网络通信就一直是被关注的焦点,也是生产环境的迫切需求.容器的网络通信又可以分为两大方面:单主机容器上的相互通信,和跨主机的容器相互通信.下面将分别针对这两方面,对容器的通信原理进行简单的分析,帮助大家更好地使用docker.前面已经在Docker容器学习梳理--基础知识(2)这一篇中详细介绍了Docker的网络配置以及pipework工具. docker单主机容器通信 基于对net namespace的控制,docker可以为在容器创建隔离的网络环境,在隔离的

Docker容器学习梳理--小知识点补充

之前已经梳理了Docker的相关使用事项,这里再补充一些,以便加深掌握程度.1)docker run指令 [[email protected] ~]# docker run --help : docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Run a command in a new container -a, --attach=[] Attach to STDIN, STDOUT or STDERR --add-host=[] Add a custo

Docker容器学习梳理-容器硬盘热扩容

docker容器默认的空间是10G,如果想指定默认容器的大小,可以在docker配置文件里自定义,比如配置成--storage-opt dm.basesize=20G,即容器设置成20G:也可以在启动容器的时候指定:# docker -d --storage-opt dm.basesize=20G 在实际生产环境下,对docker容器进行热扩容(动态扩容)是非常重要的一个需求,但是上面的方法需要修改后需要重启docker,无法做到动态给运行容器指定大小. Docker容器动态扩展的优点: 1)不

Docker容器学习梳理-Dockerfile构建镜像

在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其中,然后让docker读取并分析.执行,那么重复构建.更新将变得很方便,所以Dockerfile就此诞生了.Docker提供了Dockerfile作为构建Docker镜像脚本,避免人们一行一行的输入,真是善莫大焉.Dockerfile脚本可以做到随时维护修改,即可以分享,更有利于在模板化,更不用说传

Docker容器学习梳理--web管理工具(1)

DockerUI优点:1)支持container批量操作:2)支持image管理(虽然比较薄弱) DockerUI缺点:不支持多主机. 下面记录在DockerUI管理环境的部署过程:1)首先拉去dockerUI镜像如下:[[email protected] ~]# docker pull uifd/ui-for-docker //之前镜像位置为dockerui/dockerui [[email protected] ~]# docker imagesREPOSITORY TAG IMAGE ID

Docker容器学习梳理--手动制作系统镜像

docker官方和个人发布的镜像由于版本等各种原因,漏洞较多,已统计Docker Hub超过30%的官方镜像包含高危漏洞.此外,由于网络等原因也会造成docker pull下载镜像的速度很慢.基于这种情况,我们可以手动定制docker系统镜像. 以下记录了在centos7上做docker镜像的操作记录: 1)镜像制作脚本:mkimage-yum.sh 下载脚本地址:https://pan.baidu.com/s/1geTSQCN 提取密码:qsss 或者直接wget https://raw.gi

Docker私有仓库registry+nginx(https)

Docker仓库 仓库(Repository)是集中存放镜像的地方. 一个容易混淆的概念是注册服务器(Registry) .实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像.从这方面来说,仓库可以被认为是一个具体的项目或目录.例如对于仓库地址 docker.sina.com.cn/centos:centos63 来说,docker.sina.com.cn 是注册服务器地址,centos 是仓库名,centos63 是仓库的 tag. Docker Hu

教你分分钟搞定Docker私有仓库Registry

一.什么是Docker私有仓库Registry 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候我们的服务器无法访问互联网,或者你不希望将自己的镜像放到公网当中,那么你就需要Docker Registry,它可以用来存储和管理自己的镜像. 二.安装Docker及Registry 安装Docker见之前博文: http://www.cnblogs.com/Javame/p/5492543.html 安装Regi