卡飞资源网

专业编程技术资源共享平台

【Docker 新手入门指南】第十一章:DockerCompose

一、Compose 简介

定义
Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具,通过 YAML 文件 配置服务依赖、资源映射等,实现一键启动复杂应用。

核心优势

  • 单文件(docker-compose.yml) 管理多容器配置
  • 支持定义服务间依赖关系、网络和数据卷
  • 一条命令完成构建、启动、停止全流程

二、使用 Compose 的三个核心步骤

1.用 Dockerfile 定义应用环境
编写 Dockerfile 描述应用镜像的构建规则(如基础镜像、依赖安装、启动命令)。

FROM python:3.9-slim
WORKDIR /app 
COPY requirements.txt . 
RUN pip install -r requirements.txt 
COPY . . 
CMD ["python", "app.py"]

2.用 docker-compose.yml 定义服务
在 YAML 文件中声明应用的所有服务、网络、数据卷等。

version: '3.9'
services:
  web:
    build: .          # 基于当前目录的 Dockerfile 构建
    ports:
      - "5000:5000"    # 端口映射(主机:容器)
    volumes:
      - .:/app         # 挂载主机当前目录到容器 /app
    depends_on:
      - db             # 依赖 db 服务先启动
  db:
    image: postgres:13 # 使用 PostgreSQL 镜像
    environment:
      	POSTGRES_PASSWORD: secret

3.用命令启动应用

docker-compose up       # 前台启动所有服务
docker-compose up -d    # 后台启动(守护模式)
docker-compose down     # 停止并删除容器

三、Compose 安装指南

1. Linux 安装

官方安装(推荐)

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

国内镜像加速(如 DaoCloud)

curl -L https://get.daocloud.io/docker/compose/releases/latest/download/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

验证安装

docker-compose --version

2. Alpine Linux 注意事项
需提前安装依赖:

apk add --no-cache py-pip python3-dev libffi-dev openssl-dev gcc libc-dev make

3. macOS/Windows 安装
直接安装 Docker Desktop(已内置 Compose),无需额外操作。

四、实战教程:构建 Flask + Redis 应用

1. 准备项目文件

mkdir flask-redis-app && cd $_
touch app.py requirements.txt

app.py(Flask 计数器):

from flask import Flask
import redis

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

@app.route('/')
def hello():
    count = cache.incr('hits')
    return f'Hello! You are visitor {count}.'

requirements.txt

flask
redis

2. 编写 Dockerfile

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["flask", "run", "--host=0.0.0.0"]

3. 配置 docker-compose.yml

version: '3.9'
services:
  web:
    build: .           # 构建当前目录的镜像
    ports:
      - "5000:5000"    # 暴露端口
    depends_on:
      - redis         # 依赖 redis 服务
  redis:
    image: redis:alpine  # 使用轻量级 Redis 镜像
    volumes:
      - redis-data:/data  # 持久化数据卷
volumes:
  redis-data: {}          # 定义数据卷

4. 启动与测试

docker-compose up -d     # 后台启动
curl http://localhost:5000  # 访问应用,刷新查看计数器变化

五、关键配置指令详解

指令

作用描述

示例

version

指定 Compose 文件版本(推荐 3.9

version: '3.9'

build

定义镜像构建规则(上下文、Dockerfile、参数等)

build: ./app 或指定详细参数

image

指定使用已有的镜像(从 Docker Hub 或私有仓库拉取)

image: nginx:alpine

ports

映射容器端口到主机

- "80:80", - "127.0.0.1:8000:80"

volumes

挂载数据卷或主机目录(持久化数据、代码热更新)

- ./src:/app/src, - data-volume:/var/lib/data

depends_on

定义服务启动顺序(确保依赖服务先启动,但不验证服务是否完全就绪)

depends_on: [db, redis]

environment

设置容器环境变量(支持变量注入或直接赋值)

environment: {APP_ENV: dev}environment: [USER=admin]

networks

定义自定义网络(实现服务间通信隔离)

networks: [webnet, dbnet]

六、常用命令速查表

命令

说明

docker-compose up

启动所有服务(默认前台运行)

docker-compose up -d

后台运行服务

docker-compose down

停止并删除容器、网络(保留数据卷)

docker-compose down -v

同时删除数据卷

docker-compose logs [服务名]

查看服务日志

docker-compose exec [服务名]

进入正在运行的容器(如 docker-compose exec web bash

docker-compose ps

查看当前运行的服务容器

docker-compose build

重新构建服务镜像



控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言