一文教会你如何高效地搭建Docker私有仓库

目录
  • 前言
  • 1. 私有仓库
  • 2. 搭建私有仓库
    • 环境部署
    • 自建仓库
  • 3. 使用 TLS 证书
    • 生成证书
    • 基本身份验证
  • 4. Nginx 反向代理仓库
  • 5. 可视化私有仓库
  • 总结

前言

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,安全超文本传输协议),命令行中使用的是 HTTP(Hyper 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/ 目录下,示例代码如下:

(5)Docker-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 代理仓库。

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

到此这篇关于如何高效地搭建Docker私有仓库的文章就介绍到这了,更多相关Docker私有仓库搭建内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Docker私有仓库的搭建和界面化管理详解

    一.关于Registry 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去. 但是有时候我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像.这个可以通过开源软件Registry来达成目的. Registry在github上有两份代码:老代码库和新代码库.老代码是采用python编写的,存在pull和push的性能问题,出到0.9.1版本之后就标志为deprecated,不再继续开发. 从2.0版本开始就到在

  • 详解docker私有仓库搭建与使用实战

    hub.docker.com上可以保存镜像,但是网速相对较慢,在内部环境中搭建一个私有的公共仓库是个更好的方案,今天我们就来实战搭建私有docker仓库吧: 环境规划 需要两台机器:docker私服仓库的server和使用docker的普通机器,这两个机器都是ubuntu16版本的server,ip信息如下: 机器名 ip 功能 docker-registry 192.168.119.148 docker私有仓库服务器 docker-app 192.168.119.155 运行docker服务的

  • 从零搭建docker私有仓库的步骤

    实验环境: centos7 64位 ubuntu16.04 64位(用于测试私有仓库) 本文分为四个部分: 第一部分: 安装docker 第二部分: 镜像的操作 第三部分: 容器的操作 第四部分: 私有仓库的创建 第一部分: 安装docker # 通过yum源安装docker sudo yum -y install docker # 启动docker sudo systemctl start docker # 开机自启 sudo systemctl enable docker 第二部分: 镜像的

  • Docker搭建本地私有仓库的详细步骤

    和Mavan的管理一样,Dockers不仅提供了一个中央仓库,同时也允许我们使用registry搭建本地私有仓库.使用私有仓库有许多优点: 一.节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可: 二.提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用. 接下来我们就大致说一下如何在本地搭建私有仓库. 环境准备 环境:两个装有Docker的Ubuntu虚拟机 虚拟机一:192.168.112.132 用户开发机 虚拟

  • 搭建Docker私有仓库(自签名方式)

    为了能集中管理我们创建好的镜像,方便部署服务,我们会创建私有的Docker仓库.通读了一遍官方文档,Docker为了确保安全使用TLS,需要CA认证,认证时间长的要钱啊,免费过期时间太短,还是用自签名比较简单. 准备环境 环境:两台Centos 7 虚拟机 >服务器IP:10.57.220.244 ,作为Docker仓库使用 >客户端IP:10.57.220.220 ,作为客户端来上传或拉取镜像 >域名:lpxxn.com 两台机器上均已安装好Docker 版本为 17.03.0-ce

  • docker私有仓库的搭建和使用详解

    1.下载仓库镜像 docker pull registry 2.创建私有仓库容器-d表示后台启动 docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry 3.防火墙解除5000端口限制 firewall-cmd --zone=public --add-port=5000/tcp --permanent 4.验证私有仓库是否启动成功 http://192.3.8.12:5000/v2 5.打包镜像 do

  • 详解Docker私有仓库最简便的搭建方法

    Doker 在业界的应用越来越广泛,怎么用户管理好自己的镜像.容器等就是一个迫在眉睫的任务. 由于业务需要,我们需要在搭建一套自己的 Docker 私有镜像仓库,网上找了很多,都是说要 pull 一个 regisitry 镜像,然后通过这个镜像启动一个容器来运行仓库应用,我按照官网的说明 pull 了一个 registry ,但是启动的时候有报错,具体是什么就不细说了,反正是有错,于是开始研究别的方法,别说还真找到了一个,而且是我发现的最简便的办法,我不知道我是不是国内第一个发现的,但我应该是第

  • 一文教会你如何高效地搭建Docker私有仓库

    目录 前言 1. 私有仓库 2. 搭建私有仓库 环境部署 自建仓库 3. 使用 TLS 证书 生成证书 基本身份验证 4. Nginx 反向代理仓库 5. 可视化私有仓库 总结 前言 Docker 仓库用于保存 Docker 镜像,分为公有仓库与私有仓库. 公有仓库就是 Docker Hub 一类供所有 Docker 用户使用的 Docker 仓库. 私有仓库是指由个人或企业搭建的 Docker 仓库,供其自身使用,是非公开的. 本篇文章将对 Docker 私有仓库及其相关内容进行详解. 1.

  • docker-compose快速搭建docker私有仓库的步骤

    创建docker-compose.yml并填入如下内容 version: '3' services: registry: restart: always image: registry:2 ports: - 5000:5000 environment: REGISTRY_HTTP_TLS_CERTIFICATE: /certs/registry.crt REGISTRY_HTTP_TLS_KEY: /certs/registry.key REGISTRY_AUTH: htpasswd REGIS

  • Harbor搭建Docker私有仓库的实现方法

    1 开源的仓库管理工具Harbor Harbor是一个由CNCF托管的开源的Docker镜像仓库管理工具,我们可以通过它快速的建立起自己的私有仓库.当然,搭建私有仓库的选择很多,如Docker官方提供的registry镜像或者Nexus等.但Harbor不失为一种不错的选择. 2 安装 Harbor的安装方式也很多,如通过命令行安装.Helm安装等,本文演示通过命令行的脚本安装. 2.1 安装Docker和Docker-compose 首先Docker是要安装的,Harbor是通过一堆容器来启动

  • 如何搭建配置Docker私有仓库的实现步骤

    目录 前言 ️ 1.Docker容器三要素 ️ 2.本地私有仓库搭建 2.1 拉取私有仓库镜像 2.2 启动私有仓库容器 2.3 设置信任 2.4 上传本地镜像 2.5 重新拉取镜像 ️ 3.网络私有仓库搭建 3.1 选择实例 3.2 创建命名空间 3.3 创建镜像仓库 3.4 上传镜像 3.5 镜像日常维护管理 前言 搭建docker私有仓库,可以实现一个镜像,多次使用,镜像下载速度快等好处 ️ 1.Docker容器三要素 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Ap

  • CentOS7.2服务器上搭建Docker私有镜像仓库操作示例

    本文实例讲述了CentOS7.2服务器上搭建Docker私有镜像仓库操作.分享给大家供大家参考,具体如下: 鉴于国内pull镜像的速度较慢,很有必要搭建docker私有或者本地镜像仓库. 安装docker # yum -y install docker # systemctl start docker && systemctl enable docker 使用自签名进行安全认证 创建存放证书和密钥的certs目录 # mkdir -p /docker/certs # chcon -Rt s

  • 利用Docker搭建Nexus私有仓库实现Maven私服

    目录 一.前言 二.Nexus搭建 三.配置仓库 3.1 配置加速库 3.2 创建私有仓库 四.配置权限 五.上传Jar包 六.使用Jar包 一.前言 相信国内的小伙伴都经历过,Gradle.Maven.NPM下拉速度过慢的情况.我们一般的做法是配置阿里云这样的中央仓库.加速问题是可以采用这种方式解决,但如果是团队内部的库想进行上传分发,传到Maven Central这种共用的Maven仓库就不太合适了.那样保密性和时效性都将收到破坏.所以在团队内部,我们一般都会搭建局域网内私有的中央仓库.支撑

  • Docker容器搭建本地私有仓库详情

    目录 前言 一.首先下载registry镜像 二.在daemon.json文件中添加私有镜像仓库的地址并重启 三.创建registry容器并开放端口 四.给镜像打标签后上传到私有仓库 五.获取私有仓库列表查看是否上传成功 六.验证:从私有仓库下载镜像 前言 Docker 官方提供了一个搭建私有仓库的镜像 registry ,运行该镜像的容器并且对外暴露5000端口就ok了.通常我们在docker拉取的镜像都是在docker hub或quay.io等公有仓库获取,那么在实际工作中,每个公司如果使用

随机推荐