Docker Compose 教程

Docker Compose 教程

docker-compose 是一个用于定义和管理多个 Docker 容器的工具。它使用 docker-compose.yml 文件来描述服务、网络和存储卷,让你可以用一条命令启动所有容器。

第一步:安装 Docker Compose

1.1 Windows / Mac
如果你安装了 Docker Desktop,那么 docker-compose 已经内置了,你可以直接使用。

1.2 Linux
在 Linux 上,你可以使用以下命令安装:

1
2
sudo apt update
sudo apt install -y docker-compose

检查是否安装成功:

1
docker-compose --version

第二步:创建 Docker Compose 项目

我们来创建一个包含 NginxRedis 的简单项目。

2.1 创建项目目录

1
mkdir my-project && cd my-project

2.2 创建 docker-compose.yml 文件

my-project 目录下,创建一个名为 docker-compose.yml 的文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: '3'  # 指定 Docker Compose 版本

services:
nginx:
image: nginx:latest # 使用官方 Nginx 镜像
ports:
- "8080:80" # 映射宿主机的 8080 端口到容器的 80 端口
depends_on:
- redis # 先启动 redis 再启动 nginx

redis:
image: redis:latest # 使用 Redis 官方镜像
ports:
- "6379:6379" # 映射 Redis 端口

第三步:启动服务

docker-compose.yml 所在的目录执行:

1
docker-compose up -d

解释:

  • -d 让容器在后台运行

  • 这条命令会自动拉取 nginxredis 镜像,并启动它们

第四步:管理容器

4.1 查看运行中的容器

1
docker-compose ps

4.2 查看日志

1
docker-compose logs

如果想查看某个服务的日志,比如 nginx

1
docker-compose logs nginx

4.3 进入某个容器

如果你想进入 nginx 容器:

1
docker-compose exec nginx /bin/sh

4.4 停止和删除所有容器

1
docker-compose down

如果还想删除所有数据卷:

1
docker-compose down -v

第五步:使用数据库

假设我们要添加一个 MySQL 服务,修改 docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
version: '3'

services:
nginx:
image: nginx:latest
ports:
- "8080:80"
depends_on:
- redis
- mysql

redis:
image: redis:latest
ports:
- "6379:6379"

mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: testdb
MYSQL_USER: user
MYSQL_PASSWORD: password
ports:
- "3306:3306"

然后执行:

1
docker-compose up -d

现在 MySQL 也会作为一个服务启动。

第六步:使用 Dockerfile 自定义服务

有时候我们需要自定义应用,比如一个 Python Web 服务器。

6.1 创建 Dockerfile

my-project 目录下,新建 app 文件夹,并在其中创建 Dockerfile

1
2
3
4
5
6
7
8
9
10
FROM python:3.9

WORKDIR /app

COPY . .

RUN pip install flask

CMD ["python", "app.py"]

6.2 创建 app.py

app 目录下,新建 app.py

1
2
3
4
5
6
7
8
9
10
11
from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
return "Hello from Flask!"

if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)

6.3 修改 docker-compose.yml

修改 docker-compose.yml,添加 Flask 应用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
version: '3'

services:
nginx:
image: nginx:latest
ports:
- "8080:80"
depends_on:
- redis
- mysql
- web

redis:
image: redis:latest
ports:
- "6379:6379"

mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: testdb
MYSQL_USER: user
MYSQL_PASSWORD: password
ports:
- "3306:3306"

web:
build: ./app
ports:
- "5000:5000"

6.4 运行 Flask 应用

执行:

1
docker-compose up -d

然后访问 http://localhost:5000,你应该能看到 "Hello from Flask!"

总结

  • docker-compose up -d 启动所有服务
  • docker-compose down 停止并删除容器
  • 可以使用 Dockerfile 自定义服务
  • depends_on 让服务按顺序启动

这样,你就可以用 docker-compose 轻松管理多个容器了!