一、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 安装前的系统检查
检查系统版本和内核:
bash
# 查看系统版本
cat /etc/os-release
lsb_release -a
# 查看内核版本
uname -r
# 检查内核是否支持Docker
docker version
卸载旧版本Docker:
bash
# 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系统安装
方法一:官方仓库安装(推荐)
bash
# 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
方法二:脚本一键安装
bash
# 下载并执行官方安装脚本
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仓库安装:
bash
# 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:
bash
# 安装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系统:
bash
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系统:
bash
sudo pacman -S docker
sudo systemctl start docker.service
sudo systemctl enable docker.service
三、Docker服务配置与启动
3.1 Docker守护进程配置
systemd服务配置:
bash
# 启动Docker服务
sudo systemctl start docker
# 设置开机自启动
sudo systemctl enable docker
# 查看服务状态
sudo systemctl status docker
# 重启服务
sudo systemctl restart docker
daemon.json配置文件:
创建或编辑/etc/docker/daemon.json
文件:
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组:
bash
# 创建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
配置方法:
bash
# 创建或修改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 安装验证
版本检查命令:
bash
# 查看Docker版本
docker --version
docker version
# 查看详细信息
docker info
# 查看系统信息
docker system info
Hello World容器测试:
bash
# 运行测试容器
docker run hello-world
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
# 查看镜像列表
docker images
4.2 网络配置验证
网桥配置检查:
bash
# 查看Docker网络
docker network ls
# 查看默认bridge网络详情
docker network inspect bridge
# 查看系统网络接口
ip addr show docker0
端口映射测试:
bash
# 运行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版本以获取安全补丁
bash
# 配置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等)
资源限制配置:
bash
# 限制容器内存使用
docker run -m 512m nginx
# 限制CPU使用
docker run --cpus="1.5" nginx
# 设置存储限制
docker run --storage-opt size=10G nginx
5.3 生产环境注意事项
日志轮转配置:
json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
监控配置:
- 配置容器资源监控
- 设置日志收集
- 建立告警机制
六、常见问题排除
6.1 安装过程问题
问题1:依赖包冲突
bash
# 错误信息
Package docker-ce conflicts with docker
# 解决方案
sudo yum remove docker
sudo yum install docker-ce
问题2:权限不足问题
bash
# 错误信息
Got permission denied while trying to connect to the Docker daemon socket
# 解决方案
sudo usermod -aG docker $USER
newgrp docker
问题3:网络连接问题
bash
# 错误信息
Could not connect to download.docker.com
# 解决方案:使用国内源
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
6.2 运行时问题
问题1:容器启动失败
bash
# 查看容器日志
docker logs <container_id>
# 查看详细错误信息
docker events --filter container=<container_name>
# 检查容器配置
docker inspect <container_id>
问题2:端口占用问题
bash
# 查看端口占用
sudo netstat -tulpn | grep <port>
sudo ss -tulpn | grep <port>
# 查找并停止占用端口的进程
sudo fuser -k <port>/tcp
问题3:存储空间问题
bash
# 查看Docker磁盘使用情况
docker system df
# 清理无用数据
docker system prune -a
# 清理无用卷
docker volume prune
# 清理无用网络
docker network prune
6.3 性能问题排查
容器资源占用过高:
bash
# 查看容器资源使用情况
docker stats
# 查看详细资源使用
docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"
# 限制容器资源
docker update --memory 512m --cpus 1 <container_id>
网络延迟问题:
bash
# 检查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运维最佳实践
镜像管理策略:
- 使用官方镜像作为基础镜像
- 定期更新和清理无用镜像
- 使用多阶段构建减小镜像大小
dockerfile
# 多阶段构建示例
FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
FROM node:16-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
容器生命周期管理:
bash
# 健康检查配置
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 故障排查工具与方法
日志分析工具:
bash
# 实时查看日志
docker logs -f <container_name>
# 查看最近的日志
docker logs --tail 100 <container_name>
# 查看指定时间的日志
docker logs --since 2023-01-01T00:00:00 <container_name>
性能监控工具:
bash
# 安装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
调试命令集合:
bash
# 进入运行中的容器
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技术,提升开发和运维效率。