关键字

  • services:服务列表
  • image:用哪个镜像
  • restart:挂了要不要自动重启
  • environment:环境变量(配置)
  • volumes:文件挂载(持久化)
  • ports:端口暴露
  • labels:给监控/工具打标签
  • networks:加入哪个局域网

我给你用最直白、运维最常用的话,一次性讲清楚这 8 个关键字的用途,看完你写 docker-compose.yml 就不会懵了。


1. services

作用:定义一组要启动的服务(微服务、中间件、数据库等都算服务)。

  • 一个 services 下面可以写多个服务,比如 vama-gatewayvama-systemprometheus
  • 它是所有服务的根节点

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
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐