摘要本文将带你深入理解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让容器内拥有独立的进程树PID1。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 # 设置 SELINUXdisabled # 验证状态 getenforce2.关闭防火墙systemctl stop firewalld.service systemctl status firewalld.service # 清除iptables规则 iptables -F iptables -X iptables -Z3.修改系统内核参数# 开启内核转发功能 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 -p4.修改主机名与域名解析# server节点执行 hostnamectl set-hostname server # client节点执行 hostnamectl set-hostname client # 两台机器均需编辑 /etc/hosts 文件 10.0.3.137 server 10.0.3.138 client5.配置YUM源Server端挂载Docker和CentOS的ISO镜像到/opt目录并配置本地repo源。Client端配置FTP源指向Server端的/opt目录以便安装Docker环境。四、实战一Docker服务安装与基础命令在完成基础环境配置后我们开始在两个节点上安装Docker。安装步骤1.安装Docker CEyum install -y docker-ce2.启动并设置开机自启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 \ --restartalways \ --name registry \ registry:latest-d后台运行。-v挂载数据卷确保镜像数据持久化。--restartalways始终重启保证服务高可用。步骤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/registry2.推送镜像docker push 10.0.3.137:5000/httpd docker push 10.0.3.137:5000/registry3.验证推送结果通过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:latest3.查看本地镜像执行docker images你应该能看到来自10.0.3.137:5000的镜像。七、总结通过本文的理论学习和实战演练你已经成功搭建了一个基于Docker Registry的本地私有仓库。这不仅提升了镜像拉取的速度更为企业内部的CI/CD流程提供了安全可靠的基础设施。后续建议启用HTTPS在生产环境中务必为Registry配置TLS证书使用HTTPS加密传输。使用Harbor对于更复杂的企业需求如用户权限管理、镜像扫描、AD/LDAP集成建议使用VMware开源的Harbor项目它提供了图形化界面和更强大的功能。。