【Docker 那些事儿】如何高效地搭建 Docker 私有仓库_用docker如何创建私有部署

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

在这里插入图片描述

文章目录


在这里插入图片描述

🌟 前言

Docker 仓库用于保存 Docker 镜像分为公有仓库与私有仓库。

公有仓库就是 Docker Hub 一类供所有 Docker 用户使用的 Docker 仓库。

私有仓库是指由个人或企业搭建的 Docker 仓库供其自身使用是非公开的。

本篇文章将对 Docker 私有仓库及其相关内容进行详解。

1. 私有仓库

Docker 镜像通常保存在 Docker HubDocker Hub 是目前最大的 Docker 镜像公有仓库由 Docker 官方人员进行维护其中的镜像可供所有用户下载使用。

在生产环境中通常公司会构建一些符合公司业务需求的镜像这些镜像因为是商业机密而不得上传至 Docker Hub只能供公司内部人员使用。

此时就需要在内网搭建一个 Docker 私有仓库来存储公司内部的镜像并确保内部人员可以不受网络限制快速地拉取或上传镜像。

镜像为 Docker 容器的运行基础容器是镜像的具体运行实例镜像仓库为镜像提供了可靠的存储空间镜像可以从公有或私有仓库拉取如图所示👇
在这里插入图片描述

2. 搭建私有仓库

🍇 环境部署

私有镜像仓库在企业中占有较高的使用率因此私有镜像仓库搭建技术显得尤为重要。

下面通过示例讲述私有镜像仓库的搭建方式与过程。

本节需要用到两台服务器一个作为私有镜像仓库另一个作为使用私有镜像仓库的 Docker 客户机。

此处以 CentOS 系统为例安装并启动 Docker服务器信息如表所示。
在这里插入图片描述

🍇 自建仓库

Docker Hub 为用户提供了完美的仓库镜像本示例将使用 Docker Hub 中的仓库镜像运行私有仓库。

首先从 Docker Hub 中拉取仓库镜像示例代码如下
在这里插入图片描述
以上示例成功拉取了 Docker 仓库的镜像。

下面将仓库镜像运行成为容器示例代码如下
在这里插入图片描述
以上示例将仓库镜像运行成了仓库容器并映射了宿主机的 5000 端口供 Docker 镜像的上传与下载。

其中--restart=always 表示容器停止时自动重启这条参数常用于生产环境中。

下面将镜像上传至刚刚创建的镜像仓库中示例代码如下
在这里插入图片描述
以上示例拉取了一个 BusyBox 镜像并为其添加了 tag 标识在尝试将镜像推送至私有仓库时发生了报错。

这是因为 Docker 默认支持 HTTPSHyper Text Transfer Protocol Secure安全超文本传输协议命令行中使用的是 HTTPHyper Text Transfer Protocol超文本传输协议。

修改 Docker 的启动参数使之允许以 HTTP 工作示例代码如下
在这里插入图片描述
以上示例修改了 Docker 配置文件中的启动参数并重启Docker。

下面接着尝试将镜像推送至私有仓库示例代码如下
在这里插入图片描述
以上示例成功将镜像推送到私有仓库。

如果想在其他宿主机上使用该仓库只需要修改配置文件重启 Docker 服务。

下面通过另外一台服务器拉取私有仓库中的镜像先修改 Docker 配置文件再重新读取并重新启动 Docker最后拉取镜像示例代码如下
在这里插入图片描述
以上示例成功从私有仓库下载了 BusyBox 镜像。

如此一个简单的私有仓库就搭建好了但安全系数较低镜像保存在容器中容器被删除后私有仓库以及仓库中的镜像也会一并删除数据无法保存。

3. 使用 TLS 证书

🍇 生成证书

想让仓库对外提供服务就需要配置用户认可的 TLSTransport Layer Security传输层安全证书否则仓库将无法正常使用。

目前很多代理商可以提供权威的证书用户可以自行选择。

下面演示自行生成 TLS 证书的方式及过程。

1使用 Openssl 工具生成私人证书文件。暂不演示

2创建带有 TSL 认证的仓库容器示例代码如下
在这里插入图片描述
上述示例运行了一个被命名为 registry-TLS 的容器并通过 REGISTRY_HTTP_TLS_CERTIFICATEREGISTRY_HTTP_TLS_KEY 两个参数启用仓库的证书支持。

3在每一台 Docker 客户端宿主机上配置域名解析使宿主机可以解析域名 “registry.Docker.com”并在宿主机中创建名称与域名名称相同的目录示例代码如下
在这里插入图片描述
4将证书 damain.crt 复制到要使用仓库的 Docker 宿主机并放到 /etc/Docker/certs.d/registry.Docker.com:5000/ 目录下示例代码如下
在这里插入图片描述
5Docker-1 是仓库的宿主机下面使用 Docker-2 推送镜像到私有仓库示例代码如下
在这里插入图片描述
以上示例成功将 Docker-2 中的镜像推送至私有仓库并通过 -k 选项关闭 curl 对证书的验证。

注意默认情况下证书只支持基于域名访问要使其支持 IP 地址访问需要修改配置文件 Openssl.cnf

CentOS7 系统中文件所在位置是 /etc/pki/tls/Openssl.cnf

在文件中的 [ v3_ca ] 部分添加 subjectAltName 选项示例代码如下
在这里插入图片描述
保存退出后重新生成证书即可使用。

🍇 基本身份验证

企业创建私有镜像仓库时为防止信息泄露通常会为仓库添加访问限制。

实现访问限制的最简单的方法是基本身份验证下面通过本机基本身份验证为仓库添加访问限制。

1创建用户密码文件示例代码如下
在这里插入图片描述
以上示例创建了用户密码文件 testusertestpassword

2运行仓库容器并指定 TLS 证书与身份验证目录示例代码如下
在这里插入图片描述
3尝试推送镜像示例代码如下
在这里插入图片描述
以上示例中镜像推送失败原因是没有基本身份验证凭据。

4通过用户名与密码登录示例代码如下
在这里插入图片描述
5登录之后再次推送镜像示例代码如下
在这里插入图片描述
以上示例在登录之后成功推送镜像到私有仓库。

4. Nginx 反向代理仓库

使用 Nginx 代理可以实现仓库的认证功能。

简而言之就是将 Nginx 服务器作为私有仓库的代理使用如图所示👇
在这里插入图片描述
1私有仓库的搭建采用前文中的方式首先在 Docker-1 中安装Nginx并修改其配置文件。

2然后通过 OpenSSL 工具生成私钥和证书示例代码如下
在这里插入图片描述
3使用 htpasswd 工具生成用户账户并设置密码示例代码如下
在这里插入图片描述
4启动 Nginx 服务示例代码如下
在这里插入图片描述
5访问测试

使用浏览器访问 https://192.168.56.146:443出现登录界面如图所示。
在这里插入图片描述
输入正确的账号密码即可访问仓库。

6在 Docker-2 登录仓库并推送镜像到仓库示例代码如下
在这里插入图片描述
以上示例在宿主机 Docker-2 中进行域名修改及证书复制之后将镜像成功推送至 Docker-1 的镜像私有仓库。

5. 可视化私有仓库

私有仓库虽然搭建十分简便但使用起来还是不够方便用户不能直观地看到仓库中的资源情况。
本节将部署基础的 UIUser Interface用户界面工具使用户可以在 Web 界面直观地看到仓库中的镜像以及镜像的版本等信息。

私有仓库的可视化需要 UI 工具 hyper/Docker-registry-web 来支持实现如此可提高仓库的可读性。

1同样采用拉取镜像的方式运行 hyper/Docker-registry-web示例代码如下
在这里插入图片描述2启动 hyper/Docker-registry-web 工具并连接私有仓库示例代码如下
在这里插入图片描述
以上示例启动了 hyper/Docker-registry-web 工具并连接了私有仓库此时已经可以通过访问 IP 地址与端口号查看私有仓库的信息。

其中--link 设置要连接的仓库容器-e 设置环境变量。

3拉取任意镜像到私有仓库中示例代码如下
在这里插入图片描述
使用浏览器访问私有仓库查看镜像信息如图所示。
在这里插入图片描述
查看镜像的标签、大小、构建历史等信息如图所示👇
在这里插入图片描述
👇
在这里插入图片描述

🌟 总结

本文章详细介绍了如何搭建 Docker 私有仓库如何通过配置证书为仓库添加安全级别与身份验证如何使用 Nginx 代理仓库。

相信大家已经通过本文章的学习已经熟练掌握了镜像私有仓库的相关知识并能够搭建出企业级的私有仓库。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Docker

“【Docker 那些事儿】如何高效地搭建 Docker 私有仓库_用docker如何创建私有部署” 的相关文章