摘要:本文将带你深入理解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 # 验证状态 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 CE
yum 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 \ --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/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项目,它提供了图形化界面和更强大的功能。。