一、Docker简介与环境准备
1.1 什么是Docker
Docker是一个开源的容器化平台,它使用Linux内核的cgroup,namespace以及OverlayFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。Docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件。
Docker的核心概念:
- 镜像(Image):Docker镜像是用于创建Docker容器的模板
- 容器(Container):镜像运行时的实体,可以被创建、启动、停止、删除和暂停等
- 仓库(Repository):集中存放镜像文件的场所
Linux中Docker的优势:
- 轻量级虚拟化,资源利用率高
- 快速部署和扩缩容
- 环境一致性,解决"在我机器上能跑"的问题
- 便于DevOps实践和微服务架构
1.2 系统环境要求
支持的Linux发行版:
- Ubuntu 18.04 LTS及以上版本
- CentOS 7/8/Stream
- RHEL 7/8/9
- Debian 9及以上版本
- Fedora 32及以上版本
内核版本要求:
- 最低内核版本:3.10
- 推荐内核版本:4.0及以上
- 必须启用cgroups和namespace功能
硬件资源要求:
- 最小内存:512MB(推荐2GB以上)
- 磁盘空间:至少10GB可用空间
- CPU架构:x86_64或ARM64
1.3 安装前的系统检查
检查系统版本和内核:
# 查看系统版本
cat /etc/os-release
lsb_release -a# 查看内核版本
uname -r# 检查内核是否支持Docker
docker version
卸载旧版本Docker:
# Ubuntu/Debian系统
sudo apt-get remove docker docker-engine docker.io containerd runc# CentOS/RHEL系统
sudo yum remove docker docker-client docker-client-latest docker-common \docker-latest docker-latest-logrotate docker-logrotate docker-engine
二、Docker安装步骤详解
2.1 Ubuntu/Debian系统安装
方法一:官方仓库安装(推荐)
# 1. 更新包索引
sudo apt-get update# 2. 安装必要的依赖包
sudo apt-get install \ca-certificates \curl \gnupg \lsb-release# 3. 添加Docker官方GPG密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg# 4. 设置稳定版仓库
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 5. 更新包索引
sudo apt-get update# 6. 安装Docker Engine
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
方法二:脚本一键安装
# 下载并执行官方安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh# 国内用户可使用阿里云脚本
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2.2 CentOS/RHEL系统安装
yum仓库安装:
# 1. 安装yum-utils包
sudo yum install -y yum-utils# 2. 设置稳定版仓库
sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo# 3. 安装Docker Engine
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin# 4. 启动Docker
sudo systemctl start docker
sudo systemctl enable docker
CentOS 8/Stream使用dnf:
# 安装dnf-plugins-core包
sudo dnf install dnf-plugins-core# 添加Docker仓库
sudo dnf config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo# 安装Docker
sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
2.3 其他Linux发行版安装
Fedora系统:
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager \--add-repo \https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Arch Linux系统:
sudo pacman -S docker
sudo systemctl start docker.service
sudo systemctl enable docker.service
三、Docker服务配置与启动
3.1 Docker守护进程配置
systemd服务配置:
# 启动Docker服务
sudo systemctl start docker# 设置开机自启动
sudo systemctl enable docker# 查看服务状态
sudo systemctl status docker# 重启服务
sudo systemctl restart docker
daemon.json配置文件:
创建或编辑/etc/docker/daemon.json
文件:
{"data-root": "/var/lib/docker","log-driver": "json-file","log-opts": {"max-size": "100m","max-file": "3"},"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"],"exec-opts": ["native.cgroupdriver=systemd"],"storage-driver": "overlay2"
}
3.2 用户权限配置
将用户加入docker组:
# 创建docker组(通常安装时会自动创建)
sudo groupadd docker# 将当前用户加入docker组
sudo usermod -aG docker $USER# 注销后重新登录,或使用以下命令刷新组成员身份
newgrp docker# 测试无sudo运行docker命令
docker run hello-world
3.3 镜像源配置
国内镜像加速器配置:
常用的镜像加速器:
- 阿里云:https://cr.console.aliyun.com/
- 腾讯云:https://mirror.ccs.tencentyun.com
- 中科大:https://docker.mirrors.ustc.edu.cn
- 网易:https://hub-mirror.c.163.com
配置方法:
# 创建或修改daemon.json
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com"]
}
EOF# 重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
四、Docker环境验证与测试
4.1 安装验证
版本检查命令:
# 查看Docker版本
docker --version
docker version# 查看详细信息
docker info# 查看系统信息
docker system info
Hello World容器测试:
# 运行测试容器
docker run hello-world# 查看运行中的容器
docker ps# 查看所有容器(包括已停止的)
docker ps -a# 查看镜像列表
docker images
4.2 网络配置验证
网桥配置检查:
# 查看Docker网络
docker network ls# 查看默认bridge网络详情
docker network inspect bridge# 查看系统网络接口
ip addr show docker0
端口映射测试:
# 运行nginx容器并映射端口
docker run -d -p 8080:80 --name test-nginx nginx# 测试端口连通性
curl http://localhost:8080# 停止并删除测试容器
docker stop test-nginx
docker rm test-nginx
五、重要注意事项
5.1 安全注意事项
Docker守护进程安全配置:
- 不要在生产环境中将Docker守护进程暴露在公网
- 使用TLS加密Docker守护进程通信
- 定期更新Docker版本以获取安全补丁
# 配置TLS加密
sudo dockerd \--tlsverify \--tlscacert=ca.pem \--tlscert=server-cert.pem \--tlskey=server-key.pem \-H=0.0.0.0:2376
容器运行安全:
- 避免以root用户运行容器
- 使用最小权限原则
- 定期扫描镜像漏洞
5.2 性能优化注意事项
存储驱动选择:
- 推荐使用overlay2存储驱动
- 确保文件系统支持(ext4、xfs等)
资源限制配置:
# 限制容器内存使用
docker run -m 512m nginx# 限制CPU使用
docker run --cpus="1.5" nginx# 设置存储限制
docker run --storage-opt size=10G nginx
5.3 生产环境注意事项
日志轮转配置:
{"log-driver": "json-file","log-opts": {"max-size": "10m","max-file": "3"}
}
监控配置:
- 配置容器资源监控
- 设置日志收集
- 建立告警机制
六、常见问题排除
6.1 安装过程问题
问题1:依赖包冲突
# 错误信息
Package docker-ce conflicts with docker# 解决方案
sudo yum remove docker
sudo yum install docker-ce
问题2:权限不足问题
# 错误信息
Got permission denied while trying to connect to the Docker daemon socket# 解决方案
sudo usermod -aG docker $USER
newgrp docker
问题3:网络连接问题
# 错误信息
Could not connect to download.docker.com# 解决方案:使用国内源
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
6.2 运行时问题
问题1:容器启动失败
# 查看容器日志
docker logs <container_id># 查看详细错误信息
docker events --filter container=<container_name># 检查容器配置
docker inspect <container_id>
问题2:端口占用问题
# 查看端口占用
sudo netstat -tulpn | grep <port>
sudo ss -tulpn | grep <port># 查找并停止占用端口的进程
sudo fuser -k <port>/tcp
问题3:存储空间问题
# 查看Docker磁盘使用情况
docker system df# 清理无用数据
docker system prune -a# 清理无用卷
docker volume prune# 清理无用网络
docker network prune
6.3 性能问题排查
容器资源占用过高:
# 查看容器资源使用情况
docker stats# 查看详细资源使用
docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"# 限制容器资源
docker update --memory 512m --cpus 1 <container_id>
网络延迟问题:
# 检查DNS设置
docker run --rm busybox nslookup google.com# 测试网络连通性
docker run --rm busybox ping -c 4 8.8.8.8# 检查Docker网络配置
docker network inspect bridge
七、最佳实践与运维建议
7.1 Docker运维最佳实践
镜像管理策略:
- 使用官方镜像作为基础镜像
- 定期更新和清理无用镜像
- 使用多阶段构建减小镜像大小
# 多阶段构建示例
FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm installFROM node:16-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
容器生命周期管理:
# 健康检查配置
docker run -d \--health-cmd="curl -f http://localhost/ || exit 1" \--health-interval=30s \--health-timeout=10s \--health-retries=3 \nginx# 自动重启策略
docker run -d --restart=unless-stopped nginx
7.2 故障排查工具与方法
日志分析工具:
# 实时查看日志
docker logs -f <container_name># 查看最近的日志
docker logs --tail 100 <container_name># 查看指定时间的日志
docker logs --since 2023-01-01T00:00:00 <container_name>
性能监控工具:
# 安装docker-compose用于监控栈
sudo apt install docker-compose# 使用ctop监控容器
docker run --rm -ti \--name=ctop \--volume /var/run/docker.sock:/var/run/docker.sock:ro \quay.io/vektorlab/ctop:latest
调试命令集合:
# 进入运行中的容器
docker exec -it <container_name> /bin/bash# 查看容器进程
docker top <container_name># 检查容器文件系统变化
docker diff <container_name># 导出容器文件系统
docker export <container_name> > container.tar# 查看镜像构建历史
docker history <image_name>
总结:
Docker在Linux系统中的安装和配置是一个系统性工程,需要考虑系统环境、安全性、性能优化等多个方面。通过本文的详细介绍,相信大家能够成功安装和配置Docker环境,并具备基本的故障排查能力。
在实际生产环境中,建议:
- 定期备份重要数据
- 建立完善的监控体系
- 制定应急预案
- 保持Docker版本更新
- 关注安全漏洞和补丁
希望这篇文章能够帮助大家更好地使用Docker技术,提升开发和运维效率。