1. Docker核心概念与部署价值
Docker本质上是一个开源的容器化平台,它通过操作系统级虚拟化技术实现应用隔离。与传统虚拟机相比,Docker容器直接共享主机系统内核,这使得容器启动速度能达到秒级,资源占用仅为MB级别。我在生产环境中实测发现,同一台物理机上Docker容器的部署密度可达传统VM的5-8倍。
典型应用场景包括:
- 开发环境标准化(解决"在我机器上能跑"的问题)
- 微服务架构支撑(每个服务独立容器化)
- CI/CD流水线构建(标准化测试与发布环境)
- 快速水平扩展(秒级启动新实例)
2. 安装部署全流程详解
2.1 环境准备与依赖检查
不同操作系统安装前需要确认:
- Linux系统:内核版本≥3.10(
uname -r查看) - Windows 10/11:需开启Hyper-V和容器功能
- macOS:要求10.13及以上版本
重要提示:Windows家庭版需安装Docker Desktop替代方案,建议使用WSL2后端
2.2 各平台安装实操
Ubuntu/Debian系安装示例:
# 卸载旧版本 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-worldCentOS/RHEL系特别注意:
# 必须配置存储驱动 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF3. 核心组件与日常操作
3.1 Docker架构三要素
镜像(Images):只读模板
- 分层存储结构(UnionFS)
- 常用操作:
docker pull nginx:alpine # 拉取镜像 docker image ls # 列出镜像 docker image prune # 清理悬空镜像
容器(Containers):镜像的运行实例
- 生命周期管理命令:
docker run -d -p 80:80 --name web nginx:alpine docker ps -a docker stop web docker rm web
- 生命周期管理命令:
仓库(Registry):镜像分发系统
- 国内加速源配置:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://registry.docker-cn.com"] } EOF sudo systemctl restart docker
- 国内加速源配置:
3.2 容器网络实战
四种网络模式对比:
| 模式 | 特点 | 适用场景 |
|---|---|---|
| bridge | 默认NAT网络 | 单机多容器通信 |
| host | 共享主机网络 | 高性能需求 |
| none | 无网络 | 特殊安全场景 |
| overlay | 跨主机网络 | Swarm/K8s集群 |
创建自定义网络示例:
docker network create --driver bridge --subnet 172.28.0.0/16 my-net docker run -d --net=my-net --ip 172.28.1.2 redis4. 生产环境最佳实践
4.1 镜像优化技巧
- 多阶段构建示例(Go应用):
# 构建阶段 FROM golang:1.18 as builder WORKDIR /app COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o myapp # 运行阶段 FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY --from=builder /app/myapp . CMD ["./myapp"]- 体积优化前后对比:
- 原始镜像:1.2GB(含SDK和源码)
- 优化后:12MB(仅含二进制和基础运行时)
4.2 持久化存储方案
数据卷管理策略:
# 创建命名卷 docker volume create mysql_data # 使用卷启动容器 docker run -d \ --name mysql \ -v mysql_data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=secret \ mysql:5.7 # 备份卷数据 docker run --rm \ -v mysql_data:/source \ -v $(pwd):/backup \ alpine tar czf /backup/mysql_backup.tar.gz -C /source .5. 故障排查指南
5.1 常见错误处理
权限拒绝错误:
# 将当前用户加入docker组 sudo usermod -aG docker $USER newgrp docker端口冲突解决:
# 查找占用端口的进程 sudo lsof -i :8080 # 或者 sudo netstat -tulnp | grep 8080容器日志分析:
docker logs -f --tail 100 container_name docker inspect container_name | grep -i error
5.2 性能监控方案
推荐监控栈组合:
# 启动Prometheus监控 docker run -d -p 9090:9090 \ -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus # 配套Grafana可视化 docker run -d -p 3000:3000 \ -v grafana-storage:/var/lib/grafana \ grafana/grafana-enterprise关键监控指标包括:
- 容器CPU使用率(container_cpu_usage_seconds_total)
- 内存占用(container_memory_working_set_bytes)
- 网络I/O(container_network_receive_bytes_total)
- 块设备I/O(container_fs_writes_bytes_total)