1、实战目的

搭建企业私有的镜像仓库,满足从开发环境推送和拉取镜像。当我们使用k8s来编排和调度容器时,操作的基本单位是镜像,所以需要从仓库去拉取镜像到当前的工作节点。本来使用公共的docker hub完全可以满足我们的需求,也非常方便,但是上传的镜像任何人都可以访问,其次docker hub的私有仓库又是收费的,所以从安全和商业两方面考虑,企业必须搭建自己的私有镜像仓库。

2、搭建私有仓库

2.1、生产证书

为了保证镜像传输安全,从开发环境向私有仓库推送和拉取镜像时,一般使用https的方式(备注:对于普通的http方式请大家参考官方文档:https://docs.docker.com/registry/insecure/#deploy-a-plain-http-registry 自己下去实战。),所以我们需要提供一个可信任的、知名的SSL/TLS证书,可以向知名的第三方证书颁发机构购买证书,也可以使用Let’s Encrypt生产免费的证书,还可以自己生产一个自签名证书。

由于没有购买真实的域名,无法和第三方证书颁发机构进行交互性验证,所以决定自己生产一个自签名证书,添加到私有仓库,然后让docker客户端信任此证书。

创建一个用于存储证书和私钥的目录certs

$ mkdir -p certs

生产证书和私钥

$ openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
-x509 -days 365 -out certs/domain.crt

注意提前想好域名(如:registry.wuling.com),并将其作为CN,整个过程如图所示:



查看生成证书:

2.2、运行容器,启动镜像仓库

使用docker开源的Registry:2镜像,如图:



执行下面命令:

$ docker run -d \
--restart=always \
--name registry.wuling.com \
-v `pwd`/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
-p 443:443 \
registry:2
参数 说明
-d 后台静默运行容器。
-restart 设置容器重启策略。
-name 命名容器。
-v 挂载host的certs/目录到容器的/certs/目录。
-e REGISTRY_HTTP_ADDR 设置仓库主机地址格式。
-e REGISTRY_HTTP_TLS_CERTIFICATE 设置环境变量告诉容器证书的位置。
-e REGISTRY_HTTP_TLS_KEY 设置环境变量告诉容器私钥的位置。
-p 将容器的 443 端口映射到Host的 443 端口。

如图所示:



丛上图可以看到,服务端私有仓库已经正常运行起来了!!!

3、实战(从服务器和开发环境分别推送和拉取镜像)

3.1 服务器(私有仓库所在主机)

3.1.1、下载并重命名镜像

镜像的完整命名格式:[registry-host]:[port]/[username]/[imagename],当我们使用docker push的时候,docker会自动识别[registry-host]部分为容器镜像仓库地址。

使用docker tag重命名镜像:

docker pull justmine/helloworldapi:v2.2
docker tag justmine/helloworldapi:v2.2 registry.wuling.com/justmine/helloworldapi:v2.2

3.1.2、推送镜像到私有仓库



什么情况?哦哦哦!!!域名是我们杜撰的,需要将与IP映射关系写入hosts文件。



再次推送,如下:

x509: certificate signed by unknown authority

又是什么情况?哦哦哦!!!原来系统不信任我们颁发的证书,好吧,不知名就不信任,那我们就主动宣布此证书是值得信任的!!!

为docker client安装证书,命令如下:

# 假如:仓库域名为=》registry.wuling.com,端口为=》8000,需要信任的证书地址为=》/root/certs/domain.crt
# 1. 老版本docker
$ mkdir -p /etc/docker/certs.d/registry.wuling.com
$ cp /root/certs/domain.crt /etc/docker/certs.d/registry.wuling.com/ca.crt
# 2. 新版本docker
$ mkdir -p /etc/docker/certs.d/registry.wuling.com:8000
$ cp /root/certs/domain.crt /etc/docker/certs.d/registry.wuling.com:8000/ca.crt

备注:根据docker版本情况,大家按照这两种方法添加信任就行了。



再次推送:



成功了!!!

3.1.3、通过浏览器查看仓库概况

仓库镜像目录:

https://registry.wuling.com/v2/_catalog



镜像详情

https://registry.wuling.com/v2/justmine/helloworldapi/tags/list

3.2 其他宿主机(开发环境Windows主机)

3.2.1 推送镜像到私有仓库

docker push registry.wuling.com/justmine/healthchecksapi:v1.5



同理:为了让当前Windows主机上运行的docker信任此证书,我们只需要在Windows主机上安装此证书,右键点击【安装证书】,选择【本地主机】,选择【受信任的根证书】,添加证书即可。同时将域名与私有仓库主机ip的映射关系写入到Windows主机的hosts文件。

重启docker,再次推送:



哎,终于成功了,不容易啊!!!

3.2.2 拉取镜像

docker pull registry.wuling.com/justmine/healthchecksapi:v1.5

3.2.3、通过浏览器查看仓库概况

仓库镜像目录:

https://registry.wuling.com/v2/_catalog



镜像详情

https://registry.wuling.com/v2/justmine/healthchecksapi/tags/list

到目前为止,能够满足企业需求的私有仓库正式搭建完成。

下一篇,我们将实战k8s使用我们的私有仓库拉取镜像

源码参考:https://github.com/justmine66/k8s.ecoysystem.apps

详解docker实战之搭建私有镜像仓库 - kurbernetes的更多相关文章

  1. [转]Ubuntu18.04下使用Docker Registry快速搭建私有镜像仓库

    本文转自:https://blog.csdn.net/BigData_Mining/article/details/88233015 1.背景 在 Docker 中,当我们执行 docker pull ...

  2. 使用docker Registry快速搭建私有镜像仓库

    当我们执行docker pull xxx的时候,docker默认是从registry.docker.com这个地址上去查找我们所需要的镜像文件,然后执行下载操作.这类的镜像仓库就是docker默认的公 ...

  3. 【Docker】(4)搭建私有镜像仓库

    [Docker](4)搭建私有镜像仓库 说明 1. 这里是通过阿里云,搭建Docker私有镜像仓库. 2. 这里打包的镜像是从官网拉下来的,并不是自己项目创建的新镜像,主要测试功能 一.搭建过程 首先 ...

  4. 搭建私有镜像仓库registry 2.0

    搭建 docker run -d -p 5000:5000 --restart=always --name registry2 registry:2 就可以将自己的镜像 push到这个私有的镜像仓库 ...

  5. docker之搭建私有镜像仓库和公有仓库

    一.搭建私有仓库 1.docker pull registry #下载registry镜像并启动 2. docker run -d -v /opt/registry:/var/lib/registry ...

  6. 手动搭建Docker本地私有镜像仓库

    实验环境:两个Centos7虚拟机,一个是Server,用作客户端,另一个是Registry,用作Docker私有镜像仓库. 基础配置 查看一下两台虚拟机的IP地址 Server的IP地址是192.1 ...

  7. Docker深入浅出系列 | 5分钟搭建你的私有镜像仓库

    Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干货,会根据本人理解去做阐述,具体官方概念可以查阅官方 ...

  8. Docker 私有镜像仓库的搭建及认证

    DockerHub 为我们提供了很多官方镜像和个人上传的镜像,我们可以下载机构或个人提供的镜像,也可以上传我们自己的本地镜像,但缺点是: 由于网络的原因,从 DockerHub 下载和上传镜像速度可能 ...

  9. Docker 构建私有镜像仓库

    在使用Docker一段时间后,往往会发现手头积累了大量的自定义镜像文件,这些文件通过公有仓库进行管理并不方便,另外有时候只是希望在内部用户之间进行分享,不希望暴露出去.这种情况下,就有必要搭建一个本地 ...

随机推荐

  1. why does turn off button means hibernate on my win8

    when I upgrated my laptop's system to win8.*,I found it's hibernate when I clicked turn off button. ...

  2. ASP.NET的一次奇遇:UserControl写成Control引发的w3wp进程崩溃

    昨天在写代码中一不小心将UserControl写成了Control,将原来应该继承自System.Web.UI.UserControl的用户控件,比如下面的BlogStats: <%@ Cont ...

  3. 海蜘蛛网络科技官方网站 :: 做最好的中文软路由 :: 软件路由器 :: 软路由 :: 软件路由 :: RouterOs

    海蜘蛛网络科技官方网站 :: 做最好的中文软路由 :: 软件路由器 :: 软路由 :: 软件路由 :: RouterOs 企业简介 武汉海蜘蛛网络科技有限公司成立于2005年,是一家专注于网络新技术研 ...

  4. IT之光

    作为一个IT界的新新人才,现在拥有第一个博客,可以在这里学习和分享IT方面的知识和技术.

  5. 初识 SpringMVC

    1.Spring MVC 的工作流程 1.web请求被 前端控制器(DispatcherServlet)拦截 2.DispatcherServlet调用 映射处理器(HandelerMapping)查 ...

  6. Mac OS 下安装nvm

    关于安装: curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh 安装完成后关闭终端,重新打开终端输 ...

  7. java基础-反射(细节)

    java面试题--java反射机制? Java反射机制的作用:1)在运行时判断任意一个对象所属的类.2)在运行时判断任意一个类所具有的成员变量和方法.3)在运行时任意调用一个对象的方法4)在运行时构造 ...

  8. 【T04】开发并使用应用程序框架

    1.TCP/IP应用程序分为 TCP服务器 TCP客户端 UDP服务器 UDP客户端 2.构建框架库是比较简单的一件事,主要就是对socket编程.

  9. MFC+WinPcap编写一个嗅探器之四(获取模块)

    这一节主要介绍如何获取设备列表,比较简单 获取设备列表主要是在CAdpDlg中完成,也就是对应之前创建的选择适配器模块,如图: 当打开选择适配器对话框后,在列表视图控件中显示当前主机所有适配器及适配器 ...

  10. 使用jQuery操作input的value值

    表单控件是我们的重中之重,因为一旦牵扯到数据交互,离不开form表单的使用,比如用户的注册登录功能等 那么通过上节知识点我们了解到,我们在使用jquery方法操作表单控件的方法: $(selector ...