这是一个整合了几乎所有主要字段的 Docker Compose 示例文件,包括服务定义、卷、网络、Secrets、配置等所有你可能用到的配置项。这个文件模拟了一个 Web 服务、数据库服务、以及如何使用卷、网络、Secrets 和配置。
综合示例 docker-compose.yml
version: '3.8' # Docker Compose 文件版本
services:
web:
image: nginx:alpine # 使用 nginx:alpine 镜像
container_name: nginx-container # 指定容器名称
build: # 构建镜像选项
context: ./web
dockerfile: Dockerfile.custom
args:
APP_VERSION: "1.0"
ports:
- "8080:80" # 将宿主机的 8080 端口映射到容器的 80 端口
environment: # 环境变量
- NGINX_HOST=localhost
- NGINX_PORT=80
env_file: # 加载环境变量文件
- ./common.env
- ./web.env
volumes: # 挂载卷
- ./html:/usr/share/nginx/html # 挂载本地目录
- web-data:/data # 使用定义的卷
networks: # 网络配置
- frontend
depends_on: # 服务依赖
- db
logging: # 日志配置
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
healthcheck: # 健康检查
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
secrets: # 使用 Secrets
- db_password
configs: # 使用配置
- web_config
restart: always # 容器失败时自动重启
extra_hosts: # 添加额外的主机名解析
- "somehost:162.242.195.82"
dns: # 自定义 DNS 服务器
- 8.8.8.8
dns_search: # DNS 搜索域
- example.com
tty: true # 分配一个伪终端
stdin_open: true # 保持 STDIN 打开
db:
image: postgres:13 # 使用 postgres:13 镜像
container_name: postgres-container
environment: # 数据库相关环境变量
POSTGRES_DB: mydatabase
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes: # 数据库卷挂载
- db-data:/var/lib/postgresql/data
networks: # 网络
- backend
secrets: # 使用 Secrets
- db_password
restart: always
volumes: # 定义卷
web-data: # Web 服务的数据卷
driver: local
db-data: # 数据库的数据卷
driver: local
driver_opts:
o: "uid=1000,gid=1000"
type: "nfs"
networks: # 定义网络
frontend:
driver: bridge
backend:
driver: bridge
ipam:
config:
- subnet: 172.16.238.0/24
gateway: 172.16.238.1
secrets: # 定义 Secrets
db_password:
file: ./secrets/db_password.txt # 从文件加载密码
configs: # 定义配置
web_config:
file: ./config/nginx.conf # 加载 Nginx 配置文件
文件结构解析
-
version
:指定 Docker Compose 文件版本。 -
services
:定义了两个服务:-
web
服务:基于 Nginx,暴露 8080 端口,使用build
构建镜像,挂载卷、使用环境变量文件、依赖db
服务,并配置健康检查、日志、Secrets 和配置。 -
db
服务:基于 Postgres,使用环境变量指定数据库配置,挂载卷并使用 Secrets。
-
-
volumes
:定义了两个卷:-
web-data
:用于 Web 服务的数据存储。 -
db-data
:用于数据库的数据持久化,并配置了自定义的驱动选项。
-
-
networks
:定义了两个网络:-
frontend
:前端网络,使用默认桥接驱动。 -
backend
:后端网络,配置了 IP 地址分配和网关。
-
-
secrets
:定义了数据库的密码,以文件形式存储。 -
configs
:为 Web 服务提供 Nginx 的配置文件。
这个文件展示了 Docker Compose 中几乎所有可能用到的字段,是一个集成了服务构建、网络配置、卷挂载、Secrets、配置、日志、健康检查等功能的完整示例。你可以根据自己的应用需求,灵活修改和定制这些字段。