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

更多推荐