docker-compose安装常用软件

张开发
2026/4/8 12:25:38 15 分钟阅读

分享文章

docker-compose安装常用软件
# Docker Compose 配置文件版本3.8 是较新的稳定版本支持更多特性version:3.8# 定义自定义网络所有服务加入此网络实现容器间通信无需暴露端口到主机networks:wcb_network:driver:bridge# 使用桥接网络默认网络模式适合单机容器通信services:# MySQL 5.7 数据库服务默认账户root密码rootwcb_mysql:image:mysql:5.7# 使用 MySQL 5.7 镜像版本固定避免兼容性问题container_name:wcb_mysql# 容器名称方便管理和访问restart:always# 容器退出时自动重启故障恢复ports:-3306:3306# 端口映射主机端口:容器端口外部可通过 3306 访问MySQLenvironment:# 环境变量配置-MYSQL_ROOT_PASSWORDroot# 根用户密码生产环境需修改为强密码# - MYSQL_DATABASEnacos_config2.0.2 # 容器启动时自动创建的数据库供Nacos使用#- TZAsia/Shanghai # 设置容器时区 我这里通过下面挂载方式同步的宿主机时区和时间了,这里忽略# 可选创建自定义用户如 - MYSQL_USERnacos; - MYSQL_PASSWORDnacosvolumes:# 数据持久化和初始化配置# - ./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密码postgreswcb_pg:image:postgres:14# 使用 PostgreSQL 14 镜像版本可按需修改为13/15等container_name:wcb_pg# 容器名称restart:always# 自动重启environment:# 环境变量# - POSTGRES_USERpostgres # 可选自定义用户名默认是 postgres-POSTGRES_PASSWORDpostgres# 密码生产环境需修改# 可选初始化数据库名 - POSTGRES_DBwcb_default_db# - TZAsia/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:-TZAsia/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:10stimeout:5sretries: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:# 核心配置-MODEstandalone# 单机模式集群模式需修改为 cluster 并配置节点-SPRING_DATASOURCE_PLATFORMmysql# 使用 MySQL 存储配置数据-MYSQL_SERVICE_HOSTwcb_mysql# MySQL 服务名容器内网络直接通过名称访问-MYSQL_SERVICE_PORT3306# MySQL 端口-MYSQL_SERVICE_DB_NAMEnacos_config2.0.2# 对应 MySQL 中自动创建的数据库-MYSQL_SERVICE_USERroot# 数据库用户名-MYSQL_SERVICE_PASSWORDroot# 数据库密码与 MySQL 配置一致-MYSQL_DATABASE_NUM1# 数据库数量单机1个-NACOS_AUTH_ENABLEtrue# 开启认证默认用户名/密码nacos/nacosvolumes:# 数据持久化-./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.typesingle-node# 单节点模式无需集群发现-cluster.namedocker-cluster# 集群名称-node.namees-node-1# 节点名称-bootstrap.memory_locktrue# 锁定内存避免内存交换影响性能# JVM GC 日志配置适配 JDK 8避免权限和语法错误-XX:PrintGCDetails-XX:PrintGCDateStamps-XX:PrintGCTimeStamps-XX:UseGCLogFileRotation-XX:NumberOfGCLogFiles32-XX:GCLogFileSize64m-Xloggc:logs/gc.log-xpack.security.enabledfalse# 关闭安全认证测试环境用生产环境需开启ulimits:# 系统资源限制memlock:soft:-1hard:-1# 允许内存锁定配合 bootstrap.memory_locktruevolumes:# 数据和日志挂载注意权限# 数据持久化目录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:10stimeout:5sretries:5

更多文章