Files
chill_notes/Docker/Docker容器化部署指南.md
2026-04-21 11:24:29 +08:00

4.7 KiB
Executable File
Raw Blame History

title, tags, created
title tags created
Docker 容器化部署指南
Docker
DevOps
容器化
Linux
2026-04-21

Docker 容器化部署指南

核心概念

概念 说明
镜像Image 只读模板,包含运行应用所需的文件系统
容器Container 镜像的运行实例,类似轻量级虚拟机
仓库Registry 存储和分发镜像的服务Docker Hub、GHCR
Dockerfile 定义镜像构建步骤的脚本

常用命令

镜像操作

# 查看本地镜像
docker images

# 拉取镜像
docker pull nginx:latest

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

# 删除镜像
docker rmi myapp:1.0

# 推送镜像
docker push myrepo/myapp:1.0

容器操作

# 运行容器
docker run -d --name myapp -p 8080:80 nginx

# 查看运行中的容器
docker ps

# 查看所有容器(包括停止的)
docker ps -a

# 停止/启动容器
docker stop myapp
docker start myapp

# 进入容器
docker exec -it myapp /bin/bash

# 查看日志
docker logs -f myapp

# 删除容器
docker rm myapp

Docker Compose

# 启动服务
docker compose up -d

# 查看服务状态
docker compose ps

# 重启服务
docker compose restart

# 查看日志
docker compose logs -f

# 停止服务
docker compose down

# 重新构建并启动
docker compose up -d --build

Dockerfile 最佳实践

# 1. 使用多阶段构建减小镜像体积
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build

# 2. 生产镜像使用非 root 用户
FROM node:20-alpine AS production
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]

# 3. 使用 .dockerignore 排除不必要的文件
# .git
# node_modules
# *.log
# .env

常用 Docker Compose 示例

基础 Web 应用

version: '3.8'

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
    restart: unless-stopped

  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: postgres:15-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: user
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    restart: unless-stopped

volumes:
  postgres_data:

Clash + metacubexd代理面板

version: '3.8'

services:
  clash:
    container_name: clash
    image: metacubex/mihomo:Alpha
    restart: unless-stopped
    network_mode: host
    pid: host
    cap_add:
      - ALL
    volumes:
      - ./config:/root/.config/mihomo
      - /dev/net/tun:/dev/net/tun

  dashboard:
    container_name: dashboard
    image: ghcr.io/metacubex/metacubexd:latest
    restart: unless-stopped
    network_mode: host

安装 DockerLinux

# Ubuntu/Debian
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER

# Docker Compose独立安装
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
  -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

网络模式选择

模式 说明 适用场景
bridge默认 NAT 网络,端口需映射 单容器简单应用
host 共享宿主机网络栈 TUN/透明代理、性能敏感应用
overlay 跨主机容器网络 Docker Swarm 集群
none 禁用网络 隔离安全环境

常用参数

参数 说明
-d 后台运行detached
-p 8080:80 端口映射(宿主机:容器)
-v ./data:/data 卷挂载
-e KEY=val 环境变量
--name myapp 容器命名
--restart unless-stopped 自动重启策略
--network mynet 加入指定网络
-it 交互式终端
--rm 容器停止后自动删除

清理命令

# 删除已停止的容器
docker container prune

# 删除悬空镜像(无 tag
docker image prune

# 删除所有未使用的镜像
docker image prune -a

# 删除已停止的容器和未使用的镜像
docker system prune

# 完全清理(包括卷)
docker system prune -a --volumes

故障排查

问题 解决方案
容器无法启动 docker logs <container> 查看日志
端口冲突 检查宿主机端口占用 netstat -tlnp
权限不足 确保用户在 docker 组 groups $USER
镜像拉取慢 配置国内镜像加速
TUN 不工作 确认 host 模式 + /dev/net/tun 挂载