1. Docker 核心概念与安装前准备
Docker作为当前最流行的容器化技术,本质上是一个轻量级的虚拟化解决方案。与传统的虚拟机不同,Docker容器直接共享主机操作系统内核,通过命名空间和控制组(cgroups)实现资源隔离,这使得容器启动速度极快(通常只需毫秒级),资源占用也远低于虚拟机。
在开始安装前,需要确认几个关键事项:
-
系统架构检查:现代Docker要求64位操作系统。在Linux终端执行
uname -m应显示x86_64或arm64等64位架构标识。对于Windows系统,需要确认使用的是专业版/企业版/教育版,家庭版需要通过WSL2间接支持。 -
虚拟化支持验证:这是安装失败的高频原因。在BIOS中需要开启VT-x(Intel)或AMD-V(AMD)虚拟化技术。Windows用户可通过任务管理器→性能标签页查看虚拟化是否已启用;Linux用户可检查
/proc/cpuinfo中的vmx或svm标志。 -
存储驱动选择:不同Linux发行版有推荐的存储驱动。例如Ubuntu默认使用overlay2,CentOS 7推荐devicemapper。可通过
lsmod | grep overlay检查内核模块加载情况。 -
用户权限规划:默认情况下,Docker需要root权限运行。生产环境中建议创建docker用户组并将运维用户加入该组(
sudo usermod -aG docker $USER),避免直接使用root操作。
重要提示:Windows家庭版用户需要先安装WSL2(Windows Subsystem for Linux 2),这是Docker Desktop的强制依赖项。可通过
wsl --install命令自动安装最新版WSL。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Linux系统Docker安装全流程
2.1 基于APT的发行版(Ubuntu/Debian)
对于Debian系系统,推荐使用官方仓库安装:
bash复制# 卸载旧版本(如有)
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安装依赖工具
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
# 添加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
# 设置稳定版仓库
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
# 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 验证安装
sudo docker run hello-world
常见问题处理:
- 如果遇到
GPG error: NO_PUBKEY错误,执行sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <缺失的密钥ID> - 对于ARM架构设备(如树莓派),需要将仓库URL中的
ubuntu替换为raspbian
2.2 基于RPM的发行版(CentOS/RHEL)
CentOS系统的安装流程略有不同:
bash复制# 卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装yum工具集
sudo yum install -y yum-utils
# 添加官方仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker引擎
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
sudo docker run hello-world
对于CentOS 7用户需特别注意:
- 如果内核版本低于3.10,需要先升级内核:
sudo yum update kernel - 可能需要手动加载overlay模块:
sudo modprobe overlay - 如果使用devicemapper存储驱动,建议配置LVM thin pool以获得更好性能
3. Windows/macOS平台安装指南
3.1 Windows系统安装要点
Windows平台通过Docker Desktop提供完整体验:
- 访问docker.com/products/docker-desktop下载最新安装包
- 双击安装包运行,勾选"Use WSL 2 instead of Hyper-V"(推荐)
- 安装完成后,可能需要重启系统
- 首次启动时会提示启用WSL2功能,按向导操作即可
典型问题解决方案:
- 错误"Virtualization not enabled":进入BIOS开启VT-x/AMD-V,并禁用Hyper-V相关功能
- WSL2安装失败:手动下载wsl_update_x64.msi更新包
- 端口冲突:Docker默认使用443端口,与IIS等服务冲突时可修改
%USERPROFILE%\.docker\daemon.json
3.2 macOS安装注意事项
Mac用户同样使用Docker Desktop:
- 根据芯片类型选择Intel或Apple Silicon版本
- 拖拽应用图标到Applications文件夹
- 首次启动需在安全性与隐私设置中批准内核扩展
- 建议在Preferences→Resources中调整CPU/内存分配(默认设置可能不足)
性能优化技巧:
- 启用VirtioFS文件共享(Experimental→VirtioFS)
- 对于M1/M2芯片,选择"Use Rosetta for x86/amd64 emulation"以兼容传统镜像
- 在Docker Desktop→Settings→Docker Engine中可配置镜像加速器
4. 安装后关键配置与验证
4.1 镜像加速器配置
国内用户建议配置镜像仓库加速器,创建或修改/etc/docker/daemon.json(Linux/macOS)或通过Docker Desktop界面配置:
json复制{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
],
"insecure-registries": [],
"debug": false,
"experimental": false
}
配置生效命令:
bash复制sudo systemctl daemon-reload
sudo systemctl restart docker
4.2 用户权限管理
为避免每次使用sudo执行docker命令:
bash复制sudo groupadd docker # 如果docker组不存在
sudo usermod -aG docker $USER
newgrp docker # 刷新组权限
验证权限:
bash复制docker ps # 应能正常列出容器
4.3 核心组件验证
检查Docker各组件版本及状态:
bash复制docker --version
docker-compose --version
docker system info
关键指标检查:
- Storage Driver是否正常(推荐overlay2)
- Total Memory是否识别正确
- Kernel Version是否符合要求
- Cgroup Driver是否为systemd(Kubernetes兼容性需要)
4.4 防火墙配置
如果使用防火墙,需要放行相关端口:
bash复制# CentOS/RHEL
sudo firewall-cmd --permanent --zone=public --add-port=2375/tcp
sudo firewall-cmd --permanent --zone=public --add-port=2376/tcp
sudo firewall-cmd --reload
# Ubuntu
sudo ufw allow 2375/tcp
sudo ufw allow 2376/tcp
sudo ufw reload
5. 常见问题深度排错指南
5.1 启动失败:Virtualization Support Not Detected
这是Windows平台最常见错误,完整解决流程:
-
确认BIOS设置:
- 重启进入BIOS(通常按F2/DEL键)
- 找到Intel VT-x或AMD-V选项并启用
- 保存退出
-
检查Windows功能:
powershell复制dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart -
验证WSL状态:
powershell复制wsl --set-default-version 2 wsl --list --verbose -
最终验证:
- 任务管理器→性能标签页应显示"虚拟化:已启用"
- 运行
systeminfo命令检查Hyper-V要求是否全部满足
5.2 Docker Daemon启动失败排查
Linux系统服务启动失败的诊断步骤:
bash复制# 查看服务状态
sudo systemctl status docker
# 查看完整日志
sudo journalctl -u docker --no-pager -n 100
# 常见错误处理
## 存储驱动问题
sudo dockerd --debug # 前台运行查看详细错误
## 端口冲突
sudo netstat -tulnp | grep 2375
## 存储空间不足
docker info | grep -i space
5.3 镜像拉取超时问题
当docker pull速度缓慢时:
-
测试直接访问镜像仓库:
bash复制
curl -v https://registry-1.docker.io/v2/ -
临时使用HTTP拉取(不推荐长期使用):
bash复制
docker pull --platform linux/amd64 hello-world -
配置代理(如有需要):
bash复制mkdir -p /etc/systemd/system/docker.service.d cat > /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF [Service] Environment="HTTP_PROXY=http://proxy.example.com:8080" Environment="HTTPS_PROXY=http://proxy.example.com:8080" EOF sudo systemctl daemon-reload sudo systemctl restart docker
6. 生产环境关键配置建议
6.1 日志管理配置
避免容器日志占用过多磁盘空间:
json复制{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
检查日志占用情况:
bash复制docker system df
docker ps -q | xargs docker inspect --format='{{.LogPath}}' | xargs ls -lh
6.2 存储卷优化
对于数据库等IO敏感型应用:
bash复制# 创建专用存储卷
docker volume create --driver local \
--opt type=tmpfs \
--opt device=tmpfs \
--opt o=size=100m,uid=1000 \
my_volume
# 检查卷使用情况
docker volume inspect my_volume
6.3 资源限制配置
通过cgroups限制容器资源:
bash复制# 运行带资源限制的容器
docker run -it --cpus=1.5 --memory=2g --memory-swap=3g alpine sh
# 动态更新运行中容器的限制
docker update --cpus 2 --memory 4g my_container
6.4 安全加固措施
-
启用用户命名空间隔离:
bash复制sudo echo "dockremap:165536:65536" >> /etc/subuid sudo echo "dockremap:165536:65536" >> /etc/subgid -
配置容器运行时保护:
json复制{ "userns-remap": "dockremap", "no-new-privileges": true } -
定期扫描镜像漏洞:
bash复制
docker scan hello-world
7. 进阶:Docker Compose与多环境部署
7.1 Compose文件编写规范
典型的多服务编排示例(docker-compose.yml):
yaml复制version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- frontend
deploy:
resources:
limits:
cpus: '0.5'
memory: 256M
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: example
volumes:
- db_data:/var/lib/postgresql/data
networks:
- backend
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
networks:
frontend:
backend:
volumes:
db_data:
关键参数说明:
deploy.resources:替代旧的cpus/mem_limit参数healthcheck:定义服务健康检查标准networks:隔离前端与后端网络流量
7.2 多环境配置管理
通过环境变量文件实现差异化配置:
-
创建公共基础文件(.env.common):
ini复制TZ=Asia/Shanghai LOG_LEVEL=info -
开发环境配置(.env.dev):
ini复制COMPOSE_PROJECT_NAME=myapp_dev DB_HOST=db DB_PORT=5432 -
生产环境配置(.env.prod):
ini复制COMPOSE_PROJECT_NAME=myapp_prod DB_HOST=prod.db.example.com DB_PORT=5432 -
启动时指定环境:
bash复制
docker-compose --env-file .env.dev up
8. 容器监控与性能分析
8.1 基础监控命令
bash复制# 实时查看容器资源占用
docker stats
# 查看容器详细配置
docker inspect <container_id>
# 分析容器进程树
docker top <container_id>
# 检查容器文件改动
docker diff <container_id>
8.2 高级监控方案
使用cAdvisor+Prometheus+Grafana搭建监控平台:
-
启动cAdvisor收集容器指标:
bash复制docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:ro \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --volume=/dev/disk/:/dev/disk:ro \ --publish=8080:8080 \ --detach=true \ --name=cadvisor \ --privileged \ --device=/dev/kmsg \ gcr.io/cadvisor/cadvisor:v0.47.0 -
配置Prometheus抓取目标:
yaml复制scrape_configs: - job_name: 'docker' static_configs: - targets: ['cadvisor:8080'] -
Grafana仪表板导入ID:193(Docker容器监控)
8.3 性能瓶颈分析
使用perf工具分析容器性能:
bash复制# 在宿主机安装perf
sudo apt install linux-tools-common linux-tools-generic
# 分析容器进程
docker run -it --rm --cap-add SYS_ADMIN --pid=host alpine sh
apk add perf
perf top -p $(pgrep dockerd)
关键指标解读:
- 高CPU使用率检查syscall频率
- 内存泄漏观察RSS增长曲线
- IO瓶颈关注await和%util值
