从零搭建企业级Docker私有仓库:理论与实战全解析
2026/7/8 5:38:48 网站建设 项目流程

摘要:本文将带你深入理解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地址配置职责
服务端server10.0.3.1374G/40G运行Docker服务,作为私有仓库宿主
客户端client10.0.3.1384G/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:5000insecure-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项目,它提供了图形化界面和更强大的功能。。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询