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'
networks:
skywalking-network:
driver: bridge
services:
skywalking-mysql:
image: docker.1ms.run/mysql:8.0
container_name: skywalking-mysql
networks:
- skywalking-network
environment:
MYSQL_ROOT_PASSWORD: root@123456
MYSQL_DATABASE: skywalking
MYSQL_USER: skywalking
MYSQL_PASSWORD: sky@123456
TZ: Asia/Shanghai
command:
- --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"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
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
environment:
TZ: Asia/Shanghai
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"
volumes:
- /data/dockerData/skywalking/oap/logs:/skywalking/oap-server/logs
- /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"
- "12800:12800"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:12800/health/check"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
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
environment:
TZ: Asia/Shanghai
SW_OAP_ADDRESS: http://skywalking-oap:12800
SW_HEALTH_CHECKER: default
JAVA_OPTS: "-Xms256m -Xmx256m"
volumes:
- /data/dockerData/skywalking/ui/logs:/skywalking/ui/logs
- /etc/localtime:/etc/localtime:ro
ports:
- "8080: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 up -d
docker compose restart
5. 验证部署
-
访问UI界面:浏览器访问
http://服务器IP:8080,能看到SkyWalking控制台即说明部署成功。 -
检查容器日志(排查问题用):
docker compose logs -f skywalking-oap
docker compose logs -f skywalking-ui
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 -
生产环境优化建议:
调整JVM内存(如OAP的 Xms/Xmx 改为 1G/2G);
-
关闭MySQL的3306端口对外暴露(注释掉ports配置);
-
更换更复杂的MySQL密码,并限制MySQL用户的访问权限;
-
增加容器资源限制(如
deploy.resources); -
配置MySQL主从或备份策略,防止数据丢失。
更多推荐

所有评论(0)