Docker部署skywalking—MySQL为存储

一、整体规划
- 数据存储目录:所有数据统一存储到
/data/dockerData/skywalking - 时区配置:所有容器强制设置为东八区(Asia/Shanghai)
- 核心组件:MySQL8(存储)、SkyWalking OAP(核心)、SkyWalking UI(可视化)
- 网络隔离:自定义桥接网络,避免端口冲突
二、部署步骤
1. 环境准备
- 确保服务器已安装
docker和docker compose,并创建基础目录:
# 创建目录结构
mkdir -p /data/dockerData/skywalking/{mysql/data,mysql/conf,mysql/driver,oap/logs,oap/config,ui/logs}
# 赋予目录读写权限(生产环境可按需调整)
chmod -R 777 /data/dockerData/skywalking
- 拷贝驱动到/data/dockerData/mysql/driver中
2. 编写 docker-compose.yml
创建 /data/dockerData/skywalking/docker-compose.yml,内容如下:
version: '3.8'
# 自定义网络,隔离SkyWalking组件
networks:
skywalking-network:
driver: bridge
services:
# ========== MySQL8 服务 ==========
skywalking-mysql:
image: docker.1ms.run/mysql:8.0
container_name: skywalking-mysql
networks:
- skywalking-network
environment:
# MySQL基础配置
MYSQL_ROOT_PASSWORD: root@123456 # 根密码,建议生产环境修改
MYSQL_DATABASE: skywalking # 自动创建skywalking库
MYSQL_USER: skywalking # skywalking专用用户
MYSQL_PASSWORD: sky@123456 # 专用用户密码,建议修改
TZ: Asia/Shanghai # 东八区时区
command:
# MySQL8兼容配置(解决OAP连接认证问题)
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
volumes:
- /data/dockerData/skywalking/mysql/data:/var/lib/mysql # 数据持久化
- /etc/localtime:/etc/localtime:ro # 同步宿主机时区
- /etc/timezone:/etc/timezone:ro
ports:
- "3306:3306" # 可选,仅需外部访问MySQL时保留
# 健康检查:确保MySQL初始化完成后再启动OAP
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
# ========== SkyWalking OAP 核心服务 ==========
skywalking-oap:
image: docker.1ms.run/apache/skywalking-oap-server:10.3.0
container_name: skywalking-oap
networks:
- skywalking-network
depends_on:
skywalking-mysql:
condition: service_healthy # 依赖MySQL健康检查通过
environment:
TZ: Asia/Shanghai
# 存储类型配置(MySQL)
SW_STORAGE: mysql
SW_JDBC_URL: jdbc:mysql://skywalking-mysql:3306/skywalking?rewriteBatchedStatements=true&allowMultiQueries=true
SW_DATA_SOURCE_USER: skywalking
SW_DATA_SOURCE_PASSWORD: sky@123456
SW_RECEIVER_GRPC_PORT: 11801
# 其他基础配置
SW_HEALTH_CHECKER: default
SW_TELEMETRY: prometheus
JAVA_OPTS: "-Xms512m -Xmx1024m" # JVM内存,按需调整(生产建议1G+)
volumes:
#- /data/dockerData/skywalking/oap/config/application.yml:/skywalking/config/application.yml # 第一次运行把这句删了(可选)
- /data/dockerData/skywalking/oap/logs:/skywalking/oap-server/logs # OAP日志持久化
- /data/dockerData/skywalking/mysql/driver/mysql-connector-j-8.0.33.jar:/skywalking/oap-libs/mysql-connector-j-8.0.33.jar
- /etc/localtime:/etc/localtime:ro
ports:
- "11801:11801" # Agent上报数据端口
- "12800:12800" # UI连接OAP的端口
# 健康检查:确保OAP启动完成后再启动UI
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:12800/health/check"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
# ========== SkyWalking UI 可视化服务 ==========
skywalking-ui:
image: docker.1ms.run/apache/skywalking-ui:10.3.0
container_name: skywalking-ui
restart: always
networks:
- skywalking-network
depends_on:
skywalking-oap:
condition: service_healthy # 依赖OAP健康检查通过
environment:
TZ: Asia/Shanghai
SW_OAP_ADDRESS: http://skywalking-oap:12800 # 连接OAP的地址
SW_HEALTH_CHECKER: default
JAVA_OPTS: "-Xms256m -Xmx256m" # UI内存,按需调整
volumes:
- /data/dockerData/skywalking/ui/logs:/skywalking/ui/logs # UI日志持久化
- /etc/localtime:/etc/localtime:ro
ports:
- "8080:8080" # UI访问端口,可自定义(如改为80:8080)
3. 启动服务
# 进入目录
cd /data/dockerData/skywalking
# 启动服务(后台运行)
docker compose up -d
# 查看启动状态
docker compose ps
注意,如果是非docker官方compose插件,命令中间要加-
4.映射配置文件出来(可选)
为了比较好的控制oap,可以将配置文件映射一下。
# 复制配置文件出来
docker cp skywalking-oap:/skywalking/config/application.yml /data/dockerData/skywalking/config
#删除容器
docker compose down -v
# 编辑docker-compose.yml将skywalking-oap的volumes中的配置文件映射注释删掉
#重启容器
docker compose up -d
# 如果服务状态不正常再重启下就对了(因为我配置文件有健康检测,但是oap第一次创建会超时,就容易导致ui启动失败。重启下就对了)
docker compose restart
5. 验证部署
- 访问UI界面:浏览器访问
http://服务器IP:8080,能看到SkyWalking控制台即说明部署成功。 - 检查容器日志(排查问题用):
# 查看OAP日志 docker compose logs -f skywalking-oap # 查看UI日志 docker compose logs -f skywalking-ui # 查看MySQL日志 docker compose logs -f skywalking-mysql
三、关键说明
- 时区保障:
- 所有容器通过
TZ=Asia/Shanghai环境变量设置时区; - 挂载宿主机
/etc/localtime和/etc/timezone确保时区同步。
- 所有容器通过
- 数据持久化:
- MySQL数据:
/data/dockerData/skywalking/mysql/data - OAP日志:
/data/dockerData/skywalking/oap/logs - UI日志:
/data/dockerData/skywalking/ui/logs
- MySQL数据:
- 生产环境优化建议:
- 调整JVM内存(如OAP的
Xms/Xmx改为1G/2G); - 关闭MySQL的3306端口对外暴露(注释掉ports配置);
- 更换更复杂的MySQL密码,并限制MySQL用户的访问权限;
- 增加容器资源限制(如
deploy.resources); - 配置MySQL主从或备份策略,防止数据丢失。
- 调整JVM内存(如OAP的
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 轻舟渡
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果