skywalking Docker & Self-Hosted Deployment

GitHub

APM, Application Performance Monitoring System

RAW Compose
1. Pull Image (DOCKERHUB) docker pull library/${OAP_IMAGE
2. Docker Run (1-Click Launch) docker run -d --name skywalking -p 9200:9200 --restart always ${OAP_IMAGE:-ghcr.io/apache/skywalking/oap:latest}
3. Podman Run podman run -d --name skywalking -p 9200:9200 --restart always ${OAP_IMAGE:-ghcr.io/apache/skywalking/oap:latest}
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/library/${OAP_IMAGE:-ghcr.io/apache/skywalking/oap
5. ORAS Pull (OCI Artifact) oras pull ${OAP_IMAGE:-ghcr.io/apache/skywalking/oap:latest}
6. Compose Deployment docker compose up -d
docker/docker-compose.yml
Download .yml
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

services:
  elasticsearch:
    profiles:
      - "elasticsearch"
    image: ${ELASTICSEARCH_IMAGE:-docker.elastic.co/elasticsearch/elasticsearch-oss:7.4.2}
    container_name: elasticsearch
    ports:
      - "9200:9200"
    networks:
      - demo
    healthcheck:
      test: [ "CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1" ]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1

  banyandb:
    profiles:
      - "banyandb"
    image: ${BANYANDB_IMAGE}
    container_name: banyandb
    networks:
      - demo
    expose:
      - 17912
    ports:
      - 17913:17913
    command: standalone --stream-root-path /tmp/stream-data --measure-root-path /tmp/measure-data
    healthcheck:
      test: [ "CMD", "sh", "-c", "nc -nz 127.0.0.1 17912" ]
      interval: 5s
      timeout: 60s
      retries: 120

  oap-base: &oap-base
    profiles: [ "none" ]
    image: ${OAP_IMAGE:-ghcr.io/apache/skywalking/oap:latest}
    ports:
      - "11800:11800"
      - "12800:12800"
      - "17128:17128"
    networks:
      - demo
    healthcheck:
      # The OAP image (eclipse-temurin JRE) ships bash but no curl/wget/nc,
      # so probe the query port with bash's built-in /dev/tcp instead.
      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/12800" ]
      interval: 15s
      timeout: 10s
      retries: 10
      # OAP can take 60-120s to boot (BanyanDB schema install); don't count
      # failures against the retry budget during that window.
      start_period: 90s
    environment: &oap-env
      SW_HEALTH_CHECKER: default
      SW_TELEMETRY: prometheus
      JAVA_OPTS: "-Xms2048m -Xmx2048m"

  oap-es:
    <<: *oap-base
    profiles: 
      - "elasticsearch"
    container_name: oap
    depends_on:
      elasticsearch:
        condition: service_healthy
    environment:
      <<: *oap-env
      SW_STORAGE: elasticsearch
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200

  oap-bdb:
    <<: *oap-base
    profiles:
      - "banyandb"
    container_name: oap
    depends_on:
      banyandb:
        condition: service_healthy
    environment:
      <<: *oap-env
      SW_STORAGE: banyandb
      SW_STORAGE_BANYANDB_TARGETS: banyandb:17912

  # SkyWalking Horizon UI โ€” official web UI as of 10.5.0.
  # Source: https://github.com/apache/skywalking-horizon-ui
  # Talks to OAP via the public GraphQL/REST port (12800) and to admin-server
  # for write APIs (UI templates, runtime-rule, dsl-debugging, status, inspect).
  ui:
    image: ${UI_IMAGE:-ghcr.io/apache/skywalking-horizon-ui:latest}
    container_name: ui
    ports:
      # Horizon listens on 8081 inside the container (HORIZON_SERVER_PORT).
      - "8080:8081"
    networks:
      - demo
    volumes:
      # Backend URLs (OAP query/admin/zipkin) and login users come ONLY from
      # this file; there are no env vars for them. The image's HORIZON_CONFIG
      # default points here.
      - ./horizon.yaml:/app/horizon.yaml:ro

networks:
  demo: