
1. 为什么选择CentOS 7.9作为Docker运行环境作为企业级Linux发行版的常青树CentOS 7.92020年Q4发布至今仍是众多生产环境的首选。其长期支持周期延续至2024年6月配合Docker的轻量化特性能构建出既稳定又灵活的容器化平台。相较于CentOS 8的突然终止支持7.9版本提供了更可靠的生命周期保障。我在实际运维中发现CentOS 7.9的内核版本默认3.10.x虽然较旧但完全满足Docker CE的基础需求。若需要overlay2存储驱动等新特性只需通过yum update升级内核至4.x版本即可。这个组合在金融、医疗等行业的核心系统中经过充分验证其稳定性值得信赖。重要提示2024年后若需继续获得安全更新建议考虑迁移至CentOS Stream或Rocky Linux等替代发行版2. 环境准备与依赖处理2.1 系统基础配置检查在安装Docker前建议执行以下检查命令# 查看系统版本 cat /etc/redhat-release # 检查内核版本需≥3.10 uname -r # 确认SELinux状态建议禁用或设为permissive getenforce若系统为最小化安装需先补充基础工具链yum install -y yum-utils device-mapper-persistent-data lvm22.2 存储与网络预配置Docker默认使用/var/lib/docker作为存储目录生产环境建议单独挂载大容量磁盘# 查看现有存储空间 df -h # 若有新磁盘执行分区格式化示例为/dev/sdb fdisk /dev/sdb # 创建新分区 mkfs.xfs /dev/sdb1 mkdir -p /var/lib/docker mount /dev/sdb1 /var/lib/docker # 写入fstab实现永久挂载 echo /dev/sdb1 /var/lib/docker xfs defaults 0 0 /etc/fstab网络方面建议关闭firewalld或配置放行规则systemctl stop firewalld systemctl disable firewalld3. Docker安装全流程详解3.1 官方源安装方式推荐使用官方仓库获取最新稳定版# 添加Docker官方仓库 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 查看可用版本 yum list docker-ce --showduplicates | sort -r # 安装指定版本示例为19.03.15 yum install -y docker-ce-19.03.15 docker-ce-cli-19.03.15 containerd.io3.2 国内镜像加速方案针对国内网络环境可替换为阿里云镜像源# 备份原有repo文件 mv /etc/yum.repos.d/docker-ce.repo /etc/yum.repos.d/docker-ce.repo.bak # 使用阿里云镜像源 wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i sdownload.docker.commirrors.aliyun.com/docker-ce /etc/yum.repos.d/docker-ce.repo yum makecache fast3.3 版本锁定与防升级生产环境建议锁定Docker版本# 在yum配置中添加版本锁定 echo excludedocker-ce* /etc/yum.conf # 验证锁定效果 yum update4. 安装后关键配置4.1 服务启动与自启设置systemctl start docker systemctl enable docker # 验证安装 docker version docker run hello-world4.2 存储驱动优化检查当前存储驱动docker info | grep Storage Driver若需改用overlay2推荐需确保内核≥4.x并修改配置# 编辑配置文件 vi /etc/docker/daemon.json # 添加以下内容 { storage-driver: overlay2, storage-opts: [ overlay2.override_kernel_checktrue ] } # 重启服务 systemctl restart docker4.3 用户权限管理避免直接使用root操作Docker应将用户加入docker组groupadd docker usermod -aG docker $USER newgrp docker # 验证非root用户权限 docker ps5. 常见问题排错指南5.1 镜像拉取失败处理典型报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled解决方案# 配置国内镜像加速器 mkdir -p /etc/docker vi /etc/docker/daemon.json # 添加以下内容以阿里云为例 { registry-mirrors: [https://your-id.mirror.aliyuncs.com] } systemctl restart docker5.2 存储空间不足问题当出现No space left on device错误时需清理无用资源# 查看磁盘使用 docker system df # 批量清理 docker system prune -a --volumes # 手动删除大体积镜像 docker rmi $(docker images -q --filter danglingtrue)5.3 容器时间同步异常容器内时间与宿主机不一致时# 启动容器时挂载宿主机时间 docker run -v /etc/localtime:/etc/localtime:ro ... # 或修改docker服务配置 vi /etc/docker/daemon.json # 添加 { bip: 192.168.1.1/24, fixed-cidr: 192.168.1.0/25, default-timezone: Asia/Shanghai }6. 生产环境最佳实践6.1 日志管理方案防止容器日志占用过多空间# 全局日志配置 vi /etc/docker/daemon.json { log-driver: json-file, log-opts: { max-size: 10m, max-file: 3 } } # 单容器日志限制 docker run --log-opt max-size10m --log-opt max-file3 ...6.2 资源限制策略通过cgroups限制容器资源# 内存限制示例限制为512MB docker run -m 512m --memory-swap1g ... # CPU限制示例最多使用50% CPU docker run --cpus.5 ...6.3 网络隔离方案创建自定义网络提高安全性# 创建bridge网络 docker network create --driverbridge --subnet172.18.0.0/16 mynet # 运行容器时指定网络 docker run --networkmynet ...7. 升级与维护策略7.1 安全更新流程# 查看可升级版本 yum --showduplicates list docker-ce # 执行升级示例升级到20.10.7 yum install docker-ce-20.10.7 docker-ce-cli-20.10.7 # 验证升级后状态 docker version7.2 数据备份方案关键数据备份方法# 备份容器数据卷 docker run --rm --volumes-from my_container -v $(pwd):/backup busybox tar cvf /backup/backup.tar /volume_path # 备份整个docker目录 systemctl stop docker tar czvf docker_backup.tar.gz /var/lib/docker systemctl start docker8. 性能调优技巧8.1 内核参数优化编辑/etc/sysctl.conf添加# 增加最大文件描述符 fs.file-max 1000000 # 优化网络性能 net.core.somaxconn 65535 net.ipv4.tcp_max_syn_backlog 262144 # 容器专用优化 vm.swappiness 0 vm.overcommit_memory 1执行sysctl -p生效8.2 存储驱动性能对比不同存储驱动的IOPS测试数据基于4K随机写驱动类型平均延迟(ms)吞吐量(MB/s)overlay21.2320devicemapper3.8180aufs2.1250测试方法docker run --rm -it --storage-opt dm.basesize20G centos \ dd if/dev/zero oftestfile bs4k count100000 oflagdirect9. 典型应用场景示例9.1 数据库容器化部署MySQL容器最佳实践docker run -d \ --name mysql57 \ -v /data/mysql:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORDcomplexpassword \ -p 3306:3306 \ --restartunless-stopped \ mysql:5.7 \ --character-set-serverutf8mb4 \ --collation-serverutf8mb4_unicode_ci9.2 微服务架构部署使用docker-compose部署应用栈version: 3 services: web: image: nginx:alpine ports: - 80:80 depends_on: - app app: image: tomcat:9 volumes: - ./app:/usr/local/tomcat/webapps environment: - JAVA_OPTS-Xmx512m启动命令curl -L https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose chmod x /usr/local/bin/docker-compose docker-compose up -d10. 监控与日志收集10.1 基础监控方案使用cAdvisor收集容器指标docker run -d \ --namecadvisor \ --volume/:/rootfs:ro \ --volume/var/run:/var/run:ro \ --volume/sys:/sys:ro \ --volume/var/lib/docker/:/var/lib/docker:ro \ --publish8080:8080 \ --restartunless-stopped \ google/cadvisor:latest10.2 日志集中管理配置ELK收集Docker日志# Filebeat配置示例 filebeat.inputs: - type: container paths: - /var/lib/docker/containers/*/*.log output.elasticsearch: hosts: [elasticsearch:9200]启动命令docker run -d \ --namefilebeat \ --userroot \ --volume/var/lib/docker/containers:/var/lib/docker/containers:ro \ --volume/var/run/docker.sock:/var/run/docker.sock:ro \ docker.elastic.co/beats/filebeat:8.2.0 \ -e -strict.permsfalse