从零搭建企业级Docker私有仓库:理论与实战全解析
摘要:本文将带你深入理解Docker容器技术的核心原理,并通过一个完整的双节点实验,手把手教你如何在CentOS环境下部署Docker服务,构建本地私有镜像仓库。文章涵盖了Docker的安装配置、镜像管理、网络设置以及Registry的部署与验证,是不可多得的Docker实战教程。
一、引言:为什么我们需要Docker私有仓库?
在现代软件开发和运维中,容器化技术已经成为标配。Docker作为最流行的容器引擎,极大地简化了应用的打包、分发和运行。然而,在企业内部开发中,我们往往需要一个安全、可控、高效的镜像存储和分发中心,这就是私有仓库(Private Registry)存在的意义。本文将基于CentOS系统,通过一个双节点(Server/Client)的实验案例,带你一步步构建属于自己的Docker私有仓库。
二、核心理论:Docker是如何工作的?
在动手实践之前,理解Docker的底层原理至关重要。Docker并非简单的虚拟机,它更像是一个“集装箱”,将应用及其依赖打包在一起。
1.两大核心技术支柱:
Docker的隔离和限制能力主要依赖于Linux内核的两项技术:Namespace 和 Cgroups。
-
Namespace (命名空间):负责“空间”隔离,让容器拥有独立的视图。
- UTS:隔离主机名和域名。
- PID:隔离进程ID,让容器内拥有独立的进程树(PID=1)。
- Network:隔离网络设备、IP地址和端口。
- Mount:隔离文件系统挂载点。
-
Cgroups (控制组):负责“资源”限制,限制容器能使用的资源量。
- CPU:限制CPU使用率,例如限制某个容器最多使用单核的25%。
- Memory:限制内存使用量。
- Blkio:限制磁盘I/O。
2.Docker架构组成
一个完整的Docker平台主要由以下几部分组成:
- Docker Daemon (守护进程):后台服务,负责管理镜像、容器、网络和数据卷。
- Docker Client (客户端):用户与Docker交互的命令行工具(CLI)。
- Docker Image (镜像):只读模板,用于创建容器。镜像采用分层(Layer)存储,提高复用性和传输效率。
- Docker Container (容器):镜像的运行实例。
三、实战准备:环境搭建
本实验旨在构建一个双节点的Docker服务平台。
实验环境规划:
| 节点角色 | 主机名 | IP地址 | 配置 | 职责 |
|---|---|---|---|---|
| 服务端 | server | 10.0.3.137 | 4G/40G | 运行Docker服务,作为私有仓库宿主 |
| 客户端 | client | 10.0.3.138 | 4G/40G | 用于测试从私有仓库拉取和运行镜像 |
基础环境配置(两台机器均需执行):
1.关闭SELinux
# 编辑配置文件
vi /etc/sysconfig/selinux
# 设置 SELINUX=disabled
# 验证状态
getenforce


2.关闭防火墙
systemctl stop firewalld.service
systemctl status firewalld.service
# 清除iptables规则
iptables -F
iptables -X
iptables -Z


3.修改系统内核参数
# 开启内核转发功能
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.rp_filter = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.rp_filter = 0" >> /etc/sysctl.conf
sysctl -p


4.修改主机名与域名解析
# server节点执行
hostnamectl set-hostname server
# client节点执行
hostnamectl set-hostname client
# 两台机器均需编辑 /etc/hosts 文件
10.0.3.137 server
10.0.3.138 client


5.配置YUM源
Server端:挂载Docker和CentOS的ISO镜像到 /opt 目录,并配置本地repo源。
Client端:配置FTP源,指向Server端的 /opt 目录,以便安装Docker环境。
四、实战一:Docker服务安装与基础命令
在完成基础环境配置后,我们开始在两个节点上安装Docker。
安装步骤:
1.安装Docker CE
yum install -y docker-ce
2.启动并设置开机自启
systemctl start docker
systemctl enable docker


常用Docker命令练习:
docker info:查看Docker系统信息。docker version:查看Docker版本。docker images:列出本地镜像。docker ps -a:列出所有容器(包括已停止的)。docker run -itd alpine sh:以后台模式启动一个Alpine Linux容器。
五、实战二:构建本地私有仓库
这是本文的核心部分。我们将利用Docker官方提供的 registry 镜像,在Server端搭建一个私有仓库。
步骤A:获取Registry镜像
你可以选择从外网拉取,或者在内网环境下通过FTP上传镜像文件。
# 方式一:从外网拉取
docker pull registry
# 方式二:从本地加载(假设镜像包已上传至/opt/images)
docker load -i /opt/images/registry_latest.tar

步骤B:运行Registry容器
运行Registry容器,并将其挂载到本地目录 /opt/registry,端口映射为 5000。
docker run -d \
-v /opt/registry:/var/lib/registry \
-p 5000:5000 \
--restart=always \
--name registry \
registry:latest
-d:后台运行。-v:挂载数据卷,确保镜像数据持久化。--restart=always:始终重启,保证服务高可用。
步骤C:配置Insecure Registry
由于我们使用的是HTTP协议(非HTTPS),需要在Docker配置文件中添加信任。
步骤D:推送镜像到私有仓库
1.给镜像打标签
需要将镜像标记为 IP:端口/镜像名 的格式。
docker tag httpd 10.0.3.137:5000/httpd
docker tag registry 10.0.3.137:5000/registry
2.推送镜像
docker push 10.0.3.137:5000/httpd
docker push 10.0.3.137:5000/registry
3.验证推送结果
通过curl命令查看仓库中的镜像列表。
curl http://10.0.3.137:5000/v2/_catalog
# 预期输出: {"repositories":["httpd", "registry"]}

六、实战三:客户端验证
在Client节点上,我们需要进行与Server端相同的Insecure Registry配置,然后测试是否能从Server拉取镜像。
Client端操作:
1.配置Docker信任
修改 /etc/docker/daemon.json,添加 10.0.3.137:5000 到 insecure-registries 列表,并重启Docker。

2.从私有仓库拉取镜像
# 查看仓库中有哪些镜像
curl http://10.0.3.137:5000/v2/_catalog
# 拉取httpd镜像
docker pull 10.0.3.137:5000/httpd:latest


3.查看本地镜像
执行 docker images,你应该能看到来自 10.0.3.137:5000 的镜像。

七、总结
通过本文的理论学习和实战演练,你已经成功搭建了一个基于Docker Registry的本地私有仓库。这不仅提升了镜像拉取的速度,更为企业内部的CI/CD流程提供了安全可靠的基础设施。
后续建议:
- 启用HTTPS:在生产环境中,务必为Registry配置TLS证书,使用HTTPS加密传输。
- 使用Harbor:对于更复杂的企业需求(如用户权限管理、镜像扫描、AD/LDAP集成),建议使用VMware开源的Harbor项目,它提供了图形化界面和更强大的功能。。
更多推荐


所有评论(0)