Docker容器部署方法

1. 基础部署流程

准备 Dockerfile

复制代码
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

构建和运行容器

复制代码
# 构建镜像
docker build -t my-app .

# 运行容器
docker run -d -p 3000:3000 --name my-app-container my-app

# 查看运行中的容器
docker ps

# 查看日志
docker logs my-app-container

2. 使用 Docker Compose(推荐)

创建 docker-compose.yml

复制代码
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:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

运行命令:

复制代码
# 启动服务
docker-compose up -d

# 停止服务
docker-compose down

3. 生产环境部署最佳实践

多阶段构建

复制代码
# 构建阶段
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

# 运行阶段
FROM node:18-alpine
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
WORKDIR /app
COPY --from=builder --chown=nextjs:nodejs /app/node_modules ./node_modules
COPY --chown=nextjs:nodejs . .
USER nextjs
EXPOSE 3000
CMD ["npm", "start"]

使用 .dockerignore

复制代码
node_modules
npm-debug.log
.git
.env
Dockerfile
README.md

4. 容器编排部署

使用 Docker Swarm

复制代码
# 初始化 Swarm
docker swarm init

# 部署堆栈
docker stack deploy -c docker-compose.yml myapp

使用 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:latest
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
  ports:
  - port: 80
    targetPort: 3000
  type: LoadBalancer

5. 环境特定配置

使用环境变量

复制代码
# 通过环境变量配置
docker run -d \
  -e DATABASE_URL=postgresql://user:pass@db:5432/myapp \
  -e REDIS_URL=redis://redis:6379 \
  my-app

配置文件挂载

复制代码
# 挂载配置文件
docker run -d \
  -v $(pwd)/config:/app/config \
  -p 3000:3000 \
  my-app

6. 监控和日志

复制代码
# 查看容器资源使用
docker stats

# 查看详细日志
docker logs -f my-app-container

# 进入容器调试
docker exec -it my-app-container sh

7. 持续集成/持续部署

GitHub Actions 示例

复制代码
name: Build and Deploy
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Build Docker image
      run: docker build -t my-app .
    - name: Deploy to server
      run: |
        docker-compose pull
        docker-compose up -d

部署检查清单

  • Dockerfile 优化(多阶段构建、最小基础镜像)
  • 安全扫描镜像漏洞
  • 配置正确的资源限制
  • 设置日志轮转策略
  • 配置健康检查
  • 备份和恢复策略
  • 监控和告警设置
相关推荐
炸炸鱼.17 小时前
Kubernetes高级调度02:Taint/Toleration、Cordon/Drain、亲和性与反亲和性完全指南
云原生·容器·kubernetes
wanhengidc17 小时前
服务器租用有何优点
运维·服务器·安全·web安全
ZGi.ai18 小时前
人工审查节点:让自动化工作流多一步人工把关
运维·人工智能·自动化·人机协同·智能体工作流·人工审查
艾莉丝努力练剑18 小时前
【Linux:文件】Ext系列文件系统进阶
linux·运维·服务器·c++·文件系统·文件io·ext
海市公约18 小时前
Linux核心基础命令与权限管理实战指南
linux·运维·服务器·vim·权限管理·系统监控·命令行
wkd_00718 小时前
Ubuntu 22.04 Samba 连接故障排查记:从“用户名或密码错误”到 NTLM 版本不兼容
linux·运维·ubuntu
企服AI产品测评局18 小时前
Agent适配信创环境实测:企业级自动化如何实现国产操作系统与数据库全兼容?
运维·数据库·人工智能·ai·chatgpt·自动化
mixboot19 小时前
Linux 进程工作目录查看利器:pwdx 命令详解
linux·运维·服务器
盖小雅20 小时前
自动化排班如何破解劳动法合规难题:从规则冲突到可追溯的排班表
大数据·运维·机器学习·自动化
NiceCloud喜云20 小时前
Claude Code Routines 实战:三种触发器跑通云端自动化编码
android·运维·数据库·人工智能·自动化·json·飞书