【Docker】-----docker-compose.yml 关键字详细说明
·
关键字
- services:服务列表
- image:用哪个镜像
- restart:挂了要不要自动重启
- environment:环境变量(配置)
- volumes:文件挂载(持久化)
- ports:端口暴露
- labels:给监控/工具打标签
- networks:加入哪个局域网
我给你用最直白、运维最常用的话,一次性讲清楚这 8 个关键字的用途,看完你写 docker-compose.yml 就不会懵了。
1. services
作用:定义一组要启动的服务(微服务、中间件、数据库等都算服务)。
- 一个
services下面可以写多个服务,比如vama-gateway、vama-system、prometheus。 - 它是所有服务的根节点。
2. image
作用:指定容器使用哪个镜像。
- 格式:
仓库地址/镜像名:版本号 - 告诉 Docker:从哪里拉取程序、用哪个版本运行。
3. restart
作用:容器挂了/服务器重启后,是否自动重启。
常用值:
always:只要停了就自动重启(生产最常用)no:不自动重启on-failure:只有异常退出才重启
4. environment
作用:给容器传环境变量。
- 配置时区、Spring 环境、Nacos 地址、SkyWalking 地址、JVM 参数等。
- 不用改代码、不用进容器,外部控制容器行为。
5. volumes
作用:目录挂载 = 宿主机 ↔ 容器 文件互通。
- 把容器里的目录映射到宿主机。
用途: - 日志持久化(容器删了日志还在)
- 配置文件挂载
- 数据持久化(如 MySQL 数据、上传文件)
格式:
宿主机路径:容器内路径
6. ports
作用:端口映射 → 让外部能访问容器。
格式:
宿主机端口:容器端口
例如:
"48080:48080"
意思:访问服务器 48080 = 访问容器里的 48080。
7. labels
作用:给容器打标签。
- 本身不影响运行,是给其他工具看的标记。
你这里的用途: - 给 Prometheus 做服务发现
让 Prometheus 自动识别: - 要不要采集
- 采集哪个端口
- 采集哪个路径
8. networks
作用:把服务加入指定的 Docker 网络。
- 同一个网络里的服务:可以用服务名互相访问
- 不同网络:默认隔离,无法访问
你这里:
networks:
vama_net:
driver: bridge
所有服务都加入 vama_net,可以互相调用。
超简记忆版(建议收藏)
- services:服务列表
- image:用哪个镜像
- restart:挂了要不要自动重启
- environment:环境变量(配置)
- volumes:文件挂载(持久化)
- ports:端口暴露
- labels:给监控/工具打标签
- networks:加入哪个局域网
完整例子
services:
zhuzhu-gateway:
image: registry.cn-shenzhen.aliyuncs.com/zhuzhu-dev/zhuzhu-gateway:latest
restart: always
environment:
- TZ=Etc/UTC
- SPRING_PROFILES_ACTIVE=dev
- SPRING_CLOUD_NACOS_SERVER_ADDR=222.222.222.22:8848
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=222.222.222.22:11800
- SW_AGENT_NAMESPACE=dev
- APM_TOOL=-javaagent:/tools/skywalking-agent/skywalking-agent.jar
volumes:
- ./logs/vama-gateway:/app/logs
- ./tools/skywalking-agent:/tools/skywalking-agent
ports:
- "48080:48080"
labels: # 为 Prometheus 服务发现添加标签
- "prometheus.scrape=true"
- "prometheus.port=48080" # 应用端口或管理端口
- "prometheus.path=/actuator/prometheus" # 监控端点路径
networks:
- zhuzhu_net
networks:
zhuzhu_net:
driver: bridge
更多推荐




所有评论(0)