docker容器学习梳理--私有仓库registry使用

散尽浮华 散尽浮华     2022-08-25     481

关键词:

 

但有时候使用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)作为注册服务器,用于搭建私有仓库。(该机器要安装了Docker环境)
1)从Docker官方仓库里下载registry镜像
[root@localhost ~]# docker pull registry:2.2
----------------------------------------------------------------
或者:
[root@localhost ~]# docker pull registry
[root@localhost ~]# docker pull registry:2.1.1
----------------------------------------------------------------
下载完之后,可以通过该镜像启动一个容器
[root@localhost ~]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
tomcat7              latest              97c6a43dd69c        12 minutes ago      562.3 MB
docker.io/registry   2.2                 ad379b517aa6        14 months ago       224.5 MB
        
默认情况下,会将私有仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失。
所以一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下,如下:
[root@localhost ~]# docker run -d --name=my_registry -p 5000:5000 -v /opt/data/registry:/tmp/registry docker.io/registry:2.2
9fe45329bda17f61da04e6e8d2faf124fb22665a25270421bb8979a419809446
        
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED              STATUS              PORTS                    NAMES
d8e98b1068cd        docker.io/registry:2.2   "/bin/registry /etc/d"   About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp   my_registry
        
由上可以看到,已经启动了一个容器,地址为:192.168.1.23:5000。
        
2)测试
接下来可以把一个本地镜像push(如下面的tomcat7镜像)到私有仓库中。
[root@localhost ~]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
tomcat7              latest              97c6a43dd69c        18 minutes ago      562.3 MB
docker.io/registry   2.2                 ad379b517aa6        14 months ago       224.5 MB
        
修改一下该镜像的tag标识。
[root@localhost ~]# docker tag tomcat7 192.168.1.23:5000/tomcat7
     
[root@localhost ~]# docker tag tomcat7 192.168.1.23:5000/tomcat7       //修改了tag后的镜像若要删除,docker rmi后面不能用镜像ID了,需要用docker rmi 192.168.1.23:5000/tomcat7:latest
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
192.168.1.23:5000/tomcat7   latest              97c6a43dd69c        18 minutes ago      562.3 MB
tomcat7                     latest              97c6a43dd69c        18 minutes ago      562.3 MB
docker.io/registry          2.2                 ad379b517aa6        14 months ago       224.5 MB
     
接下来把上面修改tag后的镜像上传到私有仓库。
[root@localhost ~]# 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配置文件中添加。
我这里测试用的是同一台机器(centos7),即将注册机192.168.1.23本机的镜像上传到它的仓库内。     [如果是centos6系统,就在other_args选项后面添加。other_args="--graph=/docker --insecure-registry=192.168.1.234:5000"]
-----------------------------------------------------------------------------------------------------------
[root@localhost ~]# vim /etc/sysconfig/docker
.......
OPTIONS='--selinux-enabled --log-driver=journald'
改为
OPTIONS='--selinux-enabled --log-driver=journald --insecure-registry=192.168.1.23:5000'
        
[root@localhost ~]# service docker restart
        
由于docker服务重启后,所有容器都会被关闭。所以需要在docker重启后再次启动容器
[root@localhost ~]# docker start my_registry
my_registry
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED              STATUS              PORTS                    NAMES
d8e98b1068cd        docker.io/registry:2.2   "/bin/registry /etc/d"   About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp   my_registry
        
再次提交到私有仓库
[root@localhost ~]# 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
      
上面命令执行无误后,就表示镜像已经push到私有仓库中去了。
查看私有仓库里的镜像(一定要保证下面能查看到仓库里有镜像!如果仓库里没有镜像,那么客户端机器就无法从该私有仓库下载镜像了)
[root@localhost ~]# curl -XGET http://192.168.1.23:5000/v2/_catalog    //即该私有仓库里有tomcat7镜像  
{"repositories":["tomcat7"]}
[root@localhost ~]# curl -XGET http://192.168.1.23:5000/v2/tomcat7/tags/list
{"name":"tomcat7","tags":["latest"]}
或者浏览器里访问(103.110.186.23是注册机的外网ip,iptables防火墙内开放5000端口访问):
http://103.110.186.23:5000/v2/_catalog
http://103.110.186.23:5000/v2/tomcat7/tags/list
    
现在可以将本地的tomcat7和192.168.1.23:5000/tomcat7镜像都删除,然后从私有仓库中下载
[root@localhost ~]# docker rmi tomcat7
[root@localhost ~]# docker rmi 192.168.1.23:5000/tomcat7
    
[root@localhost ~]# docker pull 192.168.1.23:5000/tomcat7
[root@localhost ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
192.168.1.23:5000/tomcat7   latest              5hc8a2ip413w        3 days ago          562.3 MB
    
-----------------------------------------------------------------------------
这样,也就可以在同一局域网内的其他机器上,从该私有仓库中pull下来该镜像。
比如在192.168.1.17服务器上拉取该私有仓库的tomcat镜像进行容器创建(注意,要在该机器的/etc/sysconfig/docker配置文件里添加--insecure-registry=192.168.1.23:5000参数)
[root@linux-node2 ~]# docker pull 192.168.1.23:5000/tomcat7
      
[root@linux-node2 ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
192.168.1.23:5000/tomcat7   latest              2ec9e2eb978a        3 days ago          562.3 MB
      
这样就搭建了Docker私有仓库,上面搭建的仓库是不需要认证的,我们可以结合nginx和https实现认证和加密功能。

注意查看镜像方法(docker pull registry:2.1.1):

# curl -XGET http://registry_ip:5000/v2/_catalog
# curl -XGET http://registry_ip:5000/v2/image_name/tags/list

docker学习笔记——镜像仓库制作(公有+私有+harbor)(代码片段)

...官方仓库1.官方镜像仓库1)web页面登录2)Linux命令行登录2.dockerhup镜像上传、下载1)镜像上传2)镜像下载3.镜像加速器1)阿里云加速器二、docker本地容器镜像仓库1.使用registry容器镜像实现本地非安全镜像仓库1)下载registry容器镜像2)创... 查看详情

docker学习笔记——镜像仓库制作(公有+私有+harbor)(代码片段)

...官方仓库1.官方镜像仓库1)web页面登录2)Linux命令行登录2.dockerhup镜像上传、下载1)镜像上传2)镜像下载3.镜像加速器1)阿里云加速器二、docker本地容器镜像仓库1.使用registry容器镜像实现本地非安全镜像仓库1)下载registry容器镜像2)创... 查看详情

docker创建私有仓库|数据卷和数据卷容器|容器互联操作详解(代码片段)

目录一、Docker私有仓库的操作1、创建私有仓库2、上传3、获取私有仓库列表4、测试私有仓库下载二、Docker数据卷和数据卷容器1、数据卷2、数据卷容器三、容器互联(使用centos镜像)一、Docker私有仓库的操作1、创建私有仓库do... 查看详情

docker容器私有仓库——harbor私有仓库的搭建

Docker容器私有仓库——Harbor私有仓库的搭建一、Harbor介绍1.Harbor概念2.Harbor的核心组件3.Harbor的优点二、Harbor搭建的环境准备1.当前Harbor仓库服务器系统版本2.查看当前docker版本三、Docker-compose安装1.下载Docker-compose2.给docker-compose文... 查看详情

docker学习笔记docker仓库数据卷数据卷容器,网络基础实操。高级网络配置学习

Docker学习笔记【4】高级网络配置实操,实战案例实验===========================================================================Docker学习笔记【2】Docker仓库实操,创建私有仓库,实操数据卷、数据卷容器,记录开始========================================... 查看详情

docker搭建本地私有仓库(代码片段)

...私有仓库搭建本地私有仓库搭建本地私有仓库#首先下载registry镜像dockerpullregistry#在daemon.json文件中添加私有镜像仓库地址vim/etc/docker/daemon.json"insecure-registries":["192.168.80.10:5000"],#添加,注意用逗号结尾"registr 查看详情

docker搭建私有仓库

1,下载仓库镜像。dockerpull registry  //主要用于搭建私有仓库的。 2,将宿主机端口映射到容器中去,容器的5000端口是不能更改的。dockerrun-d-p5000:5000registry//以registry镜像启动容器,监听5000端口 3,进入到私有仓库... 查看详情

docker容器学习梳理--容器登陆方法梳理(attachexecnsenter)

对于运行在后台的Docker容器,我们运维人员时常是有登陆进去的需求。登陆Docker容器的方式:1)使用ssh登陆容器。这种方法需要在容器中启动sshd,存在开销和攻击面增大的问题。同时也违反了Docker所倡导的一个容器一个进程的... 查看详情

docker的私有镜像仓库搭建

Docker的私有镜像仓库搭建一、配置镜像仓库服务器yum仓库1.安装docker环境包2.安装关于的dokcer的yum仓库3.测试yum仓库二、安装docker包三、下载registry镜像四、在docker客户端上修改daemon.json文件1.修改daemon.json文件2.重启相关服务五、... 查看详情

linux——docker私有仓库建立docker数据卷以及容器互联(代码片段)

目录标题私有仓库建立Docker数据卷容器互联私有仓库建立下载镜像dockerpullregistry在docker引擎终端设置vim/etc/docker/daemon.json"insecure-registries":["192.168.150.60:5000"],指定镜像仓库地systemctlrestartdocker.service创建registry容 查看详情

docker容器之搭建本地私有仓库(代码片段)

...一、本地私有仓库搭建的具体步骤1.首先下载registry镜像dockerpullregistry2.在daemon.json文件中添加私有镜像仓库的地址并重启。(下面那个是阿里的加速源,可以参考我之前的博客:docker的安装和镜像容器的基本操作!... 查看详情

docker学习-核心概念

...心概念镜像类似于虚拟机镜像,可以将它理解为一个面向docker引擎的的只读模板,是创建docker容器的基础容器类似于一个轻量级的沙箱,容器是从镜像的应用运行实例,可以将其启动开始停止删除,这些容器是相互隔离互不可见... 查看详情

docker容器:搭建私有仓库(代码片段)

Docker基础知识可以参考之前的文章Docker基础知识Docker的基本使用方法可以参考之前的文章Docker基本使用部署私有仓库先拉取仓库的镜像联网的情况下直接执行下边的命令会自动从官方仓库拉取镜像:[root@server1~]#dockerrun-d--n... 查看详情

搭建docker私有仓库

...册,上传需要到公共仓库注册。公共仓库网站:https://hub.docker.com怎么新建和使用公共仓库,请百度。这里关注私有仓库的搭建。那么怎么构建属于自己的私有仓库呢?可以使用registry镜像来搭建本地的私有仓库。具体步骤如下:... 查看详情

docker本地仓库和私有仓库(代码片段)

docker本地仓库和私有仓库一、docker本地仓库1.首先下载registry镜像2.在daemon.json文件中添加私有镜像仓库地址3.运行registry容器docker容器重启策略4.为镜像打标签5.上传到私有仓库6.列出私有仓库的所有镜像7.列出私有仓库的centos镜像... 查看详情

docker本地仓库和私有仓库(代码片段)

docker本地仓库和私有仓库一、docker本地仓库1.首先下载registry镜像2.在daemon.json文件中添加私有镜像仓库地址3.运行registry容器docker容器重启策略4.为镜像打标签5.上传到私有仓库6.列出私有仓库的所有镜像7.列出私有仓库的centos镜像... 查看详情

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

前面已介绍了docker很多知识点的操作记录,今天这里梳理下docker容器空间扩展的操作。默认情况下,docker容器的空间是10G。在实际生产环境下,对docker容器进行热扩容(动态扩容)是非常重要的一个需求。Docker容器动态扩展的优点... 查看详情

docker技术剖析--dockerfileandregistry(构建容器和私有仓库)

...输梅一段香          docker技术剖析--dockerfileandregistry(构建容器和私有仓库)一、根据Dockerfile构建出一个容器1、Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指... 查看详情