You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ha...@apache.org on 2019/05/15 09:29:25 UTC

[skywalking] branch docker/build created (now 6103832)

This is an automated email from the ASF dual-hosted git repository.

hanahmily pushed a change to branch docker/build
in repository https://gitbox.apache.org/repos/asf/skywalking.git.


      at 6103832  Update document

This branch includes the following new commits:

     new d74eb21  Update docker building of oap server
     new 85b08e7  Update ui docker
     new f1dfe6e  Update docker-compose
     new 6103832  Update document

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[skywalking] 02/04: Update ui docker

Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hanahmily pushed a commit to branch docker/build
in repository https://gitbox.apache.org/repos/asf/skywalking.git

commit 85b08e7662db566cc8cb76cdf302efed0271d48c
Author: Gao Hongtao <ha...@gmail.com>
AuthorDate: Wed May 15 16:26:11 2019 +0800

    Update ui docker
---
 Makefile                                | 8 +++++++-
 docker/ui/{Dockerfile => Dockerfile.ui} | 7 +++++--
 docker/ui/docker-entrypoint.sh          | 9 +++++++--
 3 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/Makefile b/Makefile
index ffcad30..54ed54b 100644
--- a/Makefile
+++ b/Makefile
@@ -50,7 +50,7 @@ TAG?=latest
 
 docker: build.docker docker.all
 
-DOCKER_TARGETS:=docker.oap
+DOCKER_TARGETS:=docker.oap docker.ui
 
 docker.all: $(DOCKER_TARGETS)
 
@@ -60,6 +60,12 @@ docker.oap: $(SW_ROOT)/docker/oap/docker-entrypoint.sh
 docker.oap: $(SW_ROOT)/docker/oap/log4j2.xml
 		$(DOCKER_RULE)
 
+docker.ui: $(SW_OUT)/apache-skywalking-apm-bin.tar.gz
+docker.ui: $(SW_ROOT)/docker/ui/Dockerfile.ui
+docker.ui: $(SW_ROOT)/docker/ui/docker-entrypoint.sh
+docker.ui: $(SW_ROOT)/docker/ui/logback.xml
+		$(DOCKER_RULE)
+
 
 # $@ is the name of the target
 # $^ the name of the dependencies for the target
diff --git a/docker/ui/Dockerfile b/docker/ui/Dockerfile.ui
similarity index 88%
rename from docker/ui/Dockerfile
rename to docker/ui/Dockerfile.ui
index 4efaa5a..e1bb572 100644
--- a/docker/ui/Dockerfile
+++ b/docker/ui/Dockerfile.ui
@@ -17,7 +17,10 @@
 FROM openjdk:8u181-jdk-stretch
 
 ENV DIST_NAME=apache-skywalking-apm-bin \
-    JAVA_OPTS=" -Xms256M "
+    JAVA_OPTS=" -Xms256M " \
+    SW_OAP_ADDRESS="oap:12800" \
+    SW_TIMEOUT="20000" \
+    SW_ADMIN_PASSWORD="admin"
 
 COPY "$DIST_NAME.tar.gz" /
 
@@ -35,4 +38,4 @@ COPY logback.xml webapp/
 
 EXPOSE 8080
 
-ENTRYPOINT ["sh", "docker-entrypoint.sh"]
\ No newline at end of file
+ENTRYPOINT ["bash", "docker-entrypoint.sh"]
\ No newline at end of file
diff --git a/docker/ui/docker-entrypoint.sh b/docker/ui/docker-entrypoint.sh
index 881368f..6771e22 100755
--- a/docker/ui/docker-entrypoint.sh
+++ b/docker/ui/docker-entrypoint.sh
@@ -16,6 +16,11 @@
 
 #!/bin/bash
 
-set -ex
+set -e
 
-exec java -XX:+PrintFlagsFinal -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -jar webapp/skywalking-webapp.jar --logging.config=webapp/logback.xml --collector.ribbon.listOfServers=${collectorListOfServers} "$@"
+export LOGGING_CONFIG="webapp/logback.xml"
+
+[[ ! -z "$SW_OAP_ADDRESS" ]] && export COLLECTOR_RIBBON_LISTOFSERVERS=${SW_OAP_ADDRESS} && echo "COLLECTOR_RIBBON_LISTOFSERVERS=$COLLECTOR_RIBBON_LISTOFSERVERS"
+[[ ! -z "$SW_TIMEOUT" ]] && export COLLECTOR_RIBBON_READTIMEOUT=${SW_TIMEOUT} && echo "COLLECTOR_RIBBON_READTIMEOUT=$COLLECTOR_RIBBON_READTIMEOUT"
+
+exec java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -jar webapp/skywalking-webapp.jar "$@"


[skywalking] 03/04: Update docker-compose

Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hanahmily pushed a commit to branch docker/build
in repository https://gitbox.apache.org/repos/asf/skywalking.git

commit f1dfe6e6b1cc716e8840680551d92e8b6fedbaaa
Author: Gao Hongtao <ha...@gmail.com>
AuthorDate: Wed May 15 16:50:40 2019 +0800

    Update docker-compose
---
 Makefile                  |  2 ++
 docker/docker-compose.yml | 13 +++++++++----
 docker/ui/Dockerfile.ui   |  5 ++---
 3 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/Makefile b/Makefile
index 54ed54b..acb6a85 100644
--- a/Makefile
+++ b/Makefile
@@ -91,3 +91,5 @@ $(foreach TGT,$(DOCKER_TARGETS),$(eval DOCKER_PUSH_TARGETS+=push.$(TGT)))
 
 # Will build and push docker images.
 docker.push: $(DOCKER_PUSH_TARGETS)
+
+
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index 88b40f7..7b5f821 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -17,7 +17,7 @@
 version: '3.3'
 services:
   elasticsearch:
-    image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
+    image: docker.elastic.co/elasticsearch/elasticsearch:6.4.3
     container_name: elasticsearch
     restart: always
     ports:
@@ -25,6 +25,10 @@ services:
       - 9300:9300
     environment:
       discovery.type: single-node
+    ulimits:
+      memlock:
+        soft: -1
+        hard: -1
   oap:
     image: skywalking/oap
     container_name: oap
@@ -36,8 +40,9 @@ services:
     ports:
       - 11800:11800
       - 12800:12800
-    volumes:
-      - ./config:/skywalking/config:ro
+    environment:
+      SW_STORAGE: elasticsearch
+      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
   ui:
     image: skywalking/ui
     container_name: ui
@@ -49,4 +54,4 @@ services:
     ports:
       - 8080:8080
     environment:
-      collectorListOfServers: oap:12800
+      SW_OAP_ADDRESS: oap:12800
diff --git a/docker/ui/Dockerfile.ui b/docker/ui/Dockerfile.ui
index e1bb572..a52a148 100644
--- a/docker/ui/Dockerfile.ui
+++ b/docker/ui/Dockerfile.ui
@@ -18,9 +18,8 @@ FROM openjdk:8u181-jdk-stretch
 
 ENV DIST_NAME=apache-skywalking-apm-bin \
     JAVA_OPTS=" -Xms256M " \
-    SW_OAP_ADDRESS="oap:12800" \
-    SW_TIMEOUT="20000" \
-    SW_ADMIN_PASSWORD="admin"
+    SW_OAP_ADDRESS="127.0.0.1:12800" \
+    SW_TIMEOUT="20000"
 
 COPY "$DIST_NAME.tar.gz" /
 


[skywalking] 04/04: Update document

Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hanahmily pushed a commit to branch docker/build
in repository https://gitbox.apache.org/repos/asf/skywalking.git

commit 61038322809840abca654e28ba6073f38ed22082
Author: Gao Hongtao <ha...@gmail.com>
AuthorDate: Wed May 15 17:28:41 2019 +0800

    Update document
---
 docker/README.md               | 12 ------------
 docs/en/guides/How-to-build.md | 29 +++++++++++++++++++++++++++++
 2 files changed, 29 insertions(+), 12 deletions(-)

diff --git a/docker/README.md b/docker/README.md
deleted file mode 100644
index 15d4a2c..0000000
--- a/docker/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-
-# Build all images
-
-```shell
-make build
-```
-
-# Run skywalking by docker-compose
-
-```shell
-docker-compose up
-```
\ No newline at end of file
diff --git a/docs/en/guides/How-to-build.md b/docs/en/guides/How-to-build.md
index 8739de1..f403b05 100644
--- a/docs/en/guides/How-to-build.md
+++ b/docs/en/guides/How-to-build.md
@@ -28,12 +28,41 @@ SkyWalking is a complex maven project, including many modules, which could cause
 If you just want to recompile part of the project, you have following options
 - Compile agent and package
 >  ./mvnw package -Pagent,dist
+
+or
+
+> make build.agent
+
 - Compile backend and package
 >  ./mvnw package -Pbackend,dist
+
+or
+
+> make build.backend
+
 - Compile UI and package
 >  ./mvnw package -Pui,dist
 
+or
+
+> make build.ui
+
+
+### Build docker images
+We can build docker images of `backend` and `ui` with `Makefile` located in root folder.
+
+- Build all docker images
+> make docker.all
+
+- Build oap server docker image
+> make docker.oap
+
+- Build ui docker image
+> make docker.ui
 
+`HUB` and `TAG` variables ares used to setup `REPOSITORY` and `TAG` of a docker image. To get
+a oap image with name `bar/oap:foo`, run the following command
+> HUB=bar TAG=foo make docker.oap
 
 ## Setup your IntelliJ IDEA
 1. Import the project as a maven project


[skywalking] 01/04: Update docker building of oap server

Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hanahmily pushed a commit to branch docker/build
in repository https://gitbox.apache.org/repos/asf/skywalking.git

commit d74eb2100282c13785694319863ed1ab136df32b
Author: Gao Hongtao <ha...@gmail.com>
AuthorDate: Wed May 15 11:39:21 2019 +0800

    Update docker building of oap server
    
     * generating appliation.yml according to enviroment variables
     * adding Makefile to build binary and docker image
---
 Makefile                                           |  87 ++++++
 docker/Makefile                                    |  31 ---
 docker/config/alarm-settings.yml                   |  72 -----
 docker/config/application.yml                      | 114 --------
 docker/config/component-libraries.yml              | 308 ---------------------
 docker/config/datasource-settings.properties       |  31 ---
 docker/config/log4j2.xml                           |  37 ---
 docker/oap/{Dockerfile => Dockerfile.oap}          |   8 +-
 docker/oap/docker-entrypoint.sh                    | 226 ++++++++++++++-
 .../src/main/resources/application.yml             |  52 ++--
 10 files changed, 341 insertions(+), 625 deletions(-)

diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..ffcad30
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,87 @@
+# 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.
+
+
+export SW_ROOT := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
+
+export SW_OUT:=${SW_ROOT}/dist
+
+SKIP_TEST?=false
+
+.PHONY: build.all build.agent build.backend build.ui build.docker
+
+build.all:
+	cd $(SW_ROOT) && ./mvnw clean package -Dmaven.test.skip=$(SKIP_TEST)
+
+build.agent:
+	cd $(SW_ROOT) && ./mvnw clean package -Dmaven.test.skip=$(SKIP_TEST) -Pagent,dist
+
+build.backend:
+	cd $(SW_ROOT) && ./mvnw clean package -Dmaven.test.skip=$(SKIP_TEST) -Pbackend,dist
+
+build.ui:
+	cd $(SW_ROOT) && ./mvnw clean package -Dmaven.test.skip=$(SKIP_TEST) -Pui,dist
+
+build.docker:
+	cd $(SW_ROOT) && ./mvnw clean package -Dmaven.test.skip=$(SKIP_TEST) -Pbackend,ui,dist
+
+DOCKER_BUILD_TOP:=${SW_OUT}/docker_build
+
+HUB?=skywalking
+
+TAG?=latest
+
+.SECONDEXPANSION: #allow $@ to be used in dependency list
+
+.PHONY: docker docker.all docker.oap
+
+docker: build.docker docker.all
+
+DOCKER_TARGETS:=docker.oap
+
+docker.all: $(DOCKER_TARGETS)
+
+docker.oap: $(SW_OUT)/apache-skywalking-apm-bin.tar.gz
+docker.oap: $(SW_ROOT)/docker/oap/Dockerfile.oap
+docker.oap: $(SW_ROOT)/docker/oap/docker-entrypoint.sh
+docker.oap: $(SW_ROOT)/docker/oap/log4j2.xml
+		$(DOCKER_RULE)
+
+
+# $@ is the name of the target
+# $^ the name of the dependencies for the target
+# Rule Steps #
+##############
+# 1. Make a directory $(DOCKER_BUILD_TOP)/%@
+# 2. This rule uses cp to copy all dependency filenames into into $(DOCKER_BUILD_TOP/$@
+# 3. This rule then changes directories to $(DOCKER_BUID_TOP)/$@
+# 4. This rule runs $(BUILD_PRE) prior to any docker build and only if specified as a dependency variable
+# 5. This rule finally runs docker build passing $(BUILD_ARGS) to docker if they are specified as a dependency variable
+
+DOCKER_RULE=time (mkdir -p $(DOCKER_BUILD_TOP)/$@ && cp -r $^ $(DOCKER_BUILD_TOP)/$@ && cd $(DOCKER_BUILD_TOP)/$@ && $(BUILD_PRE) docker build $(BUILD_ARGS) -t $(HUB)/$(subst docker.,,$@):$(TAG) -f Dockerfile$(suffix $@) .)
+
+# for each docker.XXX target create a push.docker.XXX target that pushes
+# the local docker image to another hub
+# a possible optimization is to use tag.$(TGT) as a dependency to do the tag for us
+$(foreach TGT,$(DOCKER_TARGETS),$(eval push.$(TGT): | $(TGT) ; \
+	time (docker push $(HUB)/$(subst docker.,,$(TGT)):$(TAG))))
+
+# create a DOCKER_PUSH_TARGETS that's each of DOCKER_TARGETS with a push. prefix
+DOCKER_PUSH_TARGETS:=
+$(foreach TGT,$(DOCKER_TARGETS),$(eval DOCKER_PUSH_TARGETS+=push.$(TGT)))
+
+# Will build and push docker images.
+docker.push: $(DOCKER_PUSH_TARGETS)
diff --git a/docker/Makefile b/docker/Makefile
deleted file mode 100644
index 055a952..0000000
--- a/docker/Makefile
+++ /dev/null
@@ -1,31 +0,0 @@
-# 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.
-
-export DOCKER_ROOT := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
-
-oap: 
-	cd $(DOCKER_ROOT)/oap; \
-	cp ../../dist/apache-skywalking-apm-bin.tar.gz ./ ; \
-	docker build -t skywalking/oap:latest .
-
-ui:
-	cd $(DOCKER_ROOT)/ui; \
-	cp ../../dist/apache-skywalking-apm-bin.tar.gz ./ ; \
-	docker build -t skywalking/ui:latest .
-
-build: oap ui
-
-.PHONY: oap ui
\ No newline at end of file
diff --git a/docker/config/alarm-settings.yml b/docker/config/alarm-settings.yml
deleted file mode 100644
index 829246a..0000000
--- a/docker/config/alarm-settings.yml
+++ /dev/null
@@ -1,72 +0,0 @@
-# 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.
-
-# Sample alarm rules.
-rules:
-  # Rule unique name, must be ended with `_rule`.
-  service_resp_time_rule:
-    metrics-name: service_resp_time
-    op: ">"
-    threshold: 1000
-    period: 10
-    count: 3
-    silence-period: 5
-    message: Response time of service {name} is more than 1000ms in last 3 minutes.
-  service_sla_rule:
-    # Metrics value need to be long, double or int
-    metrics-name: service_sla
-    op: "<"
-    threshold: 8000
-    # The length of time to evaluate the metric
-    period: 10
-    # How many times after the metric match the condition, will trigger alarm
-    count: 2
-    # How many times of checks, the alarm keeps silence after alarm triggered, default as same as period.
-    silence-period: 3
-    message: Successful rate of service {name} is lower than 80% in last 2 minutes.
-  service_p90_sla_rule:
-    # Metrics value need to be long, double or int
-    metrics-name: service_p90
-    op: ">"
-    threshold: 1000
-    period: 10
-    count: 3
-    silence-period: 5
-    message: 90% response time of service {name} is more than 1000ms in last 3 minutes
-  service_instance_resp_time_rule:
-    metrics-name: service_instance_resp_time
-    op: ">"
-    threshold: 1000
-    period: 10
-    count: 2
-    silence-period: 5
-    message: Response time of service instance {name} is more than 1000ms in last 2 minutes.
-#  Active endpoint related metric alarm will cost more memory than service and service instance metric alarm.
-#  Because the number of endpoint is much more than service and instance.
-#
-#  endpoint_avg_rule:
-#    metrics-name: endpoint_avg
-#    op: ">"
-#    threshold: 1000
-#    period: 10
-#    count: 2
-#    silence-period: 5
-#    message: Response time of endpoint {name} is more than 1000ms in last 2 minutes.
-
-webhooks:
-#  - http://127.0.0.1/notify/
-#  - http://127.0.0.1/go-wechat/
-
diff --git a/docker/config/application.yml b/docker/config/application.yml
deleted file mode 100644
index 7865829..0000000
--- a/docker/config/application.yml
+++ /dev/null
@@ -1,114 +0,0 @@
-# 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.
-
-cluster:
-  standalone:
-   # Please check your ZooKeeper is 3.5+, However, it is also compatible with ZooKeeper 3.4.x. Replace the ZooKeeper 3.5+
-   # library the oap-libs folder with your ZooKeeper 3.4.x library.
-#  zookeeper:
-#    nameSpace: ${SW_NAMESPACE:""}
-#    hostPort: ${SW_CLUSTER_ZK_HOST_PORT:localhost:2181}
-#    #Retry Policy
-#    baseSleepTimeMs: ${SW_CLUSTER_ZK_SLEEP_TIME:1000} # initial amount of time to wait between retries
-#    maxRetries: ${SW_CLUSTER_ZK_MAX_RETRIES:3} # max number of times to retry
-#  kubernetes:
-#    watchTimeoutSeconds: ${SW_CLUSTER_K8S_WATCH_TIMEOUT:60}
-#    namespace: ${SW_CLUSTER_K8S_NAMESPACE:default}
-#    labelSelector: ${SW_CLUSTER_K8S_LABEL:app=collector,release=skywalking}
-#    uidEnvName: ${SW_CLUSTER_K8S_UID:SKYWALKING_COLLECTOR_UID}
-#  consul:
-#    serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
-#     Consul cluster nodes, example: 10.0.0.1:8500,10.0.0.2:8500,10.0.0.3:8500
-#    hostPort: ${SW_CLUSTER_CONSUL_HOST_PORT:localhost:8500}
-core:
-  default:
-    # Mixed: Receive agent data, Level 1 aggregate, Level 2 aggregate
-    # Receiver: Receive agent data, Level 1 aggregate
-    # Aggregator: Level 2 aggregate
-    role: ${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator
-    restHost: ${SW_CORE_REST_HOST:0.0.0.0}
-    restPort: ${SW_CORE_REST_PORT:12800}
-    restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}
-    gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}
-    gRPCPort: ${SW_CORE_GRPC_PORT:11800}
-    downsampling:
-    - Hour
-    - Day
-    - Month
-    # Set a timeout on metric data. After the timeout has expired, the metric data will automatically be deleted.
-    recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:90} # Unit is minute
-    minuteMetricsDataTTL: ${SW_CORE_MINUTE_METRIC_DATA_TTL:90} # Unit is minute
-    hourMetricsDataTTL: ${SW_CORE_HOUR_METRIC_DATA_TTL:36} # Unit is hour
-    dayMetricsDataTTL: ${SW_CORE_DAY_METRIC_DATA_TTL:45} # Unit is day
-    monthMetricsDataTTL: ${SW_CORE_MONTH_METRIC_DATA_TTL:18} # Unit is month
-storage:
-  elasticsearch:
-    nameSpace: ${SW_NAMESPACE:""}
-    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:elasticsearch:9200}
-    user: ${SW_ES_USER:""}
-    password: ${SW_ES_PASSWORD:""}
-    indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
-    indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
-    # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html
-    bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:2000} # Execute the bulk every 2000 requests
-    bulkSize: ${SW_STORAGE_ES_BULK_SIZE:20} # flush the bulk every 20mb
-    flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requests
-    concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
-    metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
-    segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
-#  h2:
-#    driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
-#    url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
-#    user: ${SW_STORAGE_H2_USER:sa}
-#    metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
-#  mysql:
-#    metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
-receiver-sharing-server:
-  default:
-receiver-register:
-  default:
-receiver-trace:
-  default:
-    bufferPath: ${SW_RECEIVER_BUFFER_PATH:../trace-buffer/}  # Path to trace buffer files, suggest to use absolute path
-    bufferOffsetMaxFileSize: ${SW_RECEIVER_BUFFER_OFFSET_MAX_FILE_SIZE:100} # Unit is MB
-    bufferDataMaxFileSize: ${SW_RECEIVER_BUFFER_DATA_MAX_FILE_SIZE:500} # Unit is MB
-    bufferFileCleanWhenRestart: ${SW_RECEIVER_BUFFER_FILE_CLEAN_WHEN_RESTART:false}
-    sampleRate: ${SW_TRACE_SAMPLE_RATE:10000} # The sample rate precision is 1/10000. 10000 means 100% sample in default.
-    slowDBAccessThreshold: ${SW_SLOW_DB_THRESHOLD:default:200,mongodb:100} # The slow database access thresholds. Unit ms.
-receiver-jvm:
-  default:
-service-mesh:
-  default:
-    bufferPath: ${SW_SERVICE_MESH_BUFFER_PATH:../mesh-buffer/}  # Path to trace buffer files, suggest to use absolute path
-    bufferOffsetMaxFileSize: ${SW_SERVICE_MESH_OFFSET_MAX_FILE_SIZE:100} # Unit is MB
-    bufferDataMaxFileSize: ${SW_SERVICE_MESH_BUFFER_DATA_MAX_FILE_SIZE:500} # Unit is MB
-    bufferFileCleanWhenRestart: ${SW_SERVICE_MESH_BUFFER_FILE_CLEAN_WHEN_RESTART:false}
-istio-telemetry:
-  default:
-envoy-metric:
-  default:
-# receiver_zipkin:
-#   default:
-#     host: ${SW_RECEIVER_ZIPKIN_HOST:0.0.0.0}
-#     port: ${SW_RECEIVER_ZIPKIN_PORT:9411}
-#     contextPath: ${SW_RECEIVER_ZIPKIN_CONTEXT_PATH:/}
-query:
-  graphql:
-    path: ${SW_QUERY_GRAPHQL_PATH:/graphql}
-alarm:
-  default:
-telemetry:
-  none:
diff --git a/docker/config/component-libraries.yml b/docker/config/component-libraries.yml
deleted file mode 100644
index 767e636..0000000
--- a/docker/config/component-libraries.yml
+++ /dev/null
@@ -1,308 +0,0 @@
-# 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.
-
-# Define all component libraries' names and IDs, used in monitored application.
-# This is a bothway mapping, agent or SDK could use the value(ID) to represent the component name in uplink data.
-#
-# ######
-#   id
-# ######
-# We highly recommend DO NOT change the IDs in these file, just append new one, and make sure the ID unique.
-# Any replacement will cause visualization and aggregation error.
-#
-# All IDs in this files are reserved, even some IDs removed by some reasons, those IDs will be abandoned.
-#
-# ######
-# languages
-# ######
-# Languages declare which languages are using this component. Multi languages should be separated by `,`
-
-Tomcat:
-  id: 1
-  languages: Java
-HttpClient:
-  id: 2
-  languages: Java,C#,Node.js
-Dubbo:
-  id: 3
-  languages: Java
-H2:
-  id: 4
-  languages: Java
-Mysql:
-  id: 5
-  languages: Java,C#,Node.js
-ORACLE:
-  id: 6
-  languages: Java
-Redis:
-  id: 7
-  languages: Java,C#,Node.js
-Motan:
-  id: 8
-  languages: Java
-MongoDB:
-  id: 9
-  languages: Java,C#,Node.js
-Resin:
-  id: 10
-  languages: Java
-Feign:
-  id: 11
-  languages: Java
-OKHttp:
-  id: 12
-  languages: Java
-SpringRestTemplate:
-  id: 13
-  languages: Java
-SpringMVC:
-  id: 14
-  languages: Java
-Struts2:
-  id: 15
-  languages: Java
-NutzMVC:
-  id: 16
-  languages: Java
-NutzHttp:
-  id: 17
-  languages: Java
-JettyClient:
-  id: 18
-  languages: Java
-JettyServer:
-  id: 19
-  languages: Java
-Memcached:
-  id: 20
-  languages: Java
-ShardingJDBC:
-  id: 21
-  languages: Java
-PostgreSQL:
-  id: 22
-  languages: Java,C#,Node.js
-GRPC:
-  id: 23
-  languages: Java
-ElasticJob:
-  id: 24
-  languages: Java
-RocketMQ:
-  id: 25
-  languages: Java
-httpasyncclient:
-  id: 26
-  languages: Java
-Kafka:
-  id: 27
-  languages: Java
-ServiceComb:
-  id: 28
-  languages: Java
-Hystrix:
-  id: 29
-  languages: Java
-Jedis:
-  id: 30
-  languages: Java
-SQLite:
-  id: 31
-  languages: Java,C#
-h2-jdbc-driver:
-  id: 32
-  languages: Java
-mysql-connector-java:
-  id: 33
-  languages: Java
-ojdbc:
-  id: 34
-  languages: Java
-Spymemcached:
-  id: 35
-  languages: Java
-Xmemcached:
-  id: 36
-  languages: Java
-postgresql-jdbc-driver:
-  id: 37
-  languages: Java
-rocketMQ-producer:
-  id: 38
-  languages: Java
-rocketMQ-consumer:
-  id: 39
-  languages: Java
-kafka-producer:
-  id: 40
-  languages: Java
-kafka-consumer:
-  id: 41
-  languages: Java
-mongodb-driver:
-  id: 42
-  languages: Java
-SOFARPC:
-  id: 43
-  languages: Java
-ActiveMQ:
-  id: 44
-  languages: Java
-activemq-producer:
-  id: 45
-  languages: Java
-activemq-consumer:
-  id: 46
-  languages: Java
-Elasticsearch:
-  id: 47
-  languages: Java
-transport-client:
-  id: 48
-  languages: Java
-http:
-  id: 49
-  languages: Java,C#,Node.js
-rpc:
-  id: 50
-  languages: Java,C#,Node.js
-RabbitMQ:
-  id: 51
-  languages: Java
-rabbitmq-producer:
-  id: 52
-  languages: Java
-rabbitmq-consumer:
-  id: 53
-  languages: Java
-Canal:
-  id: 54
-  languages: Java
-Gson:
-  id: 55
-  languages: Java
-Redisson:
-  id: 56
-  languages: Java
-Lettuce:
-  id: 57
-  languages: Java
-Zookeeper:
-  id: 58
-  languages: Java
-Vertx:
-  id: 59
-  languages: Java
-
-# .NET/.NET Core components
-# [3000, 4000) for C#/.NET only
-AspNetCore:
-  id: 3001
-  languages: C#
-EntityFrameworkCore:
-  id: 3002
-  languages: C#
-SqlClient:
-  id: 3003
-  languages: C#
-CAP:
-  id: 3004
-  languages: C#
-StackExchange.Redis:
-  id: 3005
-  languages: C#
-SqlServer:
-  id: 3006
-  languages: C#
-Npgsql:
-  id: 3007
-  languages: C#
-MySqlConnector:
-  id: 3008
-  languages: C#
-EntityFrameworkCore.InMemory:
-  id: 3009
-  languages: C#
-EntityFrameworkCore.SqlServer:
-  id: 3010
-  languages: C#
-EntityFrameworkCore.Sqlite:
-  id: 3011
-  languages: C#
-Pomelo.EntityFrameworkCore.MySql:
-  id: 3012
-  languages: C#
-Npgsql.EntityFrameworkCore.PostgreSQL:
-  id: 3013
-  languages: C#
-InMemoryDatabase:
-  id: 3014
-  languages: C#
-AspNet:
-  id: 3015
-  languages: C#
-SmartSql:
-  id: 3016
-  languages: C#
-  
-# NoeJS components
-# [4000, 5000) for Node.js agent
-HttpServer:
-  id: 4001
-  languages: Node.js
-express:
-  id: 4002
-  languages: Node.js
-Egg:
-  id: 4003
-  languages: Node.js
-Koa:
-  id: 4004
-  languages: Node.js
-
-# Component Server mapping defines the server display names of some components
-# e.g.
-# Jedis is a client library in Java for Redis server
-Component-Server-Mappings:
-  mongodb-driver: MongoDB
-  rocketMQ-producer: RocketMQ
-  rocketMQ-consumer: RocketMQ
-  kafka-producer: Kafka
-  kafka-consumer: Kafka
-  activemq-producer: ActiveMQ
-  activemq-consumer: ActiveMQ
-  rabbitmq-producer: RabbitMQ
-  rabbitmq-consumer: RabbitMQ
-  postgresql-jdbc-driver: PostgreSQL
-  Xmemcached: Memcached
-  Spymemcached: Memcached
-  h2-jdbc-driver: H2
-  mysql-connector-java: Mysql
-  Jedis: Redis
-  Redisson: Redis
-  Lettuce: Redis
-  Zookeeper: Zookeeper
-  StackExchange.Redis: Redis
-  SqlClient: SqlServer
-  Npgsql: PostgreSQL
-  MySqlConnector: Mysql
-  EntityFrameworkCore.InMemory: InMemoryDatabase
-  EntityFrameworkCore.SqlServer: SqlServer
-  EntityFrameworkCore.Sqlite: SQLite
-  Pomelo.EntityFrameworkCore.MySql: Mysql
-  Npgsql.EntityFrameworkCore.PostgreSQL: PostgreSQL
-  transport-client: Elasticsearch
diff --git a/docker/config/datasource-settings.properties b/docker/config/datasource-settings.properties
deleted file mode 100644
index 70b0099..0000000
--- a/docker/config/datasource-settings.properties
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# 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.
-#
-#
-
-jdbcUrl=jdbc:mysql://localhost:3306/swtest
-dataSource.user=root
-dataSource.password=root@1234
-dataSource.cachePrepStmts=true
-dataSource.prepStmtCacheSize=250
-dataSource.prepStmtCacheSqlLimit=2048
-dataSource.useServerPrepStmts=true
-dataSource.useLocalSessionState=true
-dataSource.rewriteBatchedStatements=true
-dataSource.cacheResultSetMetadata=true
-dataSource.cacheServerConfiguration=true
-dataSource.elideSetAutoCommits=true
-dataSource.maintainTimeStats=false
\ No newline at end of file
diff --git a/docker/config/log4j2.xml b/docker/config/log4j2.xml
deleted file mode 100644
index 346d18b..0000000
--- a/docker/config/log4j2.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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.
-  ~
-  -->
-
-<Configuration status="INFO">
-    <Appenders>
-        <Console name="Console" target="SYSTEM_OUT">
-            <PatternLayout charset="UTF-8" pattern="%d - %c -%-4r [%t] %-5p %x - %m%n"/>
-        </Console>
-    </Appenders>
-    <Loggers>
-        <logger name="org.eclipse.jetty" level="INFO"/>
-        <logger name="org.apache.zookeeper" level="INFO"/>
-        <logger name="org.elasticsearch.common.network.IfConfig" level="INFO"/>
-        <logger name="io.grpc.netty" level="INFO"/>
-        <logger name="org.apache.skywalking.oap.server.receiver.istio.telemetry" level="DEBUG"/>
-        <logger name="org.apache.skywalking.oap.server.receiver.envoy" level="DEBUG"/>
-        <Root level="INFO">
-            <AppenderRef ref="Console"/>
-        </Root>
-    </Loggers>
-</Configuration>
diff --git a/docker/oap/Dockerfile b/docker/oap/Dockerfile.oap
similarity index 89%
rename from docker/oap/Dockerfile
rename to docker/oap/Dockerfile.oap
index 4b3e9f3..43ec2dd 100644
--- a/docker/oap/Dockerfile
+++ b/docker/oap/Dockerfile.oap
@@ -17,7 +17,9 @@
 FROM openjdk:8u181-jdk-stretch
 
 ENV DIST_NAME=apache-skywalking-apm-bin \
-    JAVA_OPTS=" -Xms256M "
+    JAVA_OPTS=" -Xms256M " \
+    SW_CLUSTER="standalone" \
+    SW_STORAGE="h2"
 
 COPY "$DIST_NAME.tar.gz" /
 
@@ -33,6 +35,6 @@ WORKDIR skywalking
 COPY log4j2.xml config/
 COPY docker-entrypoint.sh .
 
-EXPOSE 12800 11800
+EXPOSE 12800 11800 1234
 
-ENTRYPOINT ["sh", "docker-entrypoint.sh"]
\ No newline at end of file
+ENTRYPOINT ["bash", "docker-entrypoint.sh"]
\ No newline at end of file
diff --git a/docker/oap/docker-entrypoint.sh b/docker/oap/docker-entrypoint.sh
index 593ad1c..764cf01 100755
--- a/docker/oap/docker-entrypoint.sh
+++ b/docker/oap/docker-entrypoint.sh
@@ -16,7 +16,227 @@
 
 #!/bin/bash
 
-set -ex
+set -e
+
+var_application_file="config/application.yml"
+
+generateClusterStandalone() {
+    echo "cluster:" >> ${var_application_file}
+    echo "  standalone:" >> ${var_application_file}
+}
+
+generateClusterZookeeper() {
+    cat <<EOT >> ${var_application_file}
+cluster:
+  zookeeper:
+    nameSpace: \${SW_NAMESPACE:""}
+    hostPort: \${SW_CLUSTER_ZK_HOST_PORT:localhost:2181}
+    #Retry Policy
+    baseSleepTimeMs: \${SW_CLUSTER_ZK_SLEEP_TIME:1000} # initial amount of time to wait between retries
+    maxRetries: \${SW_CLUSTER_ZK_MAX_RETRIES:3} # max number of times to retry
+EOT
+}
+
+generateClusterK8s() {
+    cat <<EOT >> ${var_application_file}
+cluster:
+  kubernetes:
+    watchTimeoutSeconds: \${SW_CLUSTER_K8S_WATCH_TIMEOUT:60}
+    namespace: \${SW_CLUSTER_K8S_NAMESPACE:default}
+    labelSelector: \${SW_CLUSTER_K8S_LABEL:app=collector,release=skywalking}
+    uidEnvName: \${SW_CLUSTER_K8S_UID:SKYWALKING_COLLECTOR_UID}
+EOT
+}
+
+generateClusterConsul() {
+    cat <<EOT >> ${var_application_file}
+cluster:
+  consul:
+    serviceName: \${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
+     Consul cluster nodes, example: 10.0.0.1:8500,10.0.0.2:8500,10.0.0.3:8500
+    hostPort: \${SW_CLUSTER_CONSUL_HOST_PORT:localhost:8500}
+EOT
+}
+
+generateStorageElastisearch() {
+    cat <<EOT >> ${var_application_file}
+storage:
+  elasticsearch:
+    nameSpace: \${SW_NAMESPACE:""}
+    clusterNodes: \${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
+    user: \${SW_ES_USER:""}
+    password: \${SW_ES_PASSWORD:""}
+    indexShardsNumber: \${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
+    indexReplicasNumber: \${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
+    # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html
+    bulkActions: \${SW_STORAGE_ES_BULK_ACTIONS:2000} # Execute the bulk every 2000 requests
+    bulkSize: \${SW_STORAGE_ES_BULK_SIZE:20} # flush the bulk every 20mb
+    flushInterval: \${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requests
+    concurrentRequests: \${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
+    metadataQueryMaxSize: \${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
+    segmentQueryMaxSize: \${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
+EOT
+}
+
+generateStorageH2() {
+    cat <<EOT >> ${var_application_file}
+storage:
+  h2:
+    driver: \${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
+    url: \${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
+    user: \${SW_STORAGE_H2_USER:sa}
+    metadataQueryMaxSize: \${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
+EOT
+}
+
+generateStorageMySQL() {
+    cat <<EOT >> ${var_application_file}
+storage:
+  mysql:
+    metadataQueryMaxSize: \${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
+EOT
+}
+
+validateVariables() {
+    name=$1; value=$2; list=$3
+    valid=false
+    for c in ${list} ; do
+        if [[ "$c" = "$value" ]]; then
+            valid=true
+        fi
+    done
+
+    if ! ${valid}; then
+        echo "Error: $name=$value please specify $name = $list"
+        exit 1
+    fi
+}
+
+generateApplicationYaml() {
+    # validate
+    [[ -z "$SW_CLUSTER" ]] && [[ -z "$SW_STORAGE" ]] && { echo "Error: please specify \"SW_CLUSTER\" \"SW_STORAGE\""; exit 1; }
+
+    validateVariables "SW_CLUSTER" "$SW_CLUSTER" "standalone zookeeper kubernetes consul"
+
+    validateVariables "SW_STORAGE" "$SW_STORAGE" "elasticsearch h2 mysql"
+
+    echo "# Generated by 'docker-entrypoint.sh'" > ${var_application_file}
+    #generate cluster
+    case ${SW_CLUSTER} in
+    standalone) generateClusterStandalone;;
+    zookeeper) generateClusterZookeeper;;
+    kubernetes) generateClusterK8s;;
+    consul) generateClusterConsul;;
+    esac
+
+    #generate core
+    cat <<EOT >> ${var_application_file}
+core:
+  default:
+    # Mixed: Receive agent data, Level 1 aggregate, Level 2 aggregate
+    # Receiver: Receive agent data, Level 1 aggregate
+    # Aggregator: Level 2 aggregate
+    role: \${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator
+    restHost: \${SW_CORE_REST_HOST:0.0.0.0}
+    restPort: \${SW_CORE_REST_PORT:12800}
+    restContextPath: \${SW_CORE_REST_CONTEXT_PATH:/}
+    gRPCHost: \${SW_CORE_GRPC_HOST:0.0.0.0}
+    gRPCPort: \${SW_CORE_GRPC_PORT:11800}
+    downsampling:
+    - Hour
+    - Day
+    - Month
+    # Set a timeout on metrics data. After the timeout has expired, the metrics data will automatically be deleted.
+    recordDataTTL: \${SW_CORE_RECORD_DATA_TTL:90} # Unit is minute
+    minuteMetricsDataTTL: \${SW_CORE_MINUTE_METRIC_DATA_TTL:90} # Unit is minute
+    hourMetricsDataTTL: \${SW_CORE_HOUR_METRIC_DATA_TTL:36} # Unit is hour
+    dayMetricsDataTTL: \${SW_CORE_DAY_METRIC_DATA_TTL:45} # Unit is day
+    monthMetricsDataTTL: \${SW_CORE_MONTH_METRIC_DATA_TTL:18} # Unit is month
+EOT
+
+    # generate storage
+    case ${SW_STORAGE} in
+    elasticsearch) generateStorageElastisearch;;
+    h2) generateStorageH2;;
+    mysql) generateStorageMySQL;;
+    esac
+
+    cat <<EOT >> ${var_application_file}
+receiver-sharing-server:
+  default:
+receiver-register:
+  default:
+receiver-trace:
+  default:
+    bufferPath: \${SW_RECEIVER_BUFFER_PATH:../trace-buffer/}  # Path to trace buffer files, suggest to use absolute path
+    bufferOffsetMaxFileSize: \${SW_RECEIVER_BUFFER_OFFSET_MAX_FILE_SIZE:100} # Unit is MB
+    bufferDataMaxFileSize: \${SW_RECEIVER_BUFFER_DATA_MAX_FILE_SIZE:500} # Unit is MB
+    bufferFileCleanWhenRestart: \${SW_RECEIVER_BUFFER_FILE_CLEAN_WHEN_RESTART:false}
+    sampleRate: \${SW_TRACE_SAMPLE_RATE:10000} # The sample rate precision is 1/10000. 10000 means 100% sample in default.
+    slowDBAccessThreshold: \${SW_SLOW_DB_THRESHOLD:default:200,mongodb:100} # The slow database access thresholds. Unit ms.
+receiver-jvm:
+  default:
+receiver-clr:
+  default:
+service-mesh:
+  default:
+    bufferPath: \${SW_SERVICE_MESH_BUFFER_PATH:../mesh-buffer/}  # Path to trace buffer files, suggest to use absolute path
+    bufferOffsetMaxFileSize: \${SW_SERVICE_MESH_OFFSET_MAX_FILE_SIZE:100} # Unit is MB
+    bufferDataMaxFileSize: \${SW_SERVICE_MESH_BUFFER_DATA_MAX_FILE_SIZE:500} # Unit is MB
+    bufferFileCleanWhenRestart: \${SW_SERVICE_MESH_BUFFER_FILE_CLEAN_WHEN_RESTART:false}
+istio-telemetry:
+  default:
+envoy-metric:
+  default:
+query:
+  graphql:
+    path: \${SW_QUERY_GRAPHQL_PATH:/graphql}
+alarm:
+  default:
+telemetry:
+  prometheus:
+    host: \${SW_TELEMETRY_PROMETHEUS_HOST:0.0.0.0}
+    port: \${SW_TELEMETRY_PROMETHEUS_PORT:1234}
+EOT
+
+    if [[ "$SW_RECEIVER_ZIPKIN_ENABLED" = "true" ]]; then
+        cat <<EOT >> ${var_application_file}
+receiver_zipkin:
+  default:
+    host: \${SW_RECEIVER_ZIPKIN_HOST:0.0.0.0}
+    port: \${SW_RECEIVER_ZIPKIN_PORT:9411}
+    contextPath: \${SW_RECEIVER_ZIPKIN_CONTEXT_PATH:/}
+EOT
+    fi
+
+    if [[ "$SW_RECEIVER_JAEGER_ENABLED" = "true" ]]; then
+        cat <<EOT >> ${var_application_file}
+receiver_jaeger:
+  default:
+    gRPCHost: \${SW_RECEIVER_JAEGER_HOST:0.0.0.0}
+    gRPCPort: \${SW_RECEIVER_JAEGER_PORT:14250}
+EOT
+    fi
+
+    if [[ "$SW_EXPORTER_ENABLED" = "true" ]]; then
+        cat <<EOT >> \${var_application_file}
+exporter:
+  grpc:
+    targetHost: \${SW_EXPORTER_GRPC_HOST:127.0.0.1}
+    targetPort: \${SW_EXPORTER_GRPC_PORT:9870}
+EOT
+    fi
+}
+
+echo "[Entrypoint] Apache SkyWalking Docker Image"
+
+if [[ -z "$SW_L0AD_CONFIG_FILE_FROM_VOLUME" ]] || [[ "$SW_L0AD_CONFIG_FILE_FROM_VOLUME" != "true" ]]; then
+    generateApplicationYaml
+    echo "Generated application.yml"
+    echo "-------------------------"
+    cat ${var_application_file}
+    echo "-------------------------"
+fi
 
 CLASSPATH="config:$CLASSPATH"
 for i in oap-libs/*.jar
@@ -24,5 +244,5 @@ do
     CLASSPATH="$i:$CLASSPATH"
 done
 
-exec java  -XX:+PrintFlagsFinal -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap \
-     ${JAVA_OPTS} -classpath $CLASSPATH org.apache.skywalking.oap.server.starter.OAPServerStartUp "$@"
+exec java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap \
+     ${JAVA_OPTS} -classpath ${CLASSPATH} org.apache.skywalking.oap.server.starter.OAPServerStartUp "$@"
diff --git a/oap-server/server-starter/src/main/resources/application.yml b/oap-server/server-starter/src/main/resources/application.yml
index 08ccd06..e39e0ae 100644
--- a/oap-server/server-starter/src/main/resources/application.yml
+++ b/oap-server/server-starter/src/main/resources/application.yml
@@ -18,21 +18,21 @@ cluster:
   standalone:
 #   Please check your ZooKeeper is 3.5+, However, it is also compatible with ZooKeeper 3.4.x. Replace the ZooKeeper 3.5+
 #   library the oap-libs folder with your ZooKeeper 3.4.x library.
-#  zookeeper:
-#    nameSpace: ${SW_NAMESPACE:""}
-#    hostPort: ${SW_CLUSTER_ZK_HOST_PORT:localhost:2181}
-#    #Retry Policy
-#    baseSleepTimeMs: ${SW_CLUSTER_ZK_SLEEP_TIME:1000} # initial amount of time to wait between retries
-#    maxRetries: ${SW_CLUSTER_ZK_MAX_RETRIES:3} # max number of times to retry
-#  kubernetes:
-#    watchTimeoutSeconds: ${SW_CLUSTER_K8S_WATCH_TIMEOUT:60}
-#    namespace: ${SW_CLUSTER_K8S_NAMESPACE:default}
-#    labelSelector: ${SW_CLUSTER_K8S_LABEL:app=collector,release=skywalking}
-#    uidEnvName: ${SW_CLUSTER_K8S_UID:SKYWALKING_COLLECTOR_UID}
-#  consul:
-#    serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
-#     Consul cluster nodes, example: 10.0.0.1:8500,10.0.0.2:8500,10.0.0.3:8500
-#    hostPort: ${SW_CLUSTER_CONSUL_HOST_PORT:localhost:8500}
+  zookeeper:
+    nameSpace: ${SW_NAMESPACE:""}
+    hostPort: ${SW_CLUSTER_ZK_HOST_PORT:localhost:2181}
+    #Retry Policy
+    baseSleepTimeMs: ${SW_CLUSTER_ZK_SLEEP_TIME:1000} # initial amount of time to wait between retries
+    maxRetries: ${SW_CLUSTER_ZK_MAX_RETRIES:3} # max number of times to retry
+  kubernetes:
+    watchTimeoutSeconds: ${SW_CLUSTER_K8S_WATCH_TIMEOUT:60}
+    namespace: ${SW_CLUSTER_K8S_NAMESPACE:default}
+    labelSelector: ${SW_CLUSTER_K8S_LABEL:app=collector,release=skywalking}
+    uidEnvName: ${SW_CLUSTER_K8S_UID:SKYWALKING_COLLECTOR_UID}
+  consul:
+    serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
+     Consul cluster nodes, example: 10.0.0.1:8500,10.0.0.2:8500,10.0.0.3:8500
+    hostPort: ${SW_CLUSTER_CONSUL_HOST_PORT:localhost:8500}
 core:
   default:
     # Mixed: Receive agent data, Level 1 aggregate, Level 2 aggregate
@@ -69,13 +69,13 @@ storage:
     concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
     metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
     segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
-#  h2:
-#    driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
-#    url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
-#    user: ${SW_STORAGE_H2_USER:sa}
-#    metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
-#  mysql:
-#    metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
+  h2:
+    driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
+    url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
+    user: ${SW_STORAGE_H2_USER:sa}
+    metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
+  mysql:
+    metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
 receiver-sharing-server:
   default:
 receiver-register:
@@ -120,7 +120,7 @@ telemetry:
   prometheus:
     host: ${SW_TELEMETRY_PROMETHEUS_HOST:0.0.0.0}
     port: ${SW_TELEMETRY_PROMETHEUS_PORT:1234}
-#exporter:
-#  grpc:
-#    targetHost: ${SW_EXPORTER_GRPC_HOST:127.0.0.1}
-#    targetPort: ${SW_EXPORTER_GRPC_PORT:9870}
+exporter:
+  grpc:
+    targetHost: ${SW_EXPORTER_GRPC_HOST:127.0.0.1}
+    targetPort: ${SW_EXPORTER_GRPC_PORT:9870}