详解docker实战之搭建私有镜像仓库 - kurbernetes
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的更多相关文章
- [转]Ubuntu18.04下使用Docker Registry快速搭建私有镜像仓库
本文转自:https://blog.csdn.net/BigData_Mining/article/details/88233015 1.背景 在 Docker 中,当我们执行 docker pull ...
- 使用docker Registry快速搭建私有镜像仓库
当我们执行docker pull xxx的时候,docker默认是从registry.docker.com这个地址上去查找我们所需要的镜像文件,然后执行下载操作.这类的镜像仓库就是docker默认的公 ...
- 【Docker】(4)搭建私有镜像仓库
[Docker](4)搭建私有镜像仓库 说明 1. 这里是通过阿里云,搭建Docker私有镜像仓库. 2. 这里打包的镜像是从官网拉下来的,并不是自己项目创建的新镜像,主要测试功能 一.搭建过程 首先 ...
- 搭建私有镜像仓库registry 2.0
搭建 docker run -d -p 5000:5000 --restart=always --name registry2 registry:2 就可以将自己的镜像 push到这个私有的镜像仓库 ...
- docker之搭建私有镜像仓库和公有仓库
一.搭建私有仓库 1.docker pull registry #下载registry镜像并启动 2. docker run -d -v /opt/registry:/var/lib/registry ...
- Docker——Registry搭建私有镜像仓库
前言 在 Docker 中,当我们执行 docker pull xxx 的时候,它实际上是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为我们提供的公共仓库 ...
- 手动搭建Docker本地私有镜像仓库
实验环境:两个Centos7虚拟机,一个是Server,用作客户端,另一个是Registry,用作Docker私有镜像仓库. 基础配置 查看一下两台虚拟机的IP地址 Server的IP地址是192.1 ...
- 基于 registry 搭建 Docker 私有镜像仓库
今天主要介绍使用 registry 来搭建 Docker私有镜像仓库,方便在公司内部项目中使用,registry 也是 Docker 官方提供的一个镜像,操作也很简单. dockerhub: http ...
- 搭建docker镜像仓库(二):使用harbor搭建本地镜像仓库
目录 一.系统环境 二.前言 三.Harbor 四.使用harbor搭建私有镜像仓库 4.1 环境介绍 4.2 k8smaster节点安装配置harbor 4.2.1 安装harbor离线包 4.2. ...
随机推荐
- Spring Boot + Websocket + Thymeleaf + Lombok
https://github.com/guillermoherrero/websocket 验证错误消息文件名字:是默认名ValidationMessages.properties,编译后存放在cla ...
- Ubuntu常用命令总结
1. Ubuntu切换到root用户的方法 sudo su or sudo -i 退出root用户 exit 2. mv:移动文件或文件夹 移动文件和文件夹只有只有四种可能: 文件移动到文件(文件重命 ...
- yum安装指定版本的软件包的方法
yum默认都是安装最新版的软件,这样可能会出一些问题,或者我们希望yum安装指定(特定)版本(旧版本)软件包.所以,就顺带分享yum安装指定(特定)版本(旧版本)软件包的方法. 过程如下:假设这里是我 ...
- consoleWriter.go
package blog4go import ( "fmt" "os" "time" ) // ConsoleWriter is a con ...
- 【bzoj 1414】对称的正方形 单调队列+manacher
Description Orez很喜欢搜集一些神秘的数据,并经常把它们排成一个矩阵进行研究.最近,Orez又得到了一些数据,并已经把它们排成了一个n行m列的矩阵.通过观察,Orez发现这些数据蕴涵了一 ...
- bzoj3631[JLOI2014 松鼠的新家 倍增lca+差分
裸的树上差分+倍增lca 每次从起点到终点左闭右开,这就有一个小技巧,要找到右端点向左端点走的第一步,然后差分就好了 #include<cstdio> #include<cstrin ...
- BZOJ_1954_Pku3764 The xor-longest Path_Trie树
Description 给定一棵n个点的带权树,求树上最长的异或和路径 把根到点路径上点权异或和求出来,然后变成了Trie树裸题. 代码: #include <cstdio> #inc ...
- BZOJ_3872_[Poi2014]Ant colony_dfs
BZOJ_3872_[Poi2014]Ant colony_dfs Description There is an entrance to the ant hill in every chamber ...
- Spring IOC(二)容器初始化
本系列目录: Spring IOC(一)概览 Spring IOC(二)容器初始化 Spring IOC(三)依赖注入 Spring IOC(四)总结 目录 一.ApplicationContext接 ...
- com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after co ...