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和lvm2Docker依赖的存储驱动2.2 设置稳定版仓库推荐使用国内镜像源加速下载这里以阿里云为例sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo然后修改repo文件中的URLsudo sed -i sdownload.docker.commirrors.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.cgroupdriversystemd], 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如果需要完全卸载Dockersudo 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 Composesudo 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 --cpus1.5 --memory512m ubuntu动态更新限制docker update --cpus2 --memory1g container_name23. 容器健康检查在Dockerfile中添加健康检查HEALTHCHECK --interval30s --timeout3s \ 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 TZAsia/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 VAR1value1 -e VAR2value2 ubuntu29. 容器端口映射查看端口映射docker port container_name随机映射端口docker run -P nginx指定端口映射docker run -p 8080:80 nginx30. 容器资源监控使用内置命令监控docker stats使用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 \ --detachtrue \ google/cadvisor:latest
阅读完成 · 觉得有帮助?