在 CentOS 上容器化应用的磁盘与分区最佳实践
一、前置准备与安装
- 更新系统并安装依赖:sudo yum update -y && sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加 Docker 仓库:sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 安装 Docker 引擎:sudo yum install -y docker-ce docker-ce-cli containerd.io
- 启动并设置开机自启:sudo systemctl start docker && sudo systemctl enable docker
- 验证安装:sudo docker run --rm hello-world
- 可选:安装 Docker Compose(单机多容器编排)以便管理多服务应用。
二、规划容器存储与分区
- Docker 默认将所有镜像、容器与卷数据存放在 /var/lib/docker。为避免系统盘被占满,建议将 /var/lib/docker 迁移到独立的数据盘或大容量分区。
- 常见做法:
- 新增一块磁盘(如 /dev/sdb),创建分区 /dev/sdb1 并格式化为 ext4/xfs。
- 挂载到临时目录(如 /mnt/docker),迁移现有数据,再挂载回 /var/lib/docker。
- 通过 /etc/docker/daemon.json 配置新的数据根目录,使配置永久生效。
三、迁移 Docker 数据目录到新分区
- 假设新分区为 /dev/sdb1,目标目录为 /var/lib/docker(也可先挂载到 /mnt/docker 再移动):
- 分区与格式化
- sudo fdisk /dev/sdb(新建主分区,保存退出)
- sudo mkfs.ext4 /dev/sdb1
- 挂载新分区
- sudo mkdir -p /mnt/docker
- sudo mount /dev/sdb1 /mnt/docker
- 停止 Docker 并迁移数据
- sudo systemctl stop docker
- sudo rsync -aP /var/lib/docker/ /mnt/docker/
- 备份原目录并挂载新分区到目标路径
- sudo mv /var/lib/docker /var/lib/docker.bak
- sudo mkdir -p /var/lib/docker
- sudo mount /dev/sdb1 /var/lib/docker
- 配置 Docker 使用新数据根目录
- 编辑 /etc/docker/daemon.json(如不存在则新建),加入:
{
“data-root”: “/var/lib/docker”
}
- 注意:若此前挂载到 /mnt/docker,可改为 “data-root”: “/mnt/docker”
- 启动 Docker 并验证
- sudo systemctl start docker
- docker info | grep “Docker Root Dir” 应显示新路径
- 运行 sudo docker run --rm hello-world 验证可用性
- 确认无误后清理备份
- sudo rm -rf /var/lib/docker.bak
- 提示:如系统启用了 SELinux,可能需要 restorecon -R /var/lib/docker 或设置合适的 SELinux 上下文后再启动 Docker。
四、部署示例与数据持久化
- 运行示例应用(Nginx)
- 拉取并运行:sudo docker run -d --name web -p 80:80 nginx:latest
- 验证:curl http://localhost
- 数据持久化与目录挂载
- 将宿主机目录挂载到容器内(例如将应用日志或上传目录持久化):
- sudo mkdir -p /data/myapp
- sudo docker run -d --name app -v /data/myapp:/app/data myapp:latest
- 多容器应用建议使用 Docker Compose
- 示例 docker-compose.yml(节选):
version: “3.8”
services:
web:
image: nginx:latest
ports:
- “80:80”
volumes:
- ./html:/usr/share/nginx/html
app:
image: myapp:latest
volumes:
- /data/myapp:/app/data
- 启动:docker compose up -d(或 docker-compose up -d)。
五、运行与维护要点
- 资源与稳定性
- 为关键容器设置资源限制(如内存/CPU),避免单容器耗尽主机资源;生产环境建议非 root 用户运行容器,并遵循最小权限原则。
- 存储与日志
- 镜像与容器层写入默认集中在 /var/lib/docker;结合挂载卷持久化业务数据,避免容器重建导致数据丢失。
- 定期清理无用资源:docker system prune(谨慎使用 -a 参数),并配置日志轮转,防止日志无限增长。
- 安全与合规
- 保持宿主机、Docker 引擎与镜像的定期更新;启用 SELinux/防火墙;对镜像进行安全扫描;必要时使用更细粒度的权限控制(如 capabilities)。
- 备份与恢复
- 定期备份 /var/lib/docker(若已迁移,则为新挂载分区)与业务数据卷;变更前先停机、迁移、验证,再切换生产流量。