返回列表
🐳DevOps60 分钟Beginner

Docker 容器部署实战

掌握 Docker 从基础到生产级容器。学习容器化、镜像优化和部署策略。

# Docker 容器部署实战

## 为什么用 Docker?
Docker 通过将应用程序与其所有依赖项打包来简化部署。这消除了"在我机器上能运行"的问题,并实现跨环境的一致部署。

## 入门

### 安装
```bash
# macOS
brew install docker

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

# 验证
docker --version
docker-compose --version
```

## 核心概念

### 镜像
镜像是用于创建容器的只读模板。

```bash
# 拉取镜像
docker pull nginx:latest

# 列出镜像
docker images

# 从 Dockerfile 构建
docker build -t myapp:1.0 .
```

### 容器
容器是镜像的运行实例。

```bash
# 运行容器
docker run -d -p 8080:80 nginx:latest

# 列出运行中的容器
docker ps

# 停止容器
docker stop <container_id>
```

## Docker Compose

### docker-compose.yml
```yaml
version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    volumes:
      - ./data:/app/data
    restart: unless-stopped

  database:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: secret
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:
```

### 常用命令
```bash
# 启动所有服务
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止所有服务
docker-compose down
```

## 最佳实践

### 1. 使用多阶段构建
```dockerfile
# 构建阶段
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 生产阶段
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY package*.json ./
RUN npm ci --only=production
CMD ["node", "dist/index.js"]
```

### 2. 永远不要以 Root 运行
```dockerfile
RUN addgroup -g 1001 appgroup && \
    adduser -u 1001 -G appgroup -s /bin/sh -D appuser
USER appuser
```

### 3. 使用 .dockerignore
```
node_modules
npm-debug.log
.git
.env
```

## 生产部署

### Docker Swarm
```bash
# 初始化 swarm
docker swarm init

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

# 扩展服务
docker service scale myapp_web=5
```

### 安全扫描
```bash
# 扫描漏洞
docker scan myapp:1.0
```

💬 评论功能尚未配置

请设置 NEXT_PUBLIC_WALINE_SERVER_URL 环境变量