如何部署多容器 Docker 应用程序

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

对于寻求简化容器管理和应用程序部署的开发者来说,Docker Compose 是一个必不可少的工具。本全面教程将探讨 Docker Compose 的基础知识,为高效且系统地配置、部署和管理复杂的多容器环境提供实用见解。

Docker Compose 基础

Docker Compose 简介

Docker Compose 是用于定义和运行多容器 Docker 应用程序的强大工具。它允许开发者使用 YAML 文件来配置应用程序服务、网络和卷,简化了容器编排和管理的过程。

核心概念与架构

graph TD A[Docker Compose] --> B[服务配置] A --> C[多容器管理] A --> D[声明式基础设施]
关键概念 描述
docker-compose.yml 定义服务、网络和卷的配置文件
服务 构成应用程序的各个容器
容器的持久数据存储
网络 用于容器通信的自定义网络配置

实际示例:Web 应用程序设置

以下是一个全面的示例,展示了典型 Web 应用程序的 Docker Compose 配置:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes: -./website:/usr/share/nginx/html
  database:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: mysecretpassword
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

代码剖析

  1. version: '3.8' 指定 Docker Compose 文件格式
  2. services 部分定义了两个容器:Web 服务器和数据库
  3. nginx 服务将主机端口 80 映射到容器端口 80
  4. postgres 服务设置了一个带有持久卷存储的数据库

安装与基本命令

要在 Ubuntu 22.04 上安装 Docker Compose:

sudo apt update
sudo apt install docker-compose-plugin
docker compose version

关键的 Docker Compose 命令:

  • docker compose up:启动所有服务
  • docker compose down:停止并移除容器
  • docker compose ps:列出正在运行的服务
  • docker compose logs:查看服务日志

配置与部署

Docker Compose 文件结构

Docker Compose 配置依赖于一个定义整个应用程序基础设施的 YAML 文件。标准文件名为 docker-compose.yml,其中包含全面的服务定义。

graph TD A[docker-compose.yml] --> B[服务] A --> C[网络] A --> D[卷] A --> E[环境变量]

服务配置详细示例

version: "3.8"
services:
  backend:
    image: python:3.9
    build:
      context:./backend
      dockerfile: Dockerfile
    ports:
      - "5000:5000"
    environment:
      - DATABASE_URL=postgresql://user:password@database:5432/appdb
    depends_on:
      - database

  database:
    image: postgres:13
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: secretpassword

volumes:
  postgres_data:

配置参数

参数 描述 示例
image 基础容器镜像 nginx:latest
build 自定义镜像构建配置 context:./app
ports 端口映射 "8080:80"
volumes 持久数据存储 -./data:/app/data
environment 容器环境变量 DATABASE_HOST=localhost

部署策略

graph LR A[本地开发] --> B[预发布环境] B --> C[生产部署] C --> D[扩展服务]

部署命令

Ubuntu 22.04 上的典型部署工作流程:

## 验证 Compose 文件
docker compose config

## 构建服务
docker compose build

## 启动服务
docker compose up -d

## 检查正在运行的服务
docker compose ps

## 查看日志
docker compose logs backend

## 停止服务
docker compose down

高级配置技术

services:
  webserver:
    restart: always
    healthcheck:
      test: ["CMD", "curl", "-f", "
      interval: 30s
      timeout: 10s
      retries: 3

高级 Compose 策略

多环境配置

Docker Compose 通过多个配置文件和覆盖机制支持复杂的环境管理。

graph LR A[基础配置] --> B[开发环境覆盖] A --> C[生产环境覆盖] A --> D[预发布环境覆盖]

特定环境配置

version: "3.8"
services:
  application:
    image: myapp:latest
    environment:
      - APP_ENV=${DEPLOY_ENV:-development}
      - DATABASE_URL=${DATABASE_CONNECTION}

动态扩展服务

## 将 web 服务扩展到 3 个实例
docker compose up -d --scale web=3

高级网络配置

网络模式 描述 使用场景
bridge 默认网络 隔离容器通信
host 直接主机网络 高性能场景
custom 用户定义网络 复杂的微服务架构

适用于生产环境的 Compose 示例

version: '3.8'
services:
  webserver:
    image: nginx:alpine
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
    healthcheck:
      test: ["CMD", "curl", "-f", "
      interval: 30s
      timeout: 10s
      retries: 3

  backend:
    image: myapp:${VERSION}
    secrets:
      - db_password
    configs:
      - source: app_config
        target: /app/config.json

secrets:
  db_password:
    external: true

configs:
  app_config:
    file:./config.json

容器版本控制策略

## 标记并推送版本化镜像
docker build -t myapp:v1.0.
docker compose push

部署工作流程

graph TD A[构建镜像] --> B[运行测试] B --> C[推送到镜像仓库] C --> D[部署容器] D --> E[监控性能]

安全与合规命令

## 扫描 Compose 服务中的漏洞
docker compose config --resolve-env-vars
docker scan docker-compose.yml

总结

通过掌握 Docker Compose,开发者能够简化容器编排,将基础设施定义为代码,并创建可扩展、可重现的应用程序环境。本教程涵盖了核心概念、配置策略以及实际实现技术,这些技术能够在不同的基础设施场景中实现无缝的多容器应用程序开发与部署。