一、整体规划

  • 数据存储目录:所有数据统一存储到 /data/dockerData/skywalking

  • 时区配置:所有容器强制设置为东八区(Asia/Shanghai)

  • 核心组件:MySQL8(存储)、SkyWalking OAP(核心)、SkyWalking UI(可视化)

  • 网络隔离:自定义桥接网络,避免端口冲突

二、部署步骤

1. 环境准备
  • 确保服务器已安装 dockerdocker 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主从或备份策略,防止数据丢失。

更多推荐