1. 环境准备与旧版本清理
在开始安装Docker之前,我们需要确保系统环境干净且配置正确。我见过太多因为旧版本残留导致的诡异问题,所以彻底清理是第一步。
1.1 检查现有Docker组件
执行以下命令查看系统中已安装的Docker相关软件包:
rpm -qa | grep docker yum list installed | grep docker这个检查步骤很多教程都会忽略,但实际工作中非常重要。我曾经遇到过因为漏查某个组件导致新版本无法正常启动的情况。
1.2 彻底卸载旧版本
对于CentOS/RHEL系统,完整的卸载命令应该包括:
sudo yum remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine \ docker-selinux \ docker-ce \ docker-ce-cli \ containerd.io注意:如果之前使用过其他方式安装(比如二进制包),还需要手动删除相关文件:
sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd2. 配置Docker仓库
2.1 安装必要工具包
在配置仓库前,我们需要确保系统具备必要的工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2这些工具的作用分别是:
- yum-utils:提供yum-config-manager等实用工具
- device-mapper-persistent-data和lvm2:Docker依赖的存储驱动
2.2 设置稳定版仓库
推荐使用国内镜像源加速下载,这里以阿里云为例:
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo然后修改repo文件中的URL:
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo2.3 更新yum缓存
执行以下命令使新仓库生效:
sudo yum makecache fast经验之谈:如果遇到缓存更新失败,可以尝试先清理旧缓存:
sudo yum clean all3. Docker引擎安装
3.1 安装最新稳定版
推荐安装特定版本而非最新版,以避免潜在的兼容性问题:
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin如果想安装特定版本,可以先列出可用版本:
yum list docker-ce --showduplicates | sort -r然后选择安装:
sudo yum install -y docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io3.2 验证安装
安装完成后,检查Docker组件是否完整:
rpm -qa | grep docker which docker docker --version4. 服务管理与配置
4.1 启动Docker服务
启动Docker并设置开机自启:
sudo systemctl start docker sudo systemctl enable docker检查服务状态:
sudo systemctl status docker4.2 测试运行
运行测试容器验证安装:
sudo docker run hello-world如果看到欢迎信息,说明安装成功。
5. 配置优化
5.1 镜像加速配置
创建或修改daemon.json配置文件:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://registry.docker-cn.com", "https://mirror.ccs.tencentyun.com", "https://docker.mirrors.ustc.edu.cn" ], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF然后重新加载配置:
sudo systemctl daemon-reload sudo systemctl restart docker5.2 用户权限配置
为了避免每次使用docker命令都需要sudo,可以将用户加入docker组:
sudo groupadd docker sudo usermod -aG docker $USER newgrp docker测试非root用户权限:
docker run hello-world6. 常见问题排查
6.1 启动失败排查
如果Docker启动失败,可以查看详细日志:
journalctl -xe -u docker常见问题包括:
- 存储驱动不兼容
- 防火墙阻止
- 端口冲突
6.2 镜像拉取问题
如果遇到镜像拉取慢或失败:
- 检查镜像加速配置是否生效
docker info | grep Mirrors- 尝试直接指定镜像仓库
docker pull registry.docker-cn.com/library/ubuntu:latest6.3 存储空间管理
Docker会占用大量磁盘空间,需要定期清理:
docker system prune -a -f查看磁盘使用情况:
docker system df7. 生产环境建议
7.1 安全加固措施
- 配置TLS加密远程连接
- 启用用户命名空间隔离
- 限制容器资源使用
- 定期更新Docker版本
7.2 监控与日志
建议配置:
- 日志轮转
- 资源监控
- 容器健康检查
示例日志配置:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } EOF8. 进阶配置
8.1 存储驱动选择
根据系统环境选择合适的存储驱动:
docker info | grep "Storage Driver"推荐使用overlay2,如果需要修改:
sudo vim /etc/docker/daemon.json添加:
{ "storage-driver": "overlay2" }8.2 网络配置
查看当前网络配置:
docker network ls创建自定义网络:
docker network create --driver bridge --subnet 172.28.0.0/16 my-net9. 卸载Docker
如果需要完全卸载Docker:
sudo yum remove -y docker-ce docker-ce-cli containerd.io sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd清理残留配置文件:
sudo rm -rf /etc/docker sudo rm -rf /etc/containerd10. 版本升级
升级Docker版本步骤:
- 停止所有容器
docker stop $(docker ps -aq)- 备份重要数据
- 卸载旧版本
- 安装新版本
- 恢复配置
- 启动服务
11. 容器运行时选择
除了默认的containerd,还可以配置其他运行时:
sudo yum install -y cri-o然后在daemon.json中配置:
{ "runtimes": { "crio": { "path": "/usr/bin/crio" } } }12. 性能调优建议
- 调整swappiness参数:
echo 'vm.swappiness = 1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p- 优化文件系统:
sudo tune2fs -O dir_index,has_journal /dev/sda1- 调整内核参数:
echo 'fs.file-max = 1000000' | sudo tee -a /etc/sysctl.conf13. 容器安全扫描
安装安全扫描工具:
docker pull aquasec/trivy扫描镜像漏洞:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy image ubuntu:latest14. 备份与恢复
备份Docker数据:
sudo tar -czvf docker-backup.tar.gz /var/lib/docker恢复数据:
sudo systemctl stop docker sudo rm -rf /var/lib/docker sudo tar -xzvf docker-backup.tar.gz -C / sudo systemctl start docker15. 容器编排准备
安装Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose验证安装:
docker-compose --version16. 生产环境部署检查清单
- [ ] 确认Docker版本符合要求
- [ ] 配置镜像加速
- [ ] 设置���志轮转
- [ ] 配置资源限制
- [ ] 启用监控
- [ ] 配置备份策略
- [ ] 安全加固措施到位
17. 内核要求与检查
Docker对Linux内核有特定要求,检查内核版本:
uname -r推荐内核参数配置:
cat > /etc/sysctl.d/docker.conf <<EOF net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF sudo sysctl --system18. 离线环境安装
对于无法连接互联网的环境:
- 在有网络的环境中下载RPM包:
mkdir -p ~/docker-offline yum install --downloadonly --downloaddir=~/docker-offline docker-ce docker-ce-cli containerd.io- 将目录拷贝到目标机器安装:
sudo yum localinstall -y ~/docker-offline/*.rpm19. 多版本管理
使用yum versionlock管理版本:
sudo yum install -y yum-plugin-versionlock sudo yum versionlock docker-ce查看锁定状态:
sudo yum versionlock list20. 容器网络调试
常用网络调试命令:
# 查看容器IP docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name # 进入容器网络命名空间 docker run -it --net container:container_name nicolaka/netshoot21. 存储卷管理
创建持久化卷:
docker volume create my-vol查看卷详情:
docker volume inspect my-vol22. 容器资源限制
运行容器时限制资源:
docker run -it --cpus="1.5" --memory="512m" ubuntu动态更新限制:
docker update --cpus="2" --memory="1g" container_name23. 容器健康检查
在Dockerfile中添加健康检查:
HEALTHCHECK --interval=30s --timeout=3s \ CMD curl -f http://localhost/ || exit 1查看健康状态:
docker inspect --format='{{json .State.Health}}' container_name24. 容器日志管理
查看容器日志:
docker logs -f --tail 100 container_name按时间筛选日志:
docker logs --since 2023-01-01T00:00:00 container_name25. 容器时区配置
解决容器内时区问题:
docker run -e TZ=Asia/Shanghai -v /etc/localtime:/etc/localtime:ro ubuntu或者在Dockerfile中配置:
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime26. 容器SSH访问
虽然不推荐,但有时需要SSH访问容器:
docker exec -it container_name /bin/bash或者安装SSH服务:
RUN apt-get update && apt-get install -y openssh-server RUN mkdir /var/run/sshd RUN echo 'root:password' | chpasswd EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]27. 容器与主机文件交换
从主机复制到容器:
docker cp host_file container_name:/path/in/container从容器复制到主机:
docker cp container_name:/path/to/file host_path28. 容器环境变量管理
查看容器环境变量:
docker exec container_name env运行时传递变量:
docker run -e VAR1=value1 -e VAR2=value2 ubuntu29. 容器端口映射
查看端口映射:
docker port container_name随机映射端口:
docker run -P nginx指定端口映射:
docker run -p 8080:80 nginx30. 容器资源监控
使用内置命令监控:
docker stats使用cAdvisor全面监控:
docker run -d --name=cadvisor \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:ro \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --publish=8080:8080 \ --detach=true \ google/cadvisor:latest