1. CentOS 7系统环境准备
在开始安装Docker之前,我们需要确保系统环境已经准备就绪。CentOS 7作为一款稳定可靠的Linux发行版,是运行Docker的理想选择。不过默认的yum源在国内访问速度较慢,我们需要先进行优化配置。
1.1 更新yum源为阿里云镜像
国内用户强烈建议将默认的yum源替换为阿里云镜像,这能显著提升软件包下载速度。执行以下命令:
bash复制wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
这个命令做了三件事:
- 使用wget工具下载阿里云的CentOS 7镜像源配置文件
- 通过-O参数指定保存路径为/etc/yum.repos.d/CentOS-Base.repo
- 覆盖系统原有的基础源配置文件
注意:如果系统没有安装wget,需要先执行
yum install -y wget进行安装
1.2 生成yum缓存
更换源之后,我们需要让yum重新建立元数据缓存:
bash复制yum makecache
这个步骤会:
- 下载新配置的镜像源中的元数据
- 建立本地缓存,加速后续的软件包搜索和安装
缓存生成过程通常需要1-3分钟,取决于网络速度。完成后你会看到"Metadata Cache Created"的提示。
1.3 安装必要依赖包
Docker运行需要一些基础依赖,我们通过以下命令安装:
bash复制yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
各依赖包的作用:
- yum-utils:提供yum-config-manager等实用工具
- device-mapper-persistent-data和lvm2:为Docker提供存储驱动支持
--skip-broken参数可以跳过有问题的依赖包,避免安装中断。在实际操作中,如果遇到依赖问题,可以先尝试不加这个参数。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Docker安装与配置
2.1 设置Docker的yum源
官方Docker源在国外,我们同样使用阿里云的镜像源:
bash复制yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
这个命令会:
- 在/etc/yum.repos.d/目录下新增docker-ce.repo文件
- 配置好Docker社区版的安装源
提示:如果想查看已配置的yum源,可以使用
yum repolist all命令
2.2 安装Docker社区版
现在可以正式安装Docker了:
bash复制yum install -y docker-ce docker-ce-cli containerd.io
这里我们明确指定安装三个核心组件:
- docker-ce:Docker引擎社区版
- docker-ce-cli:Docker命令行工具
- containerd.io:容器运行时
安装过程会显示将要安装的软件包列表,通常需要下载100MB左右的数据。安装完成后,可以使用docker --version验证是否安装成功。
2.3 处理常见安装问题
如果安装过程中出现类似"Error: docker-ce conflicts with docker"的错误,说明系统可能存在旧版Docker残留。解决方法如下:
bash复制# 先清理docker-ce-stable仓库的元数据
sudo yum --enablerepo=docker-ce-stable clean metadata
# 彻底清理所有缓存(更保险)
sudo yum clean all
sudo rm -rf /var/cache/yum
# 重建缓存
sudo yum makecache
# 再次尝试安装
sudo yum install docker-ce docker-ce-cli containerd.io
如果问题依旧存在,可能需要先卸载旧版本:
bash复制sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3. Docker服务管理
3.1 防火墙配置
CentOS 7默认启用的firewalld可能会影响Docker网络,建议关闭:
bash复制# 停止防火墙服务
systemctl stop firewalld
# 禁用开机启动
systemctl disable firewalld
# 查看状态确认
systemctl status firewalld
注意:在生产环境中,建议配置防火墙规则而不是完全关闭防火墙。可以使用以下命令开放必要端口:
bash复制firewall-cmd --permanent --add-port=2375/tcp firewall-cmd --permanent --add-port=2376/tcp firewall-cmd --reload
3.2 启动Docker服务
安装完成后,需要启动Docker守护进程:
bash复制# 启动服务
systemctl start docker
# 设置开机自启
systemctl enable docker
# 查看服务状态
systemctl status docker
正常运行的Docker服务状态应该是"active (running)"。如果状态异常,可以查看详细日志:
bash复制journalctl -u docker.service -n 50 --no-pager
4. 镜像加速器配置
4.1 配置国内镜像源
国内直接拉取Docker官方镜像速度很慢,我们需要配置镜像加速器。创建或编辑配置文件:
bash复制mkdir -p /etc/docker
vim /etc/docker/daemon.json
添加以下内容(选择其中一个镜像源即可,不必全部添加):
json复制{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://hub-mirror.c.163.com",
"https://mirror.ccs.tencentyun.com"
]
}
常用镜像源说明:
- Docker中国官方镜像:https://registry.docker-cn.com
- 网易镜像:https://hub-mirror.c.163.com
- 腾讯云镜像:https://mirror.ccs.tencentyun.com
- 阿里云镜像:需要登录阿里云容器服务获取专属加速地址
4.2 应用配置并重启服务
配置完成后,需要重新加载并重启Docker:
bash复制# 重新加载配置
systemctl daemon-reload
# 重启Docker服务
systemctl restart docker
# 验证配置是否生效
docker info | grep -A 1 "Registry Mirrors"
如果看到输出的镜像地址与你配置的一致,说明加速器已经生效。
5. 验证与基本使用
5.1 运行测试容器
为了验证Docker是否正常工作,可以运行一个测试容器:
bash复制docker run hello-world
这个命令会:
- 从配置的镜像源拉取hello-world镜像
- 创建并运行一个临时容器
- 输出欢迎信息后自动退出
如果看到"Hello from Docker!"的消息,说明安装配置成功。
5.2 常用Docker命令
以下是一些日常使用频率较高的Docker命令:
bash复制# 查看Docker版本信息
docker version
# 查看系统级信息
docker info
# 列出本地镜像
docker images
# 搜索远程仓库镜像
docker search nginx
# 拉取镜像
docker pull nginx:latest
# 运行容器
docker run -d -p 80:80 --name mynginx nginx
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 停止容器
docker stop mynginx
# 启动已停止的容器
docker start mynginx
# 进入容器shell
docker exec -it mynginx /bin/bash
# 查看容器日志
docker logs mynginx
# 删除容器
docker rm mynginx
# 删除镜像
docker rmi nginx
6. 进阶配置与优化
6.1 数据目录迁移
默认情况下,Docker将镜像和容器数据存储在/var/lib/docker目录。如果系统盘空间有限,可以考虑迁移到其他分区:
bash复制# 停止Docker服务
systemctl stop docker
# 备份原有数据
mv /var/lib/docker /data/docker
# 创建符号链接
ln -s /data/docker /var/lib/docker
# 重启Docker
systemctl start docker
或者更推荐的方式是直接修改daemon.json配置文件:
json复制{
"data-root": "/data/docker"
}
6.2 日志配置
Docker容器日志默认会无限制增长,可能导致磁盘空间耗尽。我们可以限制日志大小:
json复制{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
这会将每个容器的日志限制为最多3个文件,每个文件10MB。
6.3 存储驱动选择
Docker支持多种存储驱动,CentOS 7推荐使用overlay2:
json复制{
"storage-driver": "overlay2"
}
可以通过docker info | grep "Storage Driver"查看当前使用的驱动。
7. 安全加固建议
7.1 用户权限管理
默认情况下,Docker需要root权限才能运行。为了安全考虑,可以将普通用户加入docker组:
bash复制# 创建docker组(如果不存在)
groupadd docker
# 将当前用户加入docker组
usermod -aG docker $USER
# 重新登录使更改生效
newgrp docker
7.2 启用内容信任
Docker Content Trust(DCT)可以确保只运行经过签名的镜像:
bash复制export DOCKER_CONTENT_TRUST=1
或者在/etc/environment中添加:
code复制DOCKER_CONTENT_TRUST=1
7.3 定期更新
保持Docker版本更新是重要的安全实践:
bash复制# 检查可用更新
yum check-update docker-ce
# 执行更新
yum update docker-ce
建议设置定期任务自动检查更新。
8. 常见问题排查
8.1 Docker服务无法启动
如果遇到Docker启动失败,可以按以下步骤排查:
-
检查日志:
bash复制
journalctl -u docker.service -n 50 --no-pager -
检查存储驱动是否兼容:
bash复制docker info | grep "Storage Driver"确保使用的是overlay2或devicemapper
-
检查磁盘空间:
bash复制df -h /var/lib/docker -
检查SELinux状态:
bash复制
getenforce如果是Enforcing模式,可以尝试临时设置为Permissive:
bash复制
setenforce 0
8.2 镜像拉取失败
当遇到镜像拉取问题时:
-
首先检查网络连接:
bash复制
ping hub.docker.com -
确认镜像加速器配置正确:
bash复制docker info | grep -A 1 "Registry Mirrors" -
尝试直接指定镜像源:
bash复制
docker pull registry.docker-cn.com/library/nginx:latest -
检查DNS配置:
bash复制cat /etc/resolv.conf可以尝试使用公共DNS如8.8.8.8
8.3 容器网络问题
容器网络连接异常的排查方法:
-
检查容器网络配置:
bash复制docker network ls docker network inspect bridge -
检查iptables规则:
bash复制
iptables -L -n -v -
测试容器间通信:
bash复制docker run -it --rm busybox ping <另一个容器IP> -
检查路由表:
bash复制
route -n
9. 性能优化技巧
9.1 资源限制
为容器设置合理的资源限制可以防止单个容器耗尽系统资源:
bash复制docker run -d --name myapp \
--memory=512m \
--cpus=1.5 \
nginx
这会将容器内存限制为512MB,CPU限制为1.5个核心。
9.2 文件系统优化
对于IO密集型应用,可以考虑:
- 使用数据卷(Volume)代替绑定挂载
- 选择高性能存储驱动如overlay2
- 对于数据库类应用,使用
--mount type=tmpfs将临时目录挂载到内存
9.3 网络性能
提升容器网络性能的方法:
- 使用
--network=host模式获得原生网络性能(牺牲隔离性) - 对于大量容器通信,考虑overlay网络
- 调整MTU大小匹配物理网络
10. 生产环境建议
10.1 监控方案
生产环境建议部署Docker监控系统:
-
原生工具:
bash复制
docker stats docker events -
cAdvisor:Google开源的容器监控工具
-
Prometheus+Grafana:完整的监控解决方案
10.2 日志收集
集中式日志收集方案:
- ELK Stack(Elasticsearch+Logstash+Kibana)
- Fluentd
- 阿里云日志服务等商业方案
10.3 备份策略
重要的Docker数据备份方案:
- 定期备份/var/lib/docker目录(服务停止时)
- 使用
docker save导出关键镜像 - 使用卷插件实现存储卷的自动备份
11. 实际应用案例
11.1 部署Nginx Web服务器
bash复制# 拉取官方镜像
docker pull nginx:latest
# 运行容器
docker run -d \
--name my-nginx \
-p 80:80 \
-v /path/to/html:/usr/share/nginx/html \
nginx
11.2 部署MySQL数据库
bash复制# 拉取官方镜像
docker pull mysql:5.7
# 运行容器
docker run -d \
--name my-mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=yourpassword \
-v /data/mysql:/var/lib/mysql \
mysql:5.7
11.3 部署Redis缓存
bash复制# 拉取官方镜像
docker pull redis:latest
# 运行容器
docker run -d \
--name my-redis \
-p 6379:6379 \
-v /data/redis:/data \
redis \
redis-server --appendonly yes
12. 容器编排入门
虽然单机Docker已经能满足很多需求,但在生产环境中通常需要使用编排工具管理多个容器。
12.1 Docker Compose安装
bash复制# 下载最新版本(替换为当前最新版本号)
curl -L "https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加执行权限
chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
12.2 编写Compose文件
创建一个docker-compose.yml文件示例:
yaml复制version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
12.3 使用Compose管理服务
常用命令:
bash复制# 启动服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看服务日志
docker-compose logs
# 停止服务
docker-compose down
13. 持续学习建议
Docker生态系统不断发展,建议通过以下方式持续学习:
- 官方文档:https://docs.docker.com/
- Docker官方博客:https://www.docker.com/blog/
- 社区资源:Docker Forum、Stack Overflow
- 实践项目:从简单应用到复杂微服务架构逐步实践
我在实际使用Docker的过程中发现,定期清理无用镜像和容器可以节省大量磁盘空间:
bash复制# 删除所有停止的容器
docker container prune
# 删除所有未被使用的镜像
docker image prune -a
# 删除所有未被使用的网络
docker network prune
# 删除所有未被使用的卷
docker volume prune
对于开发环境,可以设置每周自动清理的定时任务。而在生产环境中,则需要更谨慎地管理容器生命周期。
