Docker拉取应用环境
docker-compse一键安装应用环境
参考的资源包下载地址:https://gitcode.net/KnowledgePlanet/big-market/big-market-dev-ops
命令执行:
docker-compose -f docker-compose-environment.yml up -d
yaml的文件内容如下:
# 命令执行 docker-compose up -d
# docker-compose -f docker-compose-environment.yml up -d
version: "3.9"
services:
# yum install -y httpd-tools
nginx:
image: registry.cn-hangzhou.aliyuncs.com/xfg-studio/nginx:latest
container_name: nginx
restart: always
ports:
- "443:443"
- "80:80"
volumes:
- ./nginx/logs:/var/log/nginx
- ./nginx/html:/usr/share/nginx/html
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/conf.d:/etc/nginx/conf.d
- ./nginx/ssl:/etc/nginx/ssl/
privileged: true
networks:
- my-network
# 注册中心 https://github.com/nacos-group/nacos-docker - 其他配置可参考(集群)
# http://127.0.0.1:8848/nacos 【账号:nacos 密码:nacos】
nacos:
image: nacos/nacos-server:v2.2.3-slim
container_name: nacos
restart: always
ports:
- "8848:8848"
- "9848:9848"
environment:
- PREFER_HOST_MODE=hostname
- MODE=standalone
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=mysql
- MYSQL_SERVICE_DB_NAME=nacos_config
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_USER=root
- MYSQL_SERVICE_PASSWORD=12qw!@QW
- MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
- NACOS_AUTH_IDENTITY_KEY=2222
- NACOS_AUTH_IDENTITY_VALUE=2xxx
- NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789
networks:
- my-network
depends_on:
mysql:
condition: service_healthy
deploy:
resources:
limits:
cpus: "1.00"
memory: "1G"
mysql:
image: mysql:8.0.32
container_name: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 12qw!@QW
ports:
- "13306:3306"
volumes:
- ./mysql/sql:/docker-entrypoint-initdb.d
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 10s
retries: 10
start_period: 15s
networks:
- my-network
# phpmyadmin https://hub.docker.com/_/phpmyadmin
phpmyadmin:
image: phpmyadmin:5.2.1
container_name: phpmyadmin
hostname: phpmyadmin
ports:
- 8899:80
environment:
- PMA_HOST=mysql
- PMA_PORT=3306
- MYSQL_ROOT_PASSWORD=12qw!@QW
depends_on:
mysql:
condition: service_healthy
networks:
- my-network
deploy:
resources:
limits:
cpus: "0.25"
memory: "256M"
# Redis
# chmod 666 redis.conf
redis:
image: redis:6.2
container_name: redis
restart: always
hostname: redis
privileged: true
ports:
- 16379:6379
volumes:
- ./redis/redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- my-network
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 3
deploy:
resources:
limits:
cpus: "0.25"
memory: "256M"
# RedisAdmin https://github.com/joeferner/redis-commander
# 账密 admin/admin
redis-admin:
image: spryker/redis-commander:0.8.0
container_name: redis-admin
hostname: redis-commander
restart: always
ports:
- 8081:8081
environment:
- REDIS_HOSTS=local:redis:6379
- HTTP_USER=fuzhengwei
- HTTP_PASSWORD=12qw!@QW
- LANG=C.UTF-8
- LANGUAGE=C.UTF-8
- LC_ALL=C.UTF-8
networks:
- my-network
depends_on:
redis:
condition: service_healthy
# rabbitmq
# 账密 admin/admin
# rabbitmq-plugins enable rabbitmq_management
# chmod 777 enabled_plugins
rabbitmq:
image: rabbitmq:3.12.9
container_name: rabbitmq
restart: always
ports:
- "5672:5672"
- "15672:15672"
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: 12qw!@QW
command: rabbitmq-server
volumes:
- ./rabbitmq/enabled_plugins:/etc/rabbitmq/enabled_plugins
deploy:
resources:
limits:
cpus: "0.25"
memory: "256M"
zookeeper:
image: zookeeper:3.9.0
container_name: zookeeper
restart: always
hostname: zoo1
ports:
- 2181:2181
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zookeeper:2888:3888;2181
networks:
- my-network
deploy:
resources:
limits:
cpus: "0.25"
memory: "256M"
# canal-server 伪装成mysql的从库
# docker cp canal-server:/home/admin/canal-server/conf/example/instance.properties /Users/xiaofuge/Documents/develop/github/xfg-studio/xfg-dev-tech-canal/docs/dev-ops/canal
# canal-server:
# image: canal/canal-server:v1.1.7
# container_name: canal-server
# restart: unless-stopped
# ports:
# - "11111:11111"
# volumes:
# - ./canal/instance.properties:/home/admin/canal-server/conf/example/instance.properties
# depends_on:
# - mysql
# networks:
# - my-network
# canal-adapter 负责数据分发
# docker cp canal-adapter:/opt/canal-adapter/conf/application.yml /Users/xiaofuge/Documents/develop/github/xfg-studio/xfg-dev-tech-canal/docs/dev-ops/canal-adapter
# docker cp canal-adapter:/opt/canal-adapter/conf/rdb/mytest_user.yml /Users/xiaofuge/Documents/develop/github/xfg-studio/xfg-dev-tech-canal/docs/dev-ops/canal-adapter/rdb
# canal-adapter:
# image: coopersoft/canal-adapter:v1.1.6
# container_name: canal-adapter
# restart: unless-stopped
# ports:
# - "8082:8081"
# volumes:
# - ./canal-adapter/conf:/opt/canal-adapter/conf
# - ./canal-adapter/es7:/opt/canal-adapter/conf/es7
# depends_on:
# - mysql
# networks:
# - my-network
#
# elasticsearch:
# image: elasticsearch:7.17.14
# ports:
# - '9200:9200'
# - '9300:9300'
# container_name: elasticsearch
# restart: always
# environment:
# - 'cluster.name=elasticsearch' # 设置集群名称为elasticsearch
# - 'discovery.type=single-node' # 以单一节点模式启动
# - "cluster.name=docker-cluster" # 设置名称
# - 'ES_JAVA_OPTS=-Xms512m -Xmx512m' # 设置使用jvm内存大小
# networks:
# - my-network
# kibana:
# image: kibana:7.17.14
# container_name: kibana
# restart: always
# volumes:
# - /etc/localtime:/etc/localtime
# - ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
# ports:
# - '5601:5601'
# links:
# - elasticsearch:es #可以用es这个域名访问elasticsearch服务
# environment:
# - ELASTICSEARCH_URL=http://elasticsearch:9200 #设置访问elasticsearch的地址
# - 'elasticsearch.hosts=http://es:9200' #设置访问elasticsearch的地址
# - I18N_LOCALE=zh-CN
# networks:
# - my-network
# depends_on:
# - elasticsearch
# http://127.0.0.1:9090/xxl-job-admin admin/123456 - 安装后稍等会访问即可
# 官网镜像为 xuxueli/xxl-job-admin:2.4.1 但不支持ARM架构【需要自己打包】,所以找了一个 kuschzzp/xxl-job-aarch64:2.4.0 镜像支持 AMD/ARM
xxl-job-admin:
image: xuxueli/xxl-job-admin:2.4.1 #M1 Mac 更换镜像 kuschzzp/xxl-job-aarch64:2.4.0
container_name: xxl-job-admin
restart: always
depends_on:
- mysql
ports:
- "9090:9090"
links:
- mysql
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/xxl_job?serverTimezone=UTC&characterEncoding=utf8&autoReconnect=true&serverTimezone=Asia/Shanghai
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=12qw!@QW
- SERVER_PORT=9090
networks:
- my-network
# # 数据采集
# prometheus:
# image: bitnami/prometheus:2.47.2
# container_name: prometheus
# restart: always
# ports:
# - 9090:9090
# volumes:
# - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
# networks:
# - my-network
#
# # 监控界面
# grafana:
# image: grafana/grafana:10.2.0
# container_name: grafana
# restart: always
# ports:
# - 4000:4000
# depends_on:
# - prometheus
# volumes:
# - ./grafana:/etc/grafana
# networks:
# - my-network
networks:
my-network:
driver: bridge
配置程序分析:
1. Nginx
作用: Web服务器和反向代理
配置参数:
ports: 暴露80(HTTP)和443(HTTPS)端口volumes: 挂载配置、日志、HTML文件和SSL证书目录privileged: true: 赋予容器特权模式,便于操作
2. Nacos
作用: 服务发现和配置管理中心
配置参数:
ports: 8848(HTTP API)和9848(gRPC API)端口environment:MODE=standalone: 单机模式运行- MySQL数据库连接配置(主机、数据库名、端口、用户名、密码)
- 认证相关配置(密钥、令牌)
depends_on: 依赖MySQL服务resources: 限制CPU和内存使用
3. MySQL
作用: 关系型数据库服务
配置参数:
command: 使用原生密码认证插件environment:- 设置时区为上海
- 设置root密码为
12qw!@QW
ports: 映射13306到容器内3306volumes: 挂载初始化SQL脚本目录healthcheck: 健康检查配置,使用mysqladmin ping命令
4. phpMyAdmin
作用: MySQL的Web管理界面
配置参数:
ports: 映射8899到容器内80environment:- 连接MySQL的配置(主机、端口、密码)
depends_on: 依赖MySQL服务resources: 限制资源使用
5. Redis
作用: 内存键值数据库
配置参数:
ports: 映射16379到容器内6379volumes: 挂载自定义配置文件command: 指定使用自定义配置文件启动healthcheck: 使用redis-cli ping检查状态
6. Redis-Commander (Redis Admin)
作用: Redis的Web管理界面
配置参数:
ports: 映射8081到容器内8081environment:- 连接Redis的配置
- 设置Web界面登录凭证(用户名
fuzhengwei,密码12qw!@QW)
7. RabbitMQ
作用: 消息队列服务
配置参数:
ports:- 5672: AMQP协议端口
- 15672: 管理界面端口
environment: 设置默认用户和密码(admin/12qw!@QW)volumes: 挂载插件配置文件
8. Zookeeper
作用: 分布式协调服务
配置参数:
ports: 映射2181端口environment: 配置单节点集群设置
9. XXL-Job
作用: 分布式任务调度平台
配置参数:
ports: 映射9090端口environment:- 数据库连接配置(连接MySQL的xxl_job数据库)
- 设置服务端口
depends_on: 依赖MySQL服务
网络配置
my-network: 创建一个桥接网络,所有服务都加入此网络,便于服务间通信
未启用的服务
以下是 Docker Compose 文件中被注释掉但同样重要的服务详解,这些服务通常在特定场景下使用:
1. Canal 服务组(MySQL 增量数据同步)
(1) Canal-Server
作用:伪装成 MySQL 的从库,实时解析 binlog 日志
核心配置:
ports:
- "11111:11111" # Canal 客户端通信端口
volumes:
- ./canal/instance.properties:/home/admin/canal-server/conf/example/instance.properties # 关键配置文件
配置文件作用:
instance.properties 需配置:
canal.instance.mysql.slaveId:伪装为 MySQL 从库的 IDcanal.instance.filter.regex:监控的数据库表过滤规则(如.*\\..*监控所有表)
(2) Canal-Adapter
作用:将 Canal-Server 解析的数据分发到其他存储(如 ES、Redis)
关键配置:
ports:
- "8082:8081" # Adapter 管理端口
volumes:
- ./canal-adapter/conf:/opt/canal-adapter/conf # 包含 application.yml
- ./canal-adapter/es7:/opt/canal-adapter/conf/es7 # ES 映射规则
典型场景:
将 MySQL 数据实时同步到 Elasticsearch,需在 application.yml 中配置:
- 数据源连接(指向 Canal-Server)
- 目标存储(如 ES 的地址和索引映射)
2. Elasticsearch + Kibana(搜索与分析)
(1) Elasticsearch
作用:分布式搜索和数据分析引擎
关键参数:
environment:
- 'discovery.type=single-node' # 单节点模式(生产环境需集群)
- 'ES_JAVA_OPTS=-Xms512m -Xmx512m' # JVM 内存限制
ports:
- '9200:9200' # REST API 端口
- '9300:9300' # 集群通信端口
注意:
- 生产环境需挂载
data目录持久化数据 - 可通过
elasticsearch.yml配置安全认证
(2) Kibana
作用:Elasticsearch 的可视化分析界面
核心配置:
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200 # 指向 ES 服务
- I18N_LOCALE=zh-CN # 中文界面
ports:
- '5601:5601' # Web 访问端口
典型用途:
- 日志分析(需配合 Filebeat 或 Logstash)
- 数据仪表盘构建
3. Prometheus + Grafana(监控系统)
(1) Prometheus
作用:指标采集与存储
关键配置:
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml # 监控目标配置
ports:
- 9090:9090 # 管理界面端口
配置文件示例:
prometheus.yml 中需定义:
scrape_configs:监控哪些服务(如 Node Exporter、MySQL Exporter)alerting:告警规则配置
(2) Grafana
作用:监控数据可视化
核心参数:
ports:
- 4000:4000 # 默认端口应为 3000,此处可能是自定义
volumes:
- ./grafana:/etc/grafana # 持久化仪表盘配置
典型场景:
- 通过 Prometheus 数据源展示 CPU/内存/服务健康状态
- 需手动导入或创建 Dashboard
被注释服务的共同特点
- 资源占用较高
Elasticsearch 和 Prometheus 对内存需求较大,适合单独部署。 - 配置复杂度高
如 Canal 需要精确匹配 MySQL 的 binlog 格式,Prometheus 需配置采集间隔和目标。 - 按需启用
这些服务通常在以下场景使用:- 需要实时数据同步(Canal)
- 全文搜索或日志分析(ES+Kibana)
- 基础设施监控(Prometheus+Grafana)
MySQL
MySQL5.7
docker pull mysql:5.7
运行指令:
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai mysql:5.7
解释一下参数的含义:
-d:以后台的方式运行;
--name mysql:指定容器的名称为 mysql;
-p 3306:3306: 将容器的 3306 端口挂载到宿主机的 3306 端口上(前面是宿主机的端口号,后面是容器的端口号);
-e MYSQL_ROOT_PASSWORD=123456:指定 root 用户的密码为 123456;
-e TZ=Asia/Shanghai:指定容器内部时区为上海时区;

浙公网安备 33010602011771号