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镜像。
愿你就像早晨八九点钟的太阳,活力十足,永远年轻。
Docker从理论到实践(六)------搭建和使用本地私有Docker镜像仓库相关推荐
- 【Docker技术入门与实践(第2版)】Docker入门_学习笔记
第一章 1 Docker入门须知 1.1 Docker基本知识 Docker是基于Go语言实现的开源容器项目,诞生于2013年年初,最初发 起者是dotCloud公司.Docker自开源后受到广泛的关 ...
- docker进阶-搭建私有企业级镜像仓库Harbor
为什么要搭建私有镜像仓库 对于一个刚刚接触Docker的人来说,官方的Docker hub是用于管理公共镜像.既然官方提供了镜像仓库我们为什么还要去自己搭建私有仓库呢?虽然也可以托管私有镜像.我们 ...
- 打docker镜像_分分钟搞定阿里云私有Docke镜像仓库的搭建
前言: 所谓私有仓库,也就是在本地(局域网)搭建的一个类似公共仓库的东西,搭建好之后,我们可以将自己的镜像提交到私有仓库中.这样我们既能使用 Docker 来运行我们的项目镜像,也避免了商业项目暴露 ...
- 分分钟搞定阿里云私有Docke镜像仓库的搭建
前言: 所谓私有仓库,也就是在本地(局域网)搭建的一个类似公共仓库的东西,搭建好之后,我们可以将自己的镜像提交到私有仓库中.这样我们既能使用 Docker 来运行我们的项目镜像,也避免了商业项目暴露出 ...
- Docker Harbor 2.3.4 集群 双主复制高可用镜像仓库
下面操作大部分是双节点同时执行一样的命令,不同的地方我会进行标注和特殊说明 文章目录 一.环境准备 1. 环境要求 2. 节点总览 3. 安装docker-compose 二.安装harbor 2.1 ...
- nexus(maven仓库)搭建配置maven本地私有仓库
一 私服的作用,为什么要使用私服? 内网访问,内网团队使用一个服务缓存节省外网宽带. 微服务开发中加速 Maven 项目构建,加快团队合作,提高工作效率 允许上传和下载私有库,并且不被外部访问,安全 ...
- 你必须知道的Docker镜像仓库的搭建
近期工作中发现用到的容器镜像越来越多(不多的时候没考虑过镜像仓库的问题),同一个容器镜像也存在多个版本,那么镜像仓库的搭建需求就涌现出来,本文就目前的几个常用镜像仓库的搭建进行介绍,我们可以根据需要选 ...
- DDD(Domain Driven Design) 领域驱动设计从理论到实践 四
- 接上 SOA 架构 面向服务架构(Service Oriented Architecture,SOA)对于不同的人来说意思不同.这里梳理一下SOA原则: 服务契约 : 通过契约文档,服 ...
- Webrtc从理论到实践七: 官方demo源码走读(peerconnection_server)
系列文章目录 Webrtc从理论到实践一:初识 Webrtc从理论到实践二: 架构 Webrtc从理论到实践三: 角色 Webrtc从理论到实践四: 通信 Webrtc从理论到实践五: 编译webrt ...
- Docker系列(二): 搭建docker镜像仓库-Nexus、Harbor
Docker介绍及环境搭建参考: Docker系列一: docker介绍&&安装(含离线安装) Docker系列(二): 搭建docker镜像仓库-Nexus.Harbor Docke ...
最新文章
- Xamarin.Forms XAML控件的公共属性
- java项目包创建顺序_java程序初始化的顺序
- MySQL的原理以及流程_MySQL的复制原理以及流程?
- Overlapped I/O模型深入分析[转]
- 威斯康星大学麦迪逊分校计算机专业排名,威斯康星大学麦迪逊分校的计算机专业如何?...
- 《终身成长》读书笔记(part7)--社会互动是用来学习和享受的,而不是用来评判别人的
- sd卡和sdio sdhc_想买TF卡,那些标注卡上的参数看懂了么?
- fatal error: libmemcached/memcached.h: No such file or directory
- word文档通配符换行_Word效率指南(二)
- mysql自增不连续的问题 ALTER TABLE `表名` AUTO_INCREMENT =1;
- Linux安装软件提示MD5不同,如何在Debian/Ubuntu Linux中校验已安装软件包的MD5和?
- 使用腾讯云sms实现短信验证功能
- vue实现录音功能js-audio-recorder带波浪图
- 京东数科Java一面面经
- MATLAB 迷宫游戏
- 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
- Windows远程连接电脑怎么配置远程音频
- mysql数据库索引的科普
- 安卓下Kindle导入本地电子书的方法
- 计算机网络-网络层(IPV4地址,网络转化技术NAT,子网划分和子网掩码,无分类编址CIDR,构成超网,最长前缀匹配)
热门文章
- CompletableFuture 使用详解
- 冒泡排序(C#)实现
- [转]C#反射,根据反射将数据库查询数据和实体类绑定,并未实体类赋值
- 云数据库MySQL5.7单机基础版上线
- 未来人在数据分析中的角色转变
- 《善用佳软:高效能人士的软件应用之道》一2.3 思维导图:思想脉络的逻辑结构...
- Linux 第12天: (08月19日) 练习和作业
- 基于Maven的S2SH(Struts2+Spring+Hibernate)框架搭建
- autofs rhel7
- iptables命令结构之匹配扩展