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,这时候就需要构建外部可访问的镜像仓库


相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
2月前
|
Docker 容器
Docker自建仓库之Harbor高可用部署实战篇
关于如何部署Harbor高可用性的实战教程,涵盖了从单机部署到镜像仓库同步的详细步骤。
140 15
Docker自建仓库之Harbor高可用部署实战篇
|
2月前
|
存储 Kubernetes Cloud Native
部署Kubernetes客户端和Docker私有仓库的步骤
这个指南涵盖了部署Kubernetes客户端和配置Docker私有仓库的基本步骤,是基于最新的实践和工具。根据具体的需求和环境,还可能需要额外的配置和调整。
87 1
|
1月前
|
网络协议 应用服务中间件 nginx
私有的docker私有镜像站仓库harbor
私有的docker私有镜像站仓库harbor
|
2月前
|
存储 测试技术 数据安全/隐私保护
Docker自建仓库之Harbor部署实战
关于如何部署和使用Harbor作为Docker企业级私有镜像仓库的详细教程。
570 12
|
2月前
|
Docker 容器
Docker Hub镜像公共仓库使用
这篇文章介绍了如何使用Docker Hub公共仓库进行镜像的创建、上传、下载和管理。
1029 8
|
2月前
|
运维 数据安全/隐私保护 Docker
Docker自建仓库之Docker Registry部署实战
关于如何使用Docker Registry镜像搭建本地私有Docker仓库的实战教程,包括了下载镜像、创建授权目录和用户名密码、启动Registry容器、验证端口和容器、测试登录仓库、上传和下载镜像的详细步骤。
709 5
|
3月前
|
存储 Docker 容器
阿里云私有docker仓库构建海外镜像
【8月更文挑战第25天】
303 3
|
4月前
|
存储 Docker 容器
入职必会-开发环境搭建50-Docker必会搭建Docker私有仓库
Docker官方的Docker hub(https://hub.docker.com)是一个用于管理公共镜像的仓库,我们可以从上面拉取镜像到本地也可以把我们自己的镜像推送上去。但是有时候我们的服务器无法访问互联网或者不希望将自己的镜像放到公网当中,那么我们就需要搭建自己的Docker私有仓库来存储和管理自己的Docker镜像。
入职必会-开发环境搭建50-Docker必会搭建Docker私有仓库
|
2月前
|
应用服务中间件 nginx 数据安全/隐私保护
使用Harbor搭建Docker私有仓库
Harbor是一款开源的企业级Docker仓库管理工具,分为私有与公有仓库两种类型,其中私有仓库被广泛应用于运维场景。Harbor提供图形化界面,便于直观操作,并且其核心组件均由容器构建而成,因此安装时需预先配置Docker及docker-compose。Harbor支持基于项目的用户与仓库管理,实现细粒度的权限控制;具备镜像复制、日志收集等功能,并可通过UI直接管理镜像,支持审计追踪。部署Harbor涉及配置文件调整、登录认证等步骤,并可通过客户端进行镜像的上传、拉取等操作。系统内置多种角色,包括受限访客、访客、开发者、维护人员及管理员,以满足不同场景下的使用需求。
126 0
|
4月前
|
Ubuntu Java Docker
docker 搭建私有仓库并发布私有镜像
docker 搭建私有仓库并发布私有镜像
401 1