ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

CentOS下Docker安装与配置全指南

CentOS下Docker安装与配置全指南

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/containerd

2. 配置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.repo

2.3 更新yum缓存

执行以下命令使新仓库生效:

sudo yum makecache fast

经验之谈:如果遇到缓存更新失败,可以尝试先清理旧缓存:

sudo yum clean all

3. 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.io

3.2 验证安装

安装完成后,检查Docker组件是否完整:

rpm -qa | grep docker which docker docker --version

4. 服务管理与配置

4.1 启动Docker服务

启动Docker并设置开机自启:

sudo systemctl start docker sudo systemctl enable docker

检查服务状态:

sudo systemctl status docker

4.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 docker

5.2 用户权限配置

为了避免每次使用docker命令都需要sudo,可以将用户加入docker组:

sudo groupadd docker sudo usermod -aG docker $USER newgrp docker

测试非root用户权限:

docker run hello-world

6. 常见问题排查

6.1 启动失败排查

如果Docker启动失败,可以查看详细日志:

journalctl -xe -u docker

常见问题包括:

  1. 存储驱动不兼容
  2. 防火墙阻止
  3. 端口冲突

6.2 镜像拉取问题

如果遇到镜像拉取慢或失败:

  1. 检查镜像加速配置是否生效
docker info | grep Mirrors
  1. 尝试直接指定镜像仓库
docker pull registry.docker-cn.com/library/ubuntu:latest

6.3 存储空间管理

Docker会占用大量磁盘空间,需要定期清理:

docker system prune -a -f

查看磁盘使用情况:

docker system df

7. 生产环境建议

7.1 安全加固措施

  1. 配置TLS加密远程连接
  2. 启用用户命名空间隔离
  3. 限制容器资源使用
  4. 定期更新Docker版本

7.2 监控与日志

建议配置:

  1. 日志轮转
  2. 资源监控
  3. 容器健康检查

示例日志配置:

sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } EOF

8. 进阶配置

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-net

9. 卸载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/containerd

10. 版本升级

升级Docker版本步骤:

  1. 停止所有容器
docker stop $(docker ps -aq)
  1. 备份重要数据
  2. 卸载旧版本
  3. 安装新版本
  4. 恢复配置
  5. 启动服务

11. 容器运行时选择

除了默认的containerd,还可以配置其他运行时:

sudo yum install -y cri-o

然后在daemon.json中配置:

{ "runtimes": { "crio": { "path": "/usr/bin/crio" } } }

12. 性能调优建议

  1. 调整swappiness参数:
echo 'vm.swappiness = 1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p
  1. 优化文件系统:
sudo tune2fs -O dir_index,has_journal /dev/sda1
  1. 调整内核参数:
echo 'fs.file-max = 1000000' | sudo tee -a /etc/sysctl.conf

13. 容器安全扫描

安装安全扫描工具:

docker pull aquasec/trivy

扫描镜像漏洞:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy image ubuntu:latest

14. 备份与恢复

备份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 docker

15. 容器编排准备

安装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 --version

16. 生产环境部署检查清单

  1. [ ] 确认Docker版本符合要求
  2. [ ] 配置镜像加速
  3. [ ] 设置���志轮转
  4. [ ] 配置资源限制
  5. [ ] 启用监控
  6. [ ] 配置备份策略
  7. [ ] 安全加固措施到位

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 --system

18. 离线环境安装

对于无法连接互联网的环境:

  1. 在有网络的环境中下载RPM包:
mkdir -p ~/docker-offline yum install --downloadonly --downloaddir=~/docker-offline docker-ce docker-ce-cli containerd.io
  1. 将目录拷贝到目标机器安装:
sudo yum localinstall -y ~/docker-offline/*.rpm

19. 多版本管理

使用yum versionlock管理版本:

sudo yum install -y yum-plugin-versionlock sudo yum versionlock docker-ce

查看锁定状态:

sudo yum versionlock list

20. 容器网络调试

常用网络调试命令:

# 查看容器IP docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name # 进入容器网络命名空间 docker run -it --net container:container_name nicolaka/netshoot

21. 存储卷管理

创建持久化卷:

docker volume create my-vol

查看卷详情:

docker volume inspect my-vol

22. 容器资源限制

运行容器时限制资源:

docker run -it --cpus="1.5" --memory="512m" ubuntu

动态更新限制:

docker update --cpus="2" --memory="1g" container_name

23. 容器健康检查

在Dockerfile中添加健康检查:

HEALTHCHECK --interval=30s --timeout=3s \ CMD curl -f http://localhost/ || exit 1

查看健康状态:

docker inspect --format='{{json .State.Health}}' container_name

24. 容器日志管理

查看容器日志:

docker logs -f --tail 100 container_name

按时间筛选日志:

docker logs --since 2023-01-01T00:00:00 container_name

25. 容器时区配置

解决容器内时区问题:

docker run -e TZ=Asia/Shanghai -v /etc/localtime:/etc/localtime:ro ubuntu

或者在Dockerfile中配置:

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

26. 容器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_path

28. 容器环境变量管理

查看容器环境变量:

docker exec container_name env

运行时传递变量:

docker run -e VAR1=value1 -e VAR2=value2 ubuntu

29. 容器端口映射

查看端口映射:

docker port container_name

随机映射端口:

docker run -P nginx

指定端口映射:

docker run -p 8080:80 nginx

30. 容器资源监控

使用内置命令监控:

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
返回列表