1. CentOS系统下Docker安装全指南
作为当下最流行的容器化技术,Docker已经成为了开发和运维人员的标配工具。在CentOS这样的企业级Linux发行版上部署Docker,是许多服务器环境的标准配置。不同于Windows或Mac上的Docker Desktop,Linux环境下的Docker安装需要更多的手动配置和调优,这也是为什么我们需要一份详尽的CentOS专属指南。
我在生产环境中部署Docker已有五年多经验,遇到过各种稀奇古怪的安装问题——从内核版本冲突到存储驱动不兼容,从镜像源配置错误到SELinux权限问题。这篇文章将把我踩过的坑和总结的最佳实践全部呈现给你,不仅告诉你"怎么做",还会解释"为什么这么做"。
2. 准备工作与环境检查
2.1 系统要求验证
在开始安装前,我们需要确认几个关键点:
cat /etc/redhat-release # 查看CentOS版本 uname -r # 检查内核版本 lsmod | grep overlay # 验证存储驱动支持CentOS 7需要3.10以上内核,CentOS 8则需要4.18以上。我遇到过不少案例是因为使用了老旧的CentOS 6系统导致后续安装失败。如果内核版本不足,你需要先升级系统:
yum update -y reboot重要提示:生产环境升级内核前务必做好备份,我曾亲眼见过一次内核升级导致网卡驱动不兼容的惨剧。
2.2 清理旧版本Docker
如果你之前安装过Docker或其他容器运行时,必须先彻底清理:
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine这个步骤很多人会忽略,结果导致新旧版本文件混杂,引发各种诡异问题。特别是/var/lib/docker目录下的残留数据,可能占用大量磁盘空间:
rm -rf /var/lib/docker3. 安装Docker引擎
3.1 配置官方仓库
推荐使用官方仓库安装,而不是直接下载rpm包,这样可以确保后续能够方便地升级:
sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo国内用户可能会遇到下载速度慢的问题,这时可以替换为国内镜像源。但要注意,某些第三方镜像源可能存在版本滞后问题:
sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3.2 安装Docker CE
安装最新稳定版Docker及其组件:
sudo yum install docker-ce docker-ce-cli containerd.io如果你需要特定版本(比如某些应用对Docker版本有要求),可以列出可用版本后选择安装:
yum list docker-ce --showduplicates | sort -r sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io4. 关键配置与优化
4.1 存储驱动选择
Docker支持多种存储驱动(overlay2、devicemapper等),现代CentOS系统推荐使用overlay2:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } EOF我曾在一个项目中使用devicemapper驱动,结果因为磁盘空间不足导致容器频繁崩溃。切换到overlay2后不仅性能提升,还节省了30%的存储空间。
4.2 国内镜像加速
默认的Docker Hub在国内访问速度很慢,需要配置镜像加速器。各大云服务商都提供了免费的加速服务:
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com" ] } EOF注意:不要同时配置太多镜像源,这反而会降低拉取速度。建议选择离你地理位置最近的一个。
5. 启动与验证
5.1 启动Docker服务
配置完成后,启动Docker并设置开机自启:
sudo systemctl start docker sudo systemctl enable docker验证安装是否成功:
sudo docker run hello-world这个测试镜像会自动下载并运行,如果看到"Hello from Docker!"的消息,说明安装成功。
5.2 权限配置
默认情况下,运行docker命令需要sudo权限。为了方便使用,可以将当前用户加入docker组:
sudo usermod -aG docker $USER newgrp docker # 立即生效,无需重新登录但要注意,这实际上是一个安全风险——docker组的用户相当于获得了root权限。在生产环境中,我建议还是保留sudo权限要求。
6. 常见问题排查
6.1 启动失败分析
如果docker启动失败,首先查看日志:
journalctl -xu docker常见错误包括:
- 内核模块缺失:需要安装kernel-modules-extra包
- 存储驱动不兼容:检查/etc/docker/daemon.json配置
- SELinux冲突:可以尝试临时禁用setenforce 0
6.2 镜像拉取问题
当遇到镜像拉取失败时,尝试:
- 检查网络连接
- 验证镜像地址是否正确
- 尝试不同的镜像仓库
- 使用docker pull --verbose查看详细错误
7. 生产环境建议
7.1 资源限制
默认情况下,Docker容器可以使用宿主机的所有资源。在生产环境中,这显然是不安全的。我建议通过cgroup限制资源使用:
docker run -it --cpus=1 --memory=2g --memory-swap=2g ubuntu7.2 日志管理
Docker容器日志默认不会自动轮转,可能导致磁盘爆满。除了前面daemon.json中的日志配置外,还可以考虑使用logrotate:
sudo tee /etc/logrotate.d/docker <<-'EOF' /var/lib/docker/containers/*/*.log { rotate 7 daily compress delaycompress missingok copytruncate } EOF8. 进阶配置
8.1 构建专用环境
如果你需要频繁构建Docker镜像,可以考虑以下优化:
- 配置buildkit提升构建速度:
export DOCKER_BUILDKIT=1 - 为docker build设置缓存目录:
docker build --build-arg BUILDKIT_INLINE_CACHE=1
8.2 安全加固
生产环境必须考虑的安全措施:
- 启用内容信任:
export DOCKER_CONTENT_TRUST=1 - 定期扫描镜像漏洞:
docker scan <image-name> - 使用非root用户运行容器:
docker run --user 1000:1000
经过以上步骤,你应该已经在CentOS系统上成功安装并配置好了Docker环境。记住,Docker的配置不是一劳永逸的,随着使用场景的变化,你可能需要不断调整优化。