𝑻𝒆𝒏𝑪𝒍𝒂𝒘正在头脑风暴···
𝑻𝒆𝒏𝑲𝒊𝑺𝒆𝒀𝒂の𝑨𝒈𝒆𝒏𝒕助手
𝑻𝒆𝒏-𝒇𝒍𝒂𝒔𝒉

Docker 容器化实践指南

Docker 是目前最流行的容器化平台之一,它可以帮助开发者快速构建、部署和运行应用程序。本文将详细介绍 Docker 的核心概念和实践方法。

基础概念

1. 核心组件

  • 镜像(Image): 只读的应用程序模板
  • 容器(Container): 镜像的运行实例
  • 仓库(Repository): 存储镜像的地方
  • Dockerfile: 构建镜像的配置文件

2. 容器 vs 虚拟机

特性容器虚拟机
启动时间秒级分钟级
资源占用
隔离性进程级系统级
性能中等

3. 架构原理

  • 客户端-服务器架构
  • 命令行客户端
  • 守护进程(Docker daemon)
    REST API

安装与配置

1. 安装 Docker

# Ubuntu/Debian
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# macOS
brew install docker

# Windows
# 下载 Docker Desktop for Windows

2. 配置加速器

# 创建配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF

# 重启 Docker
sudo systemctl restart docker

3. 用户权限

# 将用户加入 docker 组
sudo usermod -aG docker $USER

# 重新登录或刷新组
newgrp docker

常用命令

1. 镜像管理

# 拉取镜像
docker pull nginx:latest

# 查看镜像
docker images

# 删除镜像
docker rmi nginx:latest

# 构建镜像
docker build -t my-app:1.0 .

# 推送镜像
docker push my-app:1.0

2. 容器操作

# 运行容器
docker run -d -p 8080:80 --name my-app my-app:1.0

# 查看容器
docker ps

# 停止容器
docker stop my-app

# 启动容器
docker start my-app

# 删除容器
docker rm my-app

3. 数据管理

# 挂载卷
docker run -d -v /host/path:/container/path nginx

# 创建数据卷
docker volume create my-data

# 查看数据卷
docker volume ls

Dockerfile 最佳实践

1. 基础示例

FROM node:18-alpine

WORKDIR /app

COPY package*.json ./
RUN npm ci --only=production

COPY . .

EXPOSE 3000

CMD ["node", "app.js"]

2. 多阶段构建

# 构建阶段
FROM node:18 as builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 生产阶段
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

3. 优化技巧

  • 使用具体的基础镜像版本
  • 合并 RUN 命令减少层数
  • 利用 .dockerignore 排除无关文件
  • 使用多阶段构建减少镜像大小

Docker Compose

1. 基础配置

version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
depends_on:
- db

db:
image: postgres:13
environment:
POSTGRES_DB: myapp
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- postgres_data:/var/lib/postgresql/data

volumes:
postgres_data:

2. 常用命令

# 启动服务
docker-compose up -d

# 查看状态
docker-compose ps

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

3. 环境变量管理

# .env 文件
DB_HOST=localhost
DB_PORT=5432
NODE_ENV=development

# docker-compose.yml
services:
web:
env_file:
- .env

高级应用

1. 网络配置

# 创建网络
docker network create my-network

# 运行容器到网络
docker run -d --name web --network my-network nginx
docker run -d --name db --network my-network postgres

2. 资源限制

# 限制内存和 CPU
docker run -d --name my-app \
--memory="512m" \
--cpus="0.5" \
my-app:1.0

3. 健康检查

HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD curl -f http://localhost:3000/health || exit 1

监控与日志

1. 容器监控

# 查看容器资源使用
docker stats

# 查看容器详细信息
docker inspect my-app

2. 日志管理

# 查看实时日志
docker logs -f my-app

# 日志轮转
docker run --log-driver=json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
my-app:1.0

3. 监控工具

  • Portainer: Docker 管理界面
  • cAdvisor: 容器资源监控
  • Prometheus + Grafana: 完整监控解决方案

安全最佳实践

1. 镜像安全

  • 使用官方基础镜像
  • 定期更新基础镜像
  • 扫描镜像漏洞
  • 最小化镜像大小

2. 容器安全

  • 以非 root 用户运行
  • 限制容器权限
  • 使用命名空间隔离
  • 定期更新 Docker 版本

3. 网络安全

  • 使用自定义网络
  • 限制端口暴露
  • 配置防火墙规则
  • 使用 TLS 加密

生产环境部署

1. Docker Swarm

# 初始化 Swarm
docker swarm init

# 部署服务
docker stack deploy -c docker-compose.yml myapp

2. Kubernetes

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:1.0
ports:
- containerPort: 3000

3. CI/CD 集成

# .github/workflows/docker.yml
name: Build and Push Docker Image
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build Docker image
run: docker build -t my-app:latest .
- name: Push Docker image
run: |
docker tag my-app:latest my-dockerhub/my-app:latest
docker push my-dockerhub/my-app:latest

Docker 容器化技术已经成为现代软件开发的标准实践,掌握 Docker 可以大大提高开发效率和部署可靠性。