Docker compose文件模板

docker-compose-public.yml

# 命令执行 docker-compose -p public-dev-ops -f docker-compose-public.yml up -d
services:
  mysql:
    image: mysql:8.0.42  # 使用MySQL 8.0.42官方镜像
    container_name: mysql  # 指定容器名称
    command: --default-authentication-plugin=mysql_native_password  # 使用传统密码认证方式
    restart: always  # 容器退出时自动重启
    environment:
      TZ: Asia/Shanghai  # 设置时区为上海
      MYSQL_ROOT_PASSWORD: 123456  # 设置root用户密码
    ports:
      - "13306:3306"  # 将容器3306端口映射到主机13306端口
    volumes:
      # 挂载自定义MySQL配置文件
      - D:/Docker/volumes/public/mysql/my.cnf:/etc/mysql/conf.d/mysql.cnf:ro  # :ro表示只读
      # 挂载SQL初始化脚本目录
      - D:/Docker/volumes/public/mysql/sql:/docker-entrypoint-initdb.d
    healthcheck:
      test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]  # 健康检查命令
      interval: 5s  # 每5秒检查一次
      timeout: 10s  # 超时时间10秒
      retries: 10  # 重试10次
      start_period: 15s  # 容器启动后15秒开始检查
    networks:
      - my-network  # 连接到自定义网络

  # phpmyadmin https://hub.docker.com/_/phpmyadmin
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:5.2.2  # 使用phpMyAdmin 5.2.2镜像
    container_name: phpmyadmin  # 指定容器名称
    hostname: phpmyadmin  # 设置容器主机名
    ports:
      - 10880:80  # 将容器80端口映射到主机10880端口
    environment:
      - PMA_HOST=mysql  # 指定连接的MySQL主机
      - PMA_PORT=3306  # 指定MySQL端口
      - MYSQL_ROOT_PASSWORD=123456  # MySQL root密码
    depends_on:
      mysql:
        condition: service_healthy  # 依赖MySQL服务健康状态
    networks:
      - my-network  # 连接到自定义网络

  # Redis
  redis:
    image: redis:8.0.2  # 使用Redis 8.0.2官方镜像
    container_name: redis  # 指定容器名称
    restart: always  # 容器退出时自动重启
    hostname: redis  # 设置容器主机名
    privileged: true  # 赋予容器特权模式
    ports:
      - 16379:6379  # 将容器6379端口映射到主机16379端口
    volumes:
      # 挂载自定义Redis配置文件
      - D:/Docker/volumes/public/redis/redis.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf  # 启动Redis时使用自定义配置
    networks:
      - my-network  # 连接到自定义网络
    healthcheck:
      test: [ "CMD", "redis-cli", "ping" ]  # 健康检查命令
      interval: 10s  # 每10秒检查一次
      timeout: 5s  # 超时时间5秒
      retries: 3  # 重试3次

  # RedisAdmin https://github.com/joeferner/redis-commander
  redis-admin:
    image: spryker/redis-commander:0.8.0  # 使用Redis Commander 0.8.0镜像
    container_name: redis-admin  # 指定容器名称
    hostname: redis-commander  # 设置容器主机名
    restart: always  # 容器退出时自动重启
    ports:
      - 18081:8081  # 将容器8081端口映射到主机18081端口
    environment:
      - REDIS_HOSTS=local:redis:6379  # 配置要管理的Redis实例
      - HTTP_USER=admin  # Web界面登录用户名
      - HTTP_PASSWORD=admin  # Web界面登录密码
      - LANG=C.UTF-8  # 设置语言环境
      - LANGUAGE=C.UTF-8
      - LC_ALL=C.UTF-8
    networks:
      - my-network  # 连接到自定义网络
    depends_on:
      redis:
        condition: service_healthy  # 依赖Redis服务健康状态

networks:
  my-network:
    driver: bridge  # 使用bridge驱动创建自定义网络

docker-compose-elk.yml

version: '3'  # 指定 Docker Compose 文件格式版本为3

# 执行脚本: docker-compose -p elk -f docker-compose-elk.yml up -d
# 验证命令: GET _cat/indices - 确认 group-buy-market-log- 索引存在即表示日志接入成功

services:
  elasticsearch:
    image: elasticsearch:7.17.28  # 使用指定版本的 Elasticsearch 官方镜像
    ports:
      - '9200:9200'  # 暴露 REST API 端口(HTTP通信)
      - '9300:9300'  # 暴露集群内部通信端口(TCP)
    container_name: elasticsearch  # 设置固定容器名称
    restart: always  # 容器退出时自动重启
    environment:
      - 'cluster.name=elasticsearch' # 定义 Elasticsearch 集群名称
      - 'discovery.type=single-node' # 单节点模式(无需集群发现机制)
      - "cluster.name=docker-cluster"  # 设置集群名称(覆盖前一设置,保留其一即可)
      - 'ES_JAVA_OPTS=-Xms512m -Xmx512m'  # JVM 内存分配(最小/最大堆内存均为512MB)
    networks:
      - elk  # 连接到名为 elk 的自定义网络

  logstash:
    image: logstash:7.17.28  # 使用与 ES 版本匹配的 Logstash 镜像
    container_name: logstash
    restart: always
    volumes:
      # 挂载宿主机配置文件到容器(Windows路径示例)
      - D:/Docker/volumes/elk/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
    ports:
      - '4560:4560'          # 自定义日志接收端口(TCP)
      - '50000:50000/tcp'    # 预留日志输入端口(TCP)
      - '50000:50000/udp'    # 预留日志输入端口(UDP,支持 syslog 等)
      - '9600:9600'          # Logstash API 端口(监控/管理)
    environment:
      LS_JAVA_OPTS: -Xms1024m -Xmx1024m  # 分配 Logstash JVM 内存(1GB)
      TZ: Asia/Shanghai  # 设置容器时区(日志时间戳校准)
      MONITORING_ENABLED: false  # 关闭内置监控节省资源
    links:
      - elasticsearch:es  # 创建别名:通过主机名 `es` 访问 Elasticsearch
    networks:
      - elk
    depends_on:
      - elasticsearch  # 确保 ES 先启动后启动 Logstash(启动顺序控制)

  kibana:
    image: kibana:7.17.28  # Kibana 版本需与 ES 一致
    container_name: kibana
    restart: always
    volumes:
      # 挂载 Kibana 配置文件(Windows路径示例)
      - D:/Docker/volumes/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
    ports:
      - '5601:5601'  # 暴露 Web 界面访问端口
    links:
      - elasticsearch:es  # 通过别名 `es` 访问 ES 服务
    environment:
      - ELASTICSEARCH_URL=http://elasticsearch:9200  # 设置 ES 后端地址(服务名)
      - 'elasticsearch.hosts=http://es:9200'  # 兼容性设置(覆盖上一条设置)
      - I18N_LOCALE=zh-CN  # 设置中文界面
      - TZ=Asia/Shanghai   # 设置容器时区
    networks:
      - elk
    depends_on:
      - elasticsearch  # 依赖 ES 服务先启动

# 自定义网络配置
networks:
  elk:
    driver: bridge  # 创建名为 elk 的桥接网络,使容器间可通过服务名通信
posted @ 2025-07-03 11:21  沦陷在梦里  阅读(22)  评论(0)    收藏  举报