Docker 和 Docker Compose 是 容器化 相关的工具,Docker Compose 是 Docker 的一个补充工具,用于管理 多容器应用。
可以简单理解:
Docker → 运行 单个容器(比如 docker run 命令)。
Docker Compose → 运行 多个容器(比如 docker-compose up 命令)。
Docker Compose 介绍
Docker Compose 通过 docker-compose.yml 文件可以定义多个容器的配置,并可以一键启动或管理多个容器。
-
使用场景
微服务架构:如 Web 服务 + 数据库 + Redis,Compose 可以一键启动所有容器。
开发环境:团队成员可以通过 docker-compose up 快速启动完整的开发环境。
自动化部署:用于本地测试、CI/CD 管道(如 GitHub Actions、Jenkins)。 -
下载地址
部署示例
运行一个 缓存服务(Redis6.2)+ 数据库(MySQL8.0) 的环境,可以使用 docker-compose.yml 轻松管理多个容器。
-
编写 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39version: "3.4"
name: demo-system
services:
mysql:
container_name: demo-mysql
image: mysql:8
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE:-demo}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-demo}
TZ: Asia/Shanghai
# 设置字符集和校对集
MYSQL_CHARACTER_SET_SERVER: utf8mb4
MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci
volumes:
- /home/docker/mysql8/data:/var/lib/mysql/
- /home/docker/mysql8/conf:/etc/mysql/conf.d
- /home/docker/mysql8/logs:/var/log/mysql
- /home/docker/quartz.sql:/docker-entrypoint-initdb.d/quartz.sql:ro
redis:
container_name: demo-redis
image: redis:6-alpine
restart: unless-stopped
ports:
- "6379:6379"
environment:
- TZ=Asia/Shanghai
volumes:
- /home/docker/redis6/data:/data
- /home/docker/redis6/conf:/usr/local/etc/redis
- /home/docker/redis6/conf/users.acl:/etc/redis/users.acl
command:
- redis-server /usr/local/etc/redis/redis.conf容器目录/docker-entrypoint-initdb.d用来加载初始化脚本。
如果redis.conf 中logfile
配置的路径报错Can’t open the log file: No such file or directory 或者 Permission denied,可能是没有创建目录或者没有权限,最好将logfile路径配置到data目录下并检查目录是否创建以及是否有权限。
在使用Docker部署Redis时,确实有一些限制和最佳实践需要考虑,特别是关于配置文件中的某些参数,如daemonize参数。在传统的 Linux 系统中,Redis 的 daemonize 选项用于指定 Redis 是否应该在后台运行。在 Docker 容器中,通常不推荐使用 daemonize yes,因为 Docker 容器设计之初就是为了运行单个进程。如果你在 Docker 容器中设置 daemonize yes,那么 Redis 将尝试在后台运行,这可能会导致一些问题,比如容器无法正确退出或者在容器重启时出现问题。
注意Docker部署Redis时推荐使用daemonize no,生产环境没有使用docker部署而是直接部署的推荐使用 daemonize yes。
-
启动服务
1
docker compose --env-file docker.env -f docker-compose.yml up -d
--env-file:可以指定docker环境变量文件,-f:可以指定yml文件,多个文件可以追加 -f a.yml -f b.yml 。
总结与对比
在使用Docker部署服务是一般都要配置数据目录、日志目录、配置文件等,很多文档和文章都是使用默认配置埋下很多坑要踩。由于网上相关文章较少,因此记录下此问题让大家少踩坑快速解决问题。
对比项 | Docker | Docker Compose |
---|---|---|
管理单个容器 | ✅ 适合 | ❌ 不适合 |
管理多个容器 | ❌ 不适合 | ✅ 适合 |
适用于微服务架构 | ❌ 较难管理 | ✅ 适合 |
配置方式 | 命令行参数 | docker-compose.yml 文件 |
适用场景 | 运行单个应用 | 运行多个服务(如 Web + 数据库) |