前言

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镜像。


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

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

  1. 【Docker技术入门与实践(第2版)】Docker入门_学习笔记

    第一章 1 Docker入门须知 1.1 Docker基本知识 Docker是基于Go语言实现的开源容器项目,诞生于2013年年初,最初发 起者是dotCloud公司.Docker自开源后受到广泛的关 ...

  2. docker进阶-搭建私有企业级镜像仓库Harbor

    为什么要搭建私有镜像仓库   对于一个刚刚接触Docker的人来说,官方的Docker hub是用于管理公共镜像.既然官方提供了镜像仓库我们为什么还要去自己搭建私有仓库呢?虽然也可以托管私有镜像.我们 ...

  3. 打docker镜像_分分钟搞定阿里云私有Docke镜像仓库的搭建

    前言:  所谓私有仓库,也就是在本地(局域网)搭建的一个类似公共仓库的东西,搭建好之后,我们可以将自己的镜像提交到私有仓库中.这样我们既能使用 Docker 来运行我们的项目镜像,也避免了商业项目暴露 ...

  4. 分分钟搞定阿里云私有Docke镜像仓库的搭建

    前言: 所谓私有仓库,也就是在本地(局域网)搭建的一个类似公共仓库的东西,搭建好之后,我们可以将自己的镜像提交到私有仓库中.这样我们既能使用 Docker 来运行我们的项目镜像,也避免了商业项目暴露出 ...

  5. Docker Harbor 2.3.4 集群 双主复制高可用镜像仓库

    下面操作大部分是双节点同时执行一样的命令,不同的地方我会进行标注和特殊说明 文章目录 一.环境准备 1. 环境要求 2. 节点总览 3. 安装docker-compose 二.安装harbor 2.1 ...

  6. nexus(maven仓库)搭建配置maven本地私有仓库

    一 私服的作用,为什么要使用私服? 内网访问,内网团队使用一个服务缓存节省外网宽带. 微服务开发中加速 Maven 项目构建,加快团队合作,提高工作效率 允许上传和下载私有库,并且不被外部访问,安全 ...

  7. 你必须知道的Docker镜像仓库的搭建

    近期工作中发现用到的容器镜像越来越多(不多的时候没考虑过镜像仓库的问题),同一个容器镜像也存在多个版本,那么镜像仓库的搭建需求就涌现出来,本文就目前的几个常用镜像仓库的搭建进行介绍,我们可以根据需要选 ...

  8. DDD(Domain Driven Design) 领域驱动设计从理论到实践 四

    - 接上 SOA 架构 ​     面向服务架构(Service Oriented Architecture,SOA)对于不同的人来说意思不同.这里梳理一下SOA原则: 服务契约 : 通过契约文档,服 ...

  9. Webrtc从理论到实践七: 官方demo源码走读(peerconnection_server)

    系列文章目录 Webrtc从理论到实践一:初识 Webrtc从理论到实践二: 架构 Webrtc从理论到实践三: 角色 Webrtc从理论到实践四: 通信 Webrtc从理论到实践五: 编译webrt ...

  10. Docker系列(二): 搭建docker镜像仓库-Nexus、Harbor

    Docker介绍及环境搭建参考: Docker系列一: docker介绍&&安装(含离线安装) Docker系列(二): 搭建docker镜像仓库-Nexus.Harbor Docke ...

最新文章

  1. Xamarin.Forms XAML控件的公共属性
  2. java项目包创建顺序_java程序初始化的顺序
  3. MySQL的原理以及流程_MySQL的复制原理以及流程?
  4. Overlapped I/O模型深入分析[转]
  5. 威斯康星大学麦迪逊分校计算机专业排名,威斯康星大学麦迪逊分校的计算机专业如何?...
  6. 《终身成长》读书笔记(part7)--社会互动是用来学习和享受的,而不是用来评判别人的
  7. sd卡和sdio sdhc_想买TF卡,那些标注卡上的参数看懂了么?
  8. fatal error: libmemcached/memcached.h: No such file or directory
  9. word文档通配符换行_Word效率指南(二)
  10. mysql自增不连续的问题 ALTER TABLE `表名` AUTO_INCREMENT =1;
  11. Linux安装软件提示MD5不同,如何在Debian/Ubuntu Linux中校验已安装软件包的MD5和?
  12. 使用腾讯云sms实现短信验证功能
  13. vue实现录音功能js-audio-recorder带波浪图
  14. 京东数科Java一面面经
  15. MATLAB 迷宫游戏
  16. 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
  17. Windows远程连接电脑怎么配置远程音频
  18. mysql数据库索引的科普
  19. 安卓下Kindle导入本地电子书的方法
  20. 计算机网络-网络层(IPV4地址,网络转化技术NAT,子网划分和子网掩码,无分类编址CIDR,构成超网,最长前缀匹配)

热门文章

  1. CompletableFuture 使用详解
  2. 冒泡排序(C#)实现
  3. [转]C#反射,根据反射将数据库查询数据和实体类绑定,并未实体类赋值
  4. 云数据库MySQL5.7单机基础版上线
  5. 未来人在数据分析中的角色转变
  6. 《善用佳软:高效能人士的软件应用之道》一2.3 思维导图:思想脉络的逻辑结构...
  7. Linux 第12天: (08月19日) 练习和作业
  8. 基于Maven的S2SH(Struts2+Spring+Hibernate)框架搭建
  9. autofs rhel7
  10. iptables命令结构之匹配扩展