docker-compose安装常用软件
·
# Docker Compose 配置文件版本,3.8 是较新的稳定版本,支持更多特性
version: '3.8'
# 定义自定义网络,所有服务加入此网络,实现容器间通信(无需暴露端口到主机)
networks:
wcb_network:
driver: bridge # 使用桥接网络(默认网络模式,适合单机容器通信)
services:
# MySQL 5.7 数据库服务(默认账户:root,密码:root)
wcb_mysql:
image: mysql:5.7 # 使用 MySQL 5.7 镜像(版本固定,避免兼容性问题)
container_name: wcb_mysql # 容器名称,方便管理和访问
restart: always # 容器退出时自动重启(故障恢复)
ports:
- "3306:3306" # 端口映射(主机端口:容器端口),外部可通过 3306 访问MySQL
environment: # 环境变量配置
- MYSQL_ROOT_PASSWORD=root # 根用户密码(生产环境需修改为强密码)
# - MYSQL_DATABASE=nacos_config2.0.2 # 容器启动时自动创建的数据库(供Nacos使用)
#- TZ=Asia/Shanghai # 设置容器时区 我这里通过下面挂载方式同步的宿主机时区和时间了,这里忽略
# 可选:创建自定义用户(如 - MYSQL_USER=nacos; - MYSQL_PASSWORD=nacos)
volumes: # 数据持久化和初始化配置
# - ./container_config/mysql/init:/docker-entrypoint-initdb.d # 挂载初始化脚本目录(.sql/.sh文件),容器启动时自动执行(如建表语句)
- ./container_data/mysql/log:/var/log/mysql # 映射日志目录,宿主机:容器
- ./container_data/mysql/data:/var/lib/mysql # 映射数据目录,宿主机:容器
- ./container_config/mysql/conf.d:/etc/mysql/conf.d # 映射配置目录,宿主机:容器
- /etc/localtime:/etc/localtime:ro # 让容器的时钟与宿主机时钟同步,避免时间的问题,ro是read only的意思,就是只读。
networks:
- wcb_network # 加入自定义网络,与其他服务通信
healthcheck: # 健康检查 Docker 相当于在容器内执行下面的语句,可以直接docker ps查看状态STATUS Up 1 second (health)
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
interval: 10s # 每 10 秒检查一次
timeout: 5s # 超过 5 秒没响应,就认为本次检查失败。
retries: 5 # 连续失败 5 次,才标记为不健康 避免刚启动时临时连不上就误判。
# PostgreSQL 14 数据库服务(默认账户:postgres,密码:postgres)
wcb_pg:
image: postgres:14 # 使用 PostgreSQL 14 镜像(版本可按需修改为13/15等)
container_name: wcb_pg # 容器名称
restart: always # 自动重启
environment: # 环境变量
# - POSTGRES_USER=postgres # 可选:自定义用户名(默认是 postgres)
- POSTGRES_PASSWORD=postgres # 密码(生产环境需修改)
# 可选:初始化数据库名 - POSTGRES_DB=wcb_default_db
# - TZ=Asia/Shanghai # 时区设置(避免时间同步问题) 我这里通过下面挂载方式同步的宿主机时区和时间了,这里忽略
volumes: # 数据和配置挂载
- ./container_data/pg/data:/var/lib/postgresql/data # 数据持久化目录(PostgreSQL 数据文件存储路径)
- ./container_config/pg/conf/postgresql.conf:/etc/postgresql/postgresql.conf # 可选:挂载自定义配置文件(如需修改 PostgreSQL 配置)
- /etc/localtime:/etc/localtime:ro # 让容器的时钟与宿主机时钟同步,避免时间的问题,ro是read only的意思,就是只读。
ports:
- "5432:5432" # 端口映射,外部通过 5432 访问
networks:
- wcb_network # 加入统一网络
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"] # 健康检查
interval: 10s # 每10秒检查一次
timeout: 5s # 超时5秒算失败
retries: 5 # 连续失败5次才标记不健康
# Redis 7.2 缓存服务(默认密码:123456,需在配置文件中设置)
wcb_redis:
image: redis:7.2 # Redis 7.2 镜像
container_name: wcb_redis # 容器名称
restart: always # docker启动时,自动启动该容器
ports:
- "6379:6379" # 端口映射(Redis默认端口)
environment:
- TZ=Asia/Shanghai # 时区设置
volumes: # 数据和配置挂载
- ./container_data/redis/data:/data # 持久化 Redis 数据(RDB/AOF文件)
- ./container_config/redis/conf/redis.conf:/etc/redis/redis.conf # 挂载自定义配置文件(如设置密码、持久化策略等)
- /etc/localtime:/etc/localtime:ro # 让容器的时钟与宿主机时钟同步,避免时间的问题,ro是read only的意思,就是只读。
command: redis-server /etc/redis/redis.conf # 启动命令:使用自定义配置文件
#command: redis-server --requirepass 123456 --appendonly yes --protected-mode no # 启动命令:设置密码 + 开启AOF持久化 + 关闭保护模式
networks:
- wcb_network # 加入统一网络
healthcheck:
test: ["CMD", "redis-cli", "-a", "123456", "ping"] # 检查Redis健康状态
interval: 10s
timeout: 5s
retries: 5
# Nacos 2.0.2 服务注册与配置中心(账户:nacos;密码nacos)
wcb_nacos:
image: nacos/nacos-server:2.0.2 # 固定版本(避免自动更新导致兼容性问题)
container_name: wcb_nacos # 容器名称
restart: always # 自动重启
ports: # 端口映射(Nacos 2.x 需暴露多个端口)
- "8848:8848" # HTTP 接口端口(控制台和客户端访问)
- "9848:9848" # 客户端 gRPC 通信端口(2.x 新增)
- "9849:9849" # 服务端 gRPC 通信端口(2.x 新增)
depends_on: # 依赖关系:等待 MySQL 健康后再启动
wcb_mysql:
condition: service_healthy # 仅当 MySQL 健康检查通过后启动
environment: # 核心配置
- MODE=standalone # 单机模式(集群模式需修改为 cluster 并配置节点)
- SPRING_DATASOURCE_PLATFORM=mysql # 使用 MySQL 存储配置数据
- MYSQL_SERVICE_HOST=wcb_mysql # MySQL 服务名(容器内网络直接通过名称访问)
- MYSQL_SERVICE_PORT=3306 # MySQL 端口
- MYSQL_SERVICE_DB_NAME=nacos_config2.0.2 # 对应 MySQL 中自动创建的数据库
- MYSQL_SERVICE_USER=root # 数据库用户名
- MYSQL_SERVICE_PASSWORD=root # 数据库密码(与 MySQL 配置一致)
- MYSQL_DATABASE_NUM=1 # 数据库数量(单机1个)
- NACOS_AUTH_ENABLE=true # 开启认证(默认用户名/密码:nacos/nacos)
volumes: # 数据持久化
- ./container_config/nacos/conf:/home/nacos/conf # 可选:挂载配置文件(如需自定义 Nacos 配置)
- ./container_data/nacos/data:/home/nacos/data # 数据持久化目录
# - ./container_data/nacos/logs:/home/nacos/logs # 日志目录
networks:
- wcb_network # 加入统一网络
# Elasticsearch 8.11.0 搜索引擎
wcb_es:
image: elasticsearch:8.11.0 # 版本(7.x/8.x 均可,8.x 安全性增强)
container_name: wcb_es # 容器名称
restart: always # 自动重启
environment: # 核心配置
- ES_JAVA_OPTS=-Xms1g -Xmx1g # JVM 堆内存(最小=最大,避免动态调整)
- discovery.type=single-node # 单节点模式(无需集群发现)
- cluster.name=docker-cluster # 集群名称
- node.name=es-node-1 # 节点名称
- bootstrap.memory_lock=true # 锁定内存(避免内存交换影响性能)
# JVM GC 日志配置(适配 JDK 8+,避免权限和语法错误)
- XX:+PrintGCDetails
- XX:+PrintGCDateStamps
- XX:+PrintGCTimeStamps
- XX:+UseGCLogFileRotation
- XX:NumberOfGCLogFiles=32
- XX:GCLogFileSize=64m
- Xloggc:logs/gc.log
- xpack.security.enabled=false # 关闭安全认证(测试环境用,生产环境需开启)
ulimits: # 系统资源限制
memlock:
soft: -1
hard: -1 # 允许内存锁定(配合 bootstrap.memory_lock=true)
volumes: # 数据和日志挂载(注意权限!)
# 数据持久化目录(ES 数据存储路径)
- ./container_data/es/data:/usr/share/elasticsearch/data
- ./container_data/es/config:/usr/share/elasticsearch/config # 可选:挂载配置文件(如需自定义 ES 配置)
# - ./container_data/es/logs:/usr/share/elasticsearch/logs # 日志目录
ports:
- "9200:9200" # HTTP API 端口(外部访问)
- "9300:9300" # 节点间通信端口(集群用)
networks:
- wcb_network # 加入统一网络
healthcheck: # 健康检查(验证 ES 集群健康状态)
test: ["CMD", "curl", "-f", "http://localhost:9200/_cluster/health"] # 访问集群健康接口
interval: 10s
timeout: 5s
retries: 5
更多推荐




所有评论(0)