Docker Full Stack Manual

从零基础到生产级容器化应用的终极指南

START LEARNING

第1章:Docker 核心概念

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。

1.1 架构解析

DOCKER CLIENT docker build docker pull docker run DOCKER HOST Docker Daemon Images & Containers REGISTRY Docker Hub REST API Pull/Push
核心组件:
  • 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 容器生命周期

Created Running Paused Stopped Deleted start pause unpause stop start rm

第2章:镜像构建大师

Dockerfile 是构建 Docker 镜像的蓝图。掌握它,你就能将任何应用容器化。

2.1 镜像分层原理

Base Image (Ubuntu) [RO] Add Python [RO] Copy App Code [RO] Container Layer [Read/Write] Bottom Top

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 网络模式对比

Bridge (Default) docker0 Container Host Container Direct Host IP None Container No Network

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 服务拓扑图

Nginx Node.js Redis

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