Docker 从入门到精通:一篇彻底搞懂容器化技术
适用人群:开发、测试、运维、DevOps 工程师
目标:掌握 Docker 核心概念、常用命令、实战技巧与生产最佳实践
环境要求:Linux / macOS / Windows(WSL2)
一、为什么需要 Docker?
🚫 传统部署的痛点
- “在我机器上能跑!” → 环境不一致(依赖、版本、配置)
- 资源浪费 → 虚拟机开销大(GB 级内存)
- 部署慢 → 手动配置耗时易错
- 扩展难 → 无法快速横向扩容
✅ Docker 的解决方案

💡 核心思想:一次构建,随处运行(Build Once, Run Anywhere)
二、Docker 核心概念(5 分钟理解)
1. 镜像(Image)
- 只读模板,包含运行应用所需的所有内容(代码、运行时、库、环境变量、配置文件)
- 类似 Java 的 JAR 包 或 操作系统的 ISO 镜像
- 分层存储(Layered FS),复用率高
2. 容器(Container)
- 镜像的运行实例
- 轻量、可启动/停止/删除
- 每个容器有独立的文件系统、网络、进程空间
3. Dockerfile
- 文本文件,定义如何构建镜像(类似 Makefile)
- 包含一系列指令(
FROM,RUN,COPY,EXPOSE...)
4. 仓库(Registry)
- 存储和分发镜像的服务
- 公共:Docker Hub(hub.docker.com)
- 私有:Harbor、Nexus、AWS ECR
5. Docker Daemon
- 后台服务进程,管理镜像、容器、网络、存储

三、安装 Docker
Linux(Ubuntu/CentOS)
# Ubuntu
sudo apt update
sudo apt install docker.io
sudo systemctl enable --now docker
# CentOS
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
macOS / Windows
- 下载 Docker Desktop
- 启用 WSL2(Windows 必需)
验证安装
docker --version # 查看版本
docker run hello-world # 运行测试容器
🔑 权限问题?将用户加入
docker组:sudo usermod -aG docker $USER && newgrp docker
四、Docker 基础命令速查

五、实战:构建你的第一个应用
步骤 1:编写简单 Python 应用(app.py)
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello from Docker! "
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
步骤 2:创建 requirements.txt
Flask==2.3.2
步骤 3:编写 Dockerfile
# 基础镜像
FROM python:3.11-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件
COPY requirements.txt .
# 安装依赖(使用国内源加速)
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 5000
# 启动命令
CMD ["python", "app.py"]
步骤 4:构建并运行
# 构建镜像(注意末尾的 . )
docker build -t my-flask-app .
# 运行容器(映射端口 5000:5000)
docker run -d -p 5000:5000 --name my-app my-flask-app
# 访问 http://localhost:5000
curl http://localhost:5000
✅ 成功!你已掌握 Docker 核心工作流。
六、关键进阶功能
1. 数据持久化:Volumes
容器删除后数据丢失?用 Volume!
# 创建命名卷
docker volume create my-vol
# 挂载到容器
docker run -d -v my-vol:/app/data nginx
# 查看卷位置
docker volume inspect my-vol
💡 最佳实践:数据库、日志、上传文件等必须用 Volume!
2. 网络通信
- bridge(默认):容器间通过 IP 通信
- host:共享 Host 网络(高性能,但无隔离)
- 自定义网络(推荐):支持 DNS 解析
# 创建自定义网络
docker network create my-net
# 启动容器加入网络
docker run -d --network my-net --name db mysql
docker run -d --network my-net --name app my-flask-app
# 在 app 中可直接 ping db
3. 环境变量与配置
# Dockerfile 中设置默认值
ENV PORT=5000
# 运行时覆盖
docker run -e PORT=8080 my-app
4. 多阶段构建(减小镜像体积)
# 第一阶段:构建
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
# 第二阶段:运行
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
CMD ["node", "server.js"]
⚡ 镜像体积减少 70%+!
七、Docker Compose:编排多容器应用
场景:Flask + Redis + Nginx
docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
environment:
- REDIS_HOST=redis
depends_on:
- redis
redis:
image: redis:alpine
volumes:
- redis-data:/data
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- web
volumes:
redis-data:
启动整个应用
docker-compose up -d # 后台启动
docker-compose logs -f web # 查看日志
docker-compose down # 停止并删除
✅ 一行命令管理复杂应用!
八、生产环境最佳实践
🔒 安全
- 不要用 root 用户运行容器
RUN adduser -D myuser USER myuser - 扫描镜像漏洞
docker scan my-app - 最小化基础镜像:优先用
-alpine或distroless
🚀 性能
- .dockerignore:排除无关文件(如
.git,node_modules) - 合并 RUN 指令:减少镜像层数
# ❌ 错误 RUN apt update RUN apt install -y curl # ✅ 正确 RUN apt update && apt install -y curl && rm -rf /var/lib/apt/lists/*
📦 镜像管理
- 语义化标签:
my-app:v1.2.0而非latest - 私有仓库:敏感镜像不上 Docker Hub
🛠️ 监控
- 日志驱动:集成 ELK / Loki
- 指标暴露:Prometheus + cAdvisor
九、常见问题排查
❌ 容器启动失败?
docker logs <container> # 查看错误日志
docker run -it --rm my-app sh # 进入调试模式
❌ 端口被占用?
lsof -i :5000 # Linux/macOS
netstat -ano | findstr :5000 # Windows
❌ 镜像太大?
- 使用
dive分析镜像层:dive my-app
❌ 网络不通?
docker network inspect my-net # 检查 IP 分配
docker exec -it app ping redis # 测试连通性
十、学习路线图

结语
Docker 不是银弹,但它是现代软件交付的基石技术。掌握它,你将:
- ✅ 告别“环境问题”
- ✅ 提升开发部署效率
- ✅ 为云原生(K8s)打下坚实基础
记住:
“Don’t learn Docker to use Docker. Learn Docker to ship better software.”
附:速查 Cheat Sheet
📥 下载 PDF 版命令速查表
🐙 GitHub 示例代码仓库
现在,打开终端,输入 docker run -it ubuntu bash,开始你的容器之旅吧! 🐳
浙公网安备 33010602011771号