第1章:Docker 核心概念
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。
1.1 架构解析
核心组件:
- Client: 用户与 Docker 交互的命令行工具 (CLI)。
- Daemon: 运行在宿主机上的后台进程,负责构建、运行和分发容器。
- Registry: 存储镜像的仓库,默认为 Docker Hub。
1.2 实战:第一个容器
运行一个 Nginx 容器来验证环境:
docker run -d -p 8080:80 --name my-nginx nginx:latest
# -d: 后台运行
# -p: 端口映射 (主机:容器)
# --name: 指定容器名称
1.3 容器生命周期
第2章:镜像构建大师
Dockerfile 是构建 Docker 镜像的蓝图。掌握它,你就能将任何应用容器化。
2.1 镜像分层原理
2.2 Dockerfile 最佳实践示例
示例 1: 简单的 Python Web 应用
# 使用轻量级基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 5000
# 启动命令
CMD ["python", "app.py"]
示例 2: 多阶段构建 (Go语言)
多阶段构建可以显著减小最终镜像体积。
# 阶段 1: 构建阶段
FROM golang:1.19 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp main.go
# 阶段 2: 运行阶段
FROM alpine:latest
WORKDIR /root/
# 只复制编译好的二进制文件
COPY --from=builder /app/myapp .
CMD ["./myapp"]
✅ 操作提示: 始终使用
.dockerignore 文件来排除不需要的文件(如 .git,
node_modules),这能显著加快构建速度。
第3章:网络与存储
3.1 网络模式对比
3.2 数据持久化:Volumes
容器是临时的,数据需要持久化存储。
# 创建卷
docker volume create my-data
# 挂载卷运行容器
docker run -d -v my-data:/var/lib/mysql mysql:5.7
第4章:容器编排 (Compose)
Docker Compose 允许你使用 YAML 文件定义多容器应用。
4.1 服务拓扑图
4.2 docker-compose.yml 示例
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
depends_on:
- app
app:
build: ./app
environment:
- REDIS_HOST=redis
depends_on:
- redis
redis:
image: redis:alpine
volumes:
- redis-data:/data
volumes:
redis-data:
第5章:进阶与安全
5.1 安全最佳实践
- ✅ 非 root 用户: 在 Dockerfile 中创建并切换到普通用户。
- ✅ 镜像扫描: 使用
docker scan检查漏洞。 - ✅ 资源限制: 使用
--memory和--cpus限制容器资源。
5.2 常用调试命令
# 查看容器日志
docker logs -f <container_id>
# 进入运行中的容器
docker exec -it <container_id> /bin/sh
# 查看容器资源占用
docker stats