解决从官方仓库下载网络不通畅问题,搭建私有化镜像仓库
解决从官方仓库下载网络不通畅问题,搭建私有化镜像仓库
程序员七平解决从官方仓库下载网络不通畅问题,搭建私有化镜像仓库
本文主要针对适用于个人的镜像仓库Registry
和适用于企业的镜像仓库Harbor
做介绍。
先看看搭建私有化镜像仓库能解决什么问题?
1.搭建Docker私有化仓库能解决什么问题?
- 镜像拉取、下载慢:从本地私有仓库下载镜像比从远程公共仓库下载要快得多,因为数据传输的延迟和带宽限制被大大降低。(个人使用很重要)
- 节省网络带宽:私有仓库允许用户在本地网络内下载和分发Docker镜像,因此能够尽量避免从远程公共仓库进行下载。(个人使用很重要)
- 增强安全性:私有化仓库允许对镜像进行更严格的安全控制和审计、进行更细粒度的访问权限限制,确保只有授权用户才能下载和上传镜像。
- 镜像的统一管理和分发:私有仓库使得Docker镜像的管理和分发更加集中和统一,管理员可以轻松地管理不同版本和标签的镜像,确保团队成员使用一致的镜像版本。
如果平时使用过程中有使用的比较好的镜像,可以拉取下来,然后推送到自己的仓库收藏一下。有时候想用的时候又拉取不下来,很是折腾、费时间。
2.常用私有化镜像仓库介绍
2.1 Docker官方Registry镜像
Docker官方Registry镜像是一个开源的、轻量级的Docker镜像仓库解决方案。它提供了基本的镜像存储和分发功能,是Docker官方推荐的私有仓库搭建方式之一。
适用场景:一个简单、轻量级的Docker私有仓库,适用于小型团队或个人开发者,对镜像管理功能要求不高,主要关注基本的镜像存储和分发;
注意:Registry:本身默认并不提供图形化界面
2.2 Harbor
Harbor是一个企业级的Docker Registry服务器,由VMware开源并维护。
适用场景:
一个功能全面的Docker私有仓库,适用于中大型企业或团队;
对用户和镜像进行细粒度的权限控制;
对镜像的安全性、可靠性和性能有较高要求;
需要与CI/CD系统集成,实现自动化构建和部署;
3.安装部署(compose方式)
本文安装优先采用docker compose
方式进行安装部署,如果有不清楚的,可以去看前面的文章。
3.1 Docker Registry和Docker-registry-ui
前提条件:已经安装了docker。
1、docker-compose.yml文件示例内容:
解释:
① 定义了一个名为my-registry
的服务,它使用官方的registry
镜像,并在容器内运行。容器内的5000端口被映射到宿主机的15000端口,同时,./data
目录被用作镜像的存储位置
② 定义了一个名为my-registry-ui
的服务
1 | services: |
- 启动服务
在docker-compose.yml
文件所在的目录下,运行以下命令来启动服务:
1 | docker-compose up -d |
这个命令会启动Docker Registry容器,并在后台运行。
3.2 Harbor
前提条件:已经安装了docker。
PS:如果公网访问的话,还需要:
- 一个域名或IP地址,用于访问Harbor;
- 一个SSL证书(可选,但推荐用于保护通信);
- 下载
harbor
并安装
1 | # 1. 从github下载harbor仓库(如果实在觉得慢或者其他网络原因,也有快的办法:离线包下载然后上传到服务器。不清楚的可以联系我) |
- 安装完成后服务自动启动:
访问地址(我没有使用域名,配置的是IP、端口改为8314):http://hostname:8314/,默认账号:admin/Harbor12345。
可以看到以下界面。
首页:
4.使用
4.1 配置Docker守护进程(在Docker客户端上)
- 编辑Docker的配置文件(通常是
/etc/docker/daemon.json
),添加insecure-registries
字段,并将Harbor的地址添加到该字段中。 - 需要配置Docker守护进程以信任Harbor/Registry的仓库。
1 | vim /etc/docker/daemon.json |
记得
1 | systemctl daemon-reload |
4.2 推送和拉取镜像(Docker Registry和Harbor)
这两个仓库的登录、推送、拉取命令基本是一样的。
- 如果要推送和拉取镜像,一般需要进行登录:
- 在Docker客户端上,使用docker login命令登录到镜像仓库。
- 输入用户名和密码(Harbor默认是admin/Harbor12345;Docker Registry 默认没有密码,随便输)。
1 | # 登录Harbor,docker login harbor.example.com |
- 推送
为要推送的本地镜像打上一个新的标签(Tag),这个标签应该包含仓库的地址、项目名和镜像名。例如:
1 | # Harbor 命令 |
最后,使用docker push
命令将镜像推送到Harbor/Docker Registry:
1 | # Harbor |
Docker Registry 推送:
- 拉取
同样,首先确保你已经登录到Harbor。
使用docker pull
命令从Harbor拉取镜像。命令格式如下:
1 | # Harbor命令 |
这里的<Harbor/Docker Registry服务器地址>
、<项目名>
、<镜像名>
和:tag
应该与你推送镜像时使用的相同。