Docker从理论到实践(六)------搭建和使用本地私有Docker镜像仓库

前言

Docker仓库(Repository)是集中存放镜像的地方。

一个容易与之混淆的概念是注册服务器(Registry)。实际上注册服务器是存放仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面又可以有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。

在使用docker一段时间后,我们会发现手头积累了大量的自定义镜像文件,这些文件通过公有仓库进行管理并不十分方便,此外有时候我们也只是希望内部用户之间进行分享。在这种情况下,就有必要搭建一个本地的私有仓库服务器。

和maven管理一样,docker不仅提供了一个中央仓库,同时也允许我们使用registry搭建本地私有仓库。使用私有仓库有许多有点:

  • 节省网络带宽,针对每个镜像不要都去中央仓库里下载,只需要从私有仓库中下载即可;
  • 提供镜像资源利用,针对公司内部开发,不能联网情况下,有一些使用到的镜像可以推送到本地的私有仓库中,以供内部开发人员便捷下载使用。

接下来,我们将尝试着在本地搭建docker的私有仓库。


1、环境准备

虚拟机 IP地址 描述
master03(CentOS7.2) 192.168.0.145

用途1:开发用机

用途2:作为docker私有仓库

环境准备好后,接下来我们就开始搭建docker私有镜像仓库。


2、搭建私有docker镜像仓库

  • 首先,要确保我们已经在目标主机上安装好docker。

  • 然后,在虚拟机上下载registry镜像:
[root@master03 /]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
Digest: sha256:8004747f1e8cd820a148fb7499d71a76d45ff66bac6a29129bfdbfdc0154d146
Status: Image is up to date for registry:latest
  •  下载完成后,我们通过该镜像启动一个容器。
docker run -d -p 5000:5000 registry

默认情况下,该命令将运行一个Registry应用的容器,并绑定到本地宿主机的5000端口。

一般情况下我们并不会使用上边的命令去启动registry容器,该命令会将仓库存放于容器/tmp/regitry目录下,这样如果容器被删除,则存放于容器中的镜像也将被删除。

  • 接下来,我们将通过如下配置来指定本地一个目录挂载到容器的/tmp/registry下。
[root@master03 registry]# docker run -itd -v /opt/data/registry:/tmp/registry -p 5000:5000 --restart=always --name registry registry:latest 
becb7857f5d96695d2d10ab4e87849c2faaa6516f89943ec90c79447299640dd
[root@master03 registry]# 

参数说明:

  • -itd:在容器中打开一个伪终端进行交互操作,并在后台运行;
  • -v:把宿主机的/opt/data/registry目录绑定到容器的/var/lib/registry目录(这个目录是registry容器中国存放镜像文件的目录),来实现数据的持久化;
  • -p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了;
  • --restart=always:这个是重启策略,假如这个容器异常退出就会自动重启容器;
  • --name registry:创建容器命名为registry,可以随便命名;
  • registry:latest:这个是刚pull下来的镜像;

测试一下镜像仓库中所有的镜像:

[root@master03 registry]# curl http://127.0.0.1:5000/v2/_catalog
{"repositories":[]}

可以看到仓库是空的,因为刚运行,里边没有任何镜像内容。


3、测试镜像仓库

【1】配置你的DaoCloud的Docker镜像源加速器

{
        "registry-mirrors": ["http://f1361db2.m.daocloud.io"]
}

【2】从docker公有仓库上下载在一个ubuntu镜像

【3】为源镜像打上标签v14.04

使用docker tag命令将这各源镜像标记为192.168.0145:5000/ubuntu:v14.04

命令格式:

docker tag IMAGE[:TAG] [REGISTORY/][USERNAME/]NAME[:TAG]

打完标签后:

[root@master03 registry]# docker tag ubuntu:14.04 192.168.0.145:5000/ubuntu:v14.04
[root@master03 registry]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
192.168.0.145:5000/ubuntu   v14.04              2c5e00d77a67        2 months ago        188MB
ubuntu                      14.04               2c5e00d77a67        2 months ago        188MB
registry                    latest              f32a97de94e1        5 months ago        25.8MB
  •  ubuntu 这个是源镜像,即刚pull下来的镜像文件
  • 192.168.0.145:5000/ubuntu:v14.04  这个是目标镜像,也就是registry私有镜像服务器的IP地址和端口;

【4】上传到镜像服务器/docker本地私有仓库

[root@master03 registry]# docker push 192.168.0.145:5000/ubuntu:v14.04
Error response from daemon: Get https://192.168.0.145:5000/v2/: http: server gave HTTP response to HTTPS client
[root@master03 registry]# 
  • 注意:上传时报错了,因为Docker从1.3.X之后默认docker registry使用的是https,所以当用docker pull/push命令下载、上传远程镜像时,如果远程docker registry是非https的时候就会报上面的错误。我们需要修改一下docker的镜像源文件配置:
{
        "registry-mirrors": ["http://f1361db2.m.daocloud.io"],
        "insecure-registries": [ "192.168.0.145:5000"]
}

添加本地私有镜像服务器的地址,然后重启docker服务。现在只要任意一台部署了docker服务,并在镜像源文件中配置了“ "insecure-registries": [ "192.168.0.145:5000"] ”这个私有仓库地址的主机就能够下载这个目标镜像了。

  • 再次上传目标镜像:

这次终于上传成功。

 【5】测试下载镜像

镜像已经能够成功上传,接下来我们来测试一下从reigistry服务器上下载刚才上传的镜像。

  • 先删除本地宿主机上的192.168.0.145:5000/ubuntu:v14.04这个镜像。

这步删除镜像操作要谨慎,依次把关联镜像全部删除完了。 

  • 然后,从registry服务器上下载我们的目标镜像192.168.0.145:5000/ubuntu:v14.04。

 可以看到,目标镜像已经成功地从本地私有仓库中拉下来了。

下载后,我们还可以添加一个更加通用的标签ubuntu:v14.04.

docker tag 192.168.0.145:5000/ubuntu:v14.04 ubuntu:v14.04

四、列出所有镜像

  • 列出本地私有仓库的所有镜像:
[root@master03 registry]# curl http://192.168.0.145:5000/v2/_catalog
{"repositories":["ubuntu"]}

可以看到,目前私有仓库中只有ubuntu一个镜像。

  • 列出ubuntu镜像有哪些tag标签:
[root@master03 registry]# curl http://192.168.0.145:5000/v2/ubuntu/tags/list
{"name":"ubuntu","tags":["v14.04"]}

可以知道,目前我们的本地私有仓库中存有一个标签为v14.04的ubuntu镜像。


愿你就像早晨八九点钟的太阳,活力十足,永远年轻。

原创文章 104 获赞 154 访问量 13万+

猜你喜欢

转载自blog.csdn.net/qq_27706119/article/details/98855763