docker搭建企业级私有仓库

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 例如存放代码的github,gitlab ,存放jar包的maven这些中心仓库的作用是存储。同样镜像的存储也可以搭建属于自己的仓库,任由自己存取需要的镜像。

仓库是什么?


例如存放代码的github,gitlab ,存放jar包的maven这些中心仓库的作用是存储。同样镜像的存储也可以搭建属于自己的仓库,任由自己存取需要的镜像。


仓库(Repository)是存储和分发 Docker 镜像的地方。镜像仓库类似于代码仓库,Docker Hub 的命名来自 GitHub,Github 是我们常用的代码存储和分发的地方。同样 Docker Hub 是用来提供 Docker 镜像存储和分发的地方。


注册服务器是存放仓库的实际服务器


仓库则可以被理解为一个具体的项目或者目录;


注册服务器可以包含很多个仓库,每个仓库又可以包含多个镜像。例如我的镜像地址为 docker.io/centos,docker.io 是注册服务器,centos 是仓库名。 它们之间的关系如图

20210507223116168.png

公共镜像仓库


公共镜像仓库一般是 Docker 官方或者其他第三方组织(阿里云,腾讯云,网易云等)提供的,允许所有人注册和使用的镜像仓库。


Docker Hub 是全球最大的镜像市场,目前已经有超过 10w 个容器镜像,这些容器镜像主要来自软件供应商、开源组织和社区。大部分的操作系统镜像和软件镜像都可以直接在 Docker Hub 下载并使用。

私有镜像仓库


Docker 官方提供了开源的镜像仓库 Distribution,并且镜像存放在 Docker Hub 的 Registry 仓库下供我们下载。


Docker 官方开源的镜像仓库Distribution仅满足了镜像存储和管理的功能,用户权限管理相对较弱,并且没有管理界面。


如果你想要构建一个企业的镜像仓库,Harbor 是一个非常不错的解决方案。Harbor 是一个基于Distribution项目开发的一款企业级镜像管理软件,拥有 RBAC (基于角色的访问控制)、管理用户界面以及审计等非常完善的功能。

启动registry


我们可以使用以下命令启动一个本地镜像仓库:

/tmp]#docker pull registry
Using default tag: latest
latest: Pulling from library/registry
79e9f2f55bf5: Pull complete
0d96da54f60b: Pull complete
5b27040df4a2: Pull complete
e2ead8259a04: Pull complete
3790aef225b9: Pull complete
Digest: sha256:169211e20e2f2d5d115674681eb79d21a217b296b43374b8e39f97fcf866b375
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest

使用docker run启动容器:

[root@hadoop100 /]#docker run -d -p 5000:5000 -v registry:/var/lib/registry --restart=always --name myRegistry registry

-v 参数将registry的数据持久化(使用volume的具名卷)


验证: http://192.168.56.10:5000/v2/

ad7af0011d544e84b4b20b738c7b43a6.png

返回[]代表启动成功,此时我们就拥有了一个私有镜像仓库

docker tag重命名镜像


我们依旧使用 busybox 镜像举例。

]#docker tag ninesun0318/qms:v1.0.0 192.168.56.10:5000/ninesun0318/qms:v1.0.1

此时 Docker 为V1.0.0镜像创建了一个别名192.168.56.10:5000/ninesun0318/qms:v1.0.1,192.168.56.10:5000为主机名和端口,Docker 将会把镜像推送到这个地址。

推送镜像到本地仓库


[root@hadoop100 ~]#docker push 192.168.56.10:5000/ninesun0318/qms
Using default tag: latest
The push refers to repository [192.168.56.10:5000/ninesun0318/qms]
Get https://192.168.56.10:5000/v2/: http: server gave HTTP response to HTTPS client

把镜像推送到了本地镜像仓库。

从远端拉去镜像


注意几点:


远端和registry必须网络互通才可以拉去,如果是外网最好使用https。

ecbbecdd0e364affb874bcd63170856d.png

因为客户端push的时候采用https协议,而registry未使用https导致的。

39d57af0219341ba83fb5fabd2fb49d6.png

qms]#docker push 10.50.10.170:5000/ninesun0318/qms
Error response from daemon: invalid registry endpoint https://10.50.10.170:5000/v0/: unable to ping registry endpoint https://10.50.10.170:5000/v0/
v2 ping attempt failed with error: Get https://10.50.10.170:5000/v2/: tls: oversized record received with length 20527
 v1 ping attempt failed with error: Get https://10.50.10.170:5000/v1/_ping: tls: oversized record received with length 20527. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 10.50.10.170:5000` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/10.50.10.170:5000/ca.crt

解决: /etc/docker/daemon.json 加入如下信任主机。需要重启docker


 "insecure-registries":["192.168.56.10:5000"],

14b45a697fe641cab18b81408b551154.png

push成功

69984ab4c9c044a0b6007a749b63ecaf.png

安全


到这里我们的镜像仓库虽然可以本地访问和拉取,但是如果你在另外一台机器上是无法通过 Docker 访问到这个镜像仓库的,因为 Docker 要求非localhost访问的镜像仓库必须使用 HTTPS,这时候就需要构建外部可访问的镜像仓库


相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
8月前
|
存储 网络安全 数据安全/隐私保护
Docker harbor私有仓库部署与管理-2
Docker harbor私有仓库部署与管理
113 0
|
8月前
|
应用服务中间件 nginx 数据安全/隐私保护
Docker harbor私有仓库部署与管理-1
Docker harbor私有仓库部署与管理
144 0
|
6天前
|
存储 API 数据安全/隐私保护
企业级Docker镜像仓库Harbor部署与使用
企业级Docker镜像仓库Harbor部署与使用
|
29天前
|
Docker 容器
Docker私有仓库的搭建与Docker仓库UI
Docker私有仓库的搭建与Docker仓库UI
55 0
|
2月前
|
NoSQL 关系型数据库 MySQL
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
233 0
|
2月前
|
存储 Java Maven
|
8月前
|
数据库 数据安全/隐私保护 Docker
Docker harbor私有仓库部署与管理-3
Docker harbor私有仓库部署与管理
110 0
|
5月前
|
Kubernetes 安全 测试技术
Docker|kubernetes|本地镜像批量推送到Harbor私有仓库的脚本
Docker|kubernetes|本地镜像批量推送到Harbor私有仓库的脚本
113 0
|
5月前
|
Docker 容器
docker 私有仓库
docker 私有仓库
138 0
|
5月前
|
存储 数据可视化 数据安全/隐私保护
Docker Registry本地私有仓库搭建
Docker Registry本地私有仓库搭建
242 0