summaryrefslogtreecommitdiffstats
path: root/src/jaegertracing/opentelemetry-cpp/docker
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/jaegertracing/opentelemetry-cpp/docker/.gitignore1
-rw-r--r--src/jaegertracing/opentelemetry-cpp/docker/Dockerfile36
-rw-r--r--src/jaegertracing/opentelemetry-cpp/docker/Dockerfile.alpine.base15
-rw-r--r--src/jaegertracing/opentelemetry-cpp/docker/Dockerfile.centos82
-rw-r--r--src/jaegertracing/opentelemetry-cpp/docker/Dockerfile.debian.deps43
-rw-r--r--src/jaegertracing/opentelemetry-cpp/docker/README.md24
-rw-r--r--src/jaegertracing/opentelemetry-cpp/docker/build.sh86
-rw-r--r--src/jaegertracing/opentelemetry-cpp/docker/grpc/CMakeLists.txt84
-rw-r--r--src/jaegertracing/opentelemetry-cpp/docker/grpc/Dockerfile21
-rw-r--r--src/jaegertracing/opentelemetry-cpp/docker/thrift/CMakeLists.txt87
-rw-r--r--src/jaegertracing/opentelemetry-cpp/docker/thrift/Dockerfile21
-rw-r--r--src/jaegertracing/opentelemetry-cpp/docker/ubuntu14.04/Dockerfile42
-rw-r--r--src/jaegertracing/opentelemetry-cpp/docker/ubuntu16.04/Dockerfile38
-rw-r--r--src/jaegertracing/opentelemetry-cpp/docker/ubuntu18.04/Dockerfile39
-rw-r--r--src/jaegertracing/opentelemetry-cpp/docker/ubuntu20.04/Dockerfile39
-rw-r--r--src/jaegertracing/opentelemetry-cpp/docker/ubuntuLatest/Dockerfile62
16 files changed, 720 insertions, 0 deletions
diff --git a/src/jaegertracing/opentelemetry-cpp/docker/.gitignore b/src/jaegertracing/opentelemetry-cpp/docker/.gitignore
new file mode 100644
index 000000000..21c4e486a
--- /dev/null
+++ b/src/jaegertracing/opentelemetry-cpp/docker/.gitignore
@@ -0,0 +1 @@
+**/setup-*.sh
diff --git a/src/jaegertracing/opentelemetry-cpp/docker/Dockerfile b/src/jaegertracing/opentelemetry-cpp/docker/Dockerfile
new file mode 100644
index 000000000..118cac62f
--- /dev/null
+++ b/src/jaegertracing/opentelemetry-cpp/docker/Dockerfile
@@ -0,0 +1,36 @@
+ARG BASE_IMAGE=ubuntu:latest
+ARG GRPC_IMAGE=grpc-${BASE_IMAGE}
+ARG THRIFT_IMAGE=thrift-${BASE_IMAGE}
+
+FROM ${GRPC_IMAGE} as grpc
+FROM ${THRIFT_IMAGE} as thrift
+
+FROM base-${BASE_IMAGE}-dev AS otel-cpp
+
+ARG CORES=${nproc}
+ARG OTEL_GIT_TAG=v1.3.0
+
+COPY --from=grpc / /usr/local
+COPY --from=thrift / /usr/local
+
+#install opentelemetry-cpp
+RUN git clone --recurse-submodules -j ${CORES} --depth=1 \
+ -b ${OTEL_GIT_TAG} https://github.com/open-telemetry/opentelemetry-cpp.git \
+ && cd opentelemetry-cpp \
+ && mkdir -p build && cd build \
+ && cmake \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \
+ -DWITH_ZIPKIN=ON \
+ -DWITH_JAEGER=ON \
+ -DCMAKE_INSTALL_PREFIX=/opt/third_party/install \
+ -DBUILD_TESTING=OFF \
+ -DWITH_OTLP=ON \
+ -DWITH_OTLP_GRPC=ON \
+ -DBUILD_SHARED_LIBS=ON \
+ .. \
+ && cmake --build . -j ${CORES} --target install
+
+FROM scratch as final
+
+COPY --from=otel-cpp /opt/third_party/install /
diff --git a/src/jaegertracing/opentelemetry-cpp/docker/Dockerfile.alpine.base b/src/jaegertracing/opentelemetry-cpp/docker/Dockerfile.alpine.base
new file mode 100644
index 000000000..2595efa70
--- /dev/null
+++ b/src/jaegertracing/opentelemetry-cpp/docker/Dockerfile.alpine.base
@@ -0,0 +1,15 @@
+ARG BASE_IMAGE=alpine:latest
+ARG CORES=${nproc}
+
+FROM ${BASE_IMAGE} as final
+
+RUN apk update
+
+RUN apk add --update alpine-sdk \
+ && apk add cmake openssl openssl-dev g++ \
+ curl-dev git autoconf libtool linux-headers \
+ boost-dev libevent-dev openssl-dev
+
+RUN mkdir -p /opt/third_party/install
+
+WORKDIR /opt
diff --git a/src/jaegertracing/opentelemetry-cpp/docker/Dockerfile.centos b/src/jaegertracing/opentelemetry-cpp/docker/Dockerfile.centos
new file mode 100644
index 000000000..66138ba60
--- /dev/null
+++ b/src/jaegertracing/opentelemetry-cpp/docker/Dockerfile.centos
@@ -0,0 +1,82 @@
+FROM centos:7
+
+ARG TOOLSET_VER=11
+
+RUN yum update -y && yum install -y centos-release-scl epel-release
+RUN yum install -y devtoolset-${TOOLSET_VER} \
+ cmake3 git \
+ openssl-devel \
+ libcurl-devel \
+ && source /opt/rh/devtoolset-${TOOLSET_VER}/enable
+
+RUN echo "source /opt/rh/devtoolset-${TOOLSET_VER}/enable" >> /etc/bashrc
+RUN echo "BOOST_LIBRARYDIR=/usr/lib64/boost169" >> /etc/bashrc
+RUN echo "BOOST_INCLUDEDIR=/usr/include/boost169" >> /etc/bashrc
+
+ARG GRPC_VERSION=v1.43.2
+
+# install gRPC
+RUN git clone --depth=1 -b $GRPC_VERSION https://github.com/grpc/grpc.git \
+ && cd grpc && git submodule update --init \
+ && mkdir -p "third_party/abseil-cpp/build" && cd "third_party/abseil-cpp/build" \
+ && source /opt/rh/devtoolset-${TOOLSET_VER}/enable \
+ && cmake3 -DCMAKE_CXX_STANDARD=17 -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE .. \
+ && make -j${nproc} install && cd ../../.. \
+ && mkdir build && cd build \
+ && cmake3 \
+ -DCMAKE_CXX_STANDARD=17 \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DgRPC_INSTALL=ON \
+ -DgRPC_BUILD_TESTS=OFF \
+ -DgRPC_ABSL_PROVIDER=package \
+ -DgRPC_SSL_PROVIDER=package \
+ .. && \
+ make -j${nproc} install && make clean && ldconfig
+
+# install thrift
+ARG THRIFT_VERSION=0.14.1
+RUN yum install -y \
+ boost169-devel \
+ libevent-devel \
+ wget \
+ && wget https://github.com/apache/thrift/archive/refs/tags/v$THRIFT_VERSION.tar.gz \
+ && tar -xvf v$THRIFT_VERSION.tar.gz \
+ && mkdir -p thrift-$THRIFT_VERSION/build && cd thrift-$THRIFT_VERSION/build \
+ && source /opt/rh/devtoolset-${TOOLSET_VER}/enable \
+ && export BOOST_INCLUDEDIR=/usr/include/boost169 \
+ && export BOOST_LIBRARYDIR=/usr/lib64/boost169 \
+ && cmake3 \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DBUILD_COMPILER=OFF \
+ -DBUILD_CPP=ON \
+ -DBUILD_LIBRARIES=ON \
+ -DBUILD_NODEJS=OFF \
+ -DBUILD_PYTHON=OFF \
+ -DBUILD_JAVASCRIPT=OFF \
+ -DBUILD_C_GLIB=OFF \
+ -DBUILD_JAVA=OFF \
+ -DBUILD_TESTING=OFF \
+ -DBUILD_TUTORIALS=OFF \
+ -DWITH_STDTHREADS=ON \
+ -DWITH_BOOSTTHREADS=OFF \
+ -DWITH_BOOST_FUNCTIONAL=OFF \
+ -DWITH_BOOST_SMART_PTR=OFF \
+ .. \
+ && make -j${nproc} && make install && ldconfig
+
+#install opentelemetry-cpp
+RUN git clone --depth=1 https://github.com/open-telemetry/opentelemetry-cpp.git \
+ && cd opentelemetry-cpp && git submodule update --init \
+ && mkdir -p build && cd build \
+ && source /opt/rh/devtoolset-${TOOLSET_VER}/enable \
+ && export BOOST_INCLUDEDIR=/usr/include/boost169 \
+ && export BOOST_LIBRARYDIR=/usr/lib64/boost169 \
+ && cmake3 \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \
+ -DWITH_ZIPKIN=ON \
+ -DWITH_JAEGER=ON \
+ -DBUILD_TESTING=OFF \
+ -DWITH_OTLP=ON \
+ .. \
+ && make -j${nproc} install && ldconfig
diff --git a/src/jaegertracing/opentelemetry-cpp/docker/Dockerfile.debian.deps b/src/jaegertracing/opentelemetry-cpp/docker/Dockerfile.debian.deps
new file mode 100644
index 000000000..0634c1197
--- /dev/null
+++ b/src/jaegertracing/opentelemetry-cpp/docker/Dockerfile.debian.deps
@@ -0,0 +1,43 @@
+ARG BASE_IMAGE=ubuntu:latest
+ARG CORES=${nproc}
+
+FROM ${BASE_IMAGE} as base
+
+ENV DEBIAN_FRONTEND=noninteractive
+
+RUN apt-get update && apt-get install -y build-essential autoconf \
+ libtool pkg-config cmake git libssl-dev curl \
+ libcurl4-openssl-dev libgtest-dev libgmock-dev libbenchmark-dev
+
+WORKDIR /work
+RUN mkdir -p /opt/otel-cpp
+
+FROM base as grpc
+# install grpc, protobuf and abseil
+ARG GRPC_VERSION=1.43.2
+
+ADD setup_grpc.sh .
+RUN ./setup_grpc.sh -i "/opt/otel-cpp" -v ${GRPC_VERSION}
+
+FROM base as thrift
+RUN apt-get install -y --no-install-recommends wget
+
+# install thrift
+ARG THRIFT_VERSION=0.14.1
+ADD setup_thrift.sh .
+RUN ./setup_thrift.sh -i "/opt/otel-cpp"
+
+FROM scratch as final
+
+COPY --from=grpc /opt/otel-cpp /
+COPY --from=thrift /opt/otel-cpp /
+
+# how to use:
+#
+# docker create -ti --name deps otel-cpp-deps bash
+# docker cp deps:/ ./
+# docker rm -f deps
+#
+# or:
+#
+# COPY --from=otel-cpp-deps /usr
diff --git a/src/jaegertracing/opentelemetry-cpp/docker/README.md b/src/jaegertracing/opentelemetry-cpp/docker/README.md
new file mode 100644
index 000000000..165667117
--- /dev/null
+++ b/src/jaegertracing/opentelemetry-cpp/docker/README.md
@@ -0,0 +1,24 @@
+# OpenTelemetry library builder
+
+**How to use this build script:**
+
+The build script `build.sh` can be used to build OpenTelemetry and
+it's dependencies within the desired base image.
+The final image only contains the necessary files in `/`.
+
+```sh
+bash build.sh -b alpine -j ${nproc} -g v1.43.2 -o v1.3.0 -t 0.14.1
+
+# copy to current dir
+docker create -ti --name otel otel-cpp-<base_image> bash
+docker cp otel:/ ./
+docker rm -f otel
+
+docker create -ti --name grpc grpc-<base_image> bash
+docker cp grpc:/ ./
+docker rm -f grpc
+
+docker create -ti --name thrift thrift-<base_image> bash
+docker cp thrift:/ ./
+docker rm -f thrift
+```
diff --git a/src/jaegertracing/opentelemetry-cpp/docker/build.sh b/src/jaegertracing/opentelemetry-cpp/docker/build.sh
new file mode 100644
index 000000000..53773b739
--- /dev/null
+++ b/src/jaegertracing/opentelemetry-cpp/docker/build.sh
@@ -0,0 +1,86 @@
+#!/bin/bash
+
+# Copyright The OpenTelemetry Authors
+# SPDX-License-Identifier: Apache-2.0
+
+set -o errexit
+set -o nounset
+set -o pipefail
+
+Help()
+{
+ # Display Help
+ echo "Add description of the script functions here."
+ echo
+ echo "Syntax: scriptTemplate [-b|o|g|j]"
+ echo "options:"
+ echo "b Base image"
+ echo "o OpenTelemetry-cpp git tag"
+ echo "h Print Help."
+ echo "g gRPC git tag"
+ echo "t thrift version"
+ echo "j Parallel jobs"
+ echo
+ echo "how to use:"
+ echo
+ echo "docker create -ti --name otel otel-cpp-<base_image> bash"
+ echo "docker cp otel:/ ./"
+ echo "docker rm -f otel"
+ echo
+ echo "or:"
+ echo
+ echo "COPY --from=otel-cpp-<base_image> /usr"
+}
+
+base_image=${base_image:="alpine"}
+grpc_git_tag=${grpc_git_tag:="v1.43.2"}
+thrift_version=${thrift_version:="0.14.1"}
+otel_git_tag=${otel_git_tag:="v1.3.0"}
+cores=${cores:=1}
+
+while getopts ":h:b:o:g:j:t:" option; do
+ case $option in
+ h) # display Help
+ Help
+ exit;;
+ b) # base image
+ base_image=$OPTARG
+ ;;
+ o) # OpenTelemetry-cpp git tag
+ otel_git_tag=$OPTARG
+ ;;
+ g) # gRPC git tag
+ grpc_git_tag=$OPTARG
+ ;;
+ t) # thrfit version
+ thrift_version=$OPTARG
+ ;;
+ j) # number of cores
+ cores=$OPTARG
+ ;;
+ \?)
+ Help
+ exit;;
+ esac
+done
+
+docker build -t base-${base_image}-dev -f Dockerfile.${base_image}.base .
+
+pushd grpc/
+docker build --build-arg BASE_IMAGE=base-${base_image}-dev \
+ --build-arg GRPC_GIT_TAG=${grpc_git_tag} \
+ --build-arg CORES=${cores} \
+ -t grpc-${base_image} -f Dockerfile .
+popd
+
+pushd thrift/
+docker build --build-arg BASE_IMAGE=base-${base_image}-dev \
+ --build-arg THRIFT_VERSION=${thrift_version} \
+ --build-arg CORES=${cores} \
+ -t thrift-${base_image} -f Dockerfile .
+popd
+
+docker build --build-arg BASE_IMAGE=${base_image} \
+ --build-arg CORES=${cores} \
+ --build-arg OTEL_GIT_TAG=${otel_git_tag} \
+ -t otel-cpp-${base_image} -f Dockerfile .
diff --git a/src/jaegertracing/opentelemetry-cpp/docker/grpc/CMakeLists.txt b/src/jaegertracing/opentelemetry-cpp/docker/grpc/CMakeLists.txt
new file mode 100644
index 000000000..8cb69cc6c
--- /dev/null
+++ b/src/jaegertracing/opentelemetry-cpp/docker/grpc/CMakeLists.txt
@@ -0,0 +1,84 @@
+cmake_minimum_required(VERSION 3.11 FATAL_ERROR)
+
+project(
+ dependencies
+ LANGUAGES CXX
+ VERSION 0.0.1)
+
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_EXTENSIONS OFF)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_FLAGS "-O2")
+
+set(CMAKE_BUILD_TYPE
+ Release
+ CACHE STRING "Build type" FORCE)
+
+include(GNUInstallDirs)
+
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
+ ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
+ ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY
+ ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
+
+set(INSTALL_LIBDIR
+ ${CMAKE_INSTALL_LIBDIR}
+ CACHE PATH "directory for libraries")
+set(INSTALL_BINDIR
+ ${CMAKE_INSTALL_BINDIR}
+ CACHE PATH "directory for executables")
+set(INSTALL_INCLUDEDIR
+ ${CMAKE_INSTALL_INCLUDEDIR}
+ CACHE PATH "directory for header files")
+
+set(DEF_INSTALL_CMAKEDIR share/cmake/${PROJECT_NAME})
+set(INSTALL_CMAKEDIR
+ ${DEF_INSTALL_CMAKEDIR}
+ CACHE PATH "directory for CMake files")
+
+set_property(DIRECTORY PROPERTY EP_BASE ${CMAKE_BINARY_DIR}/subs)
+
+set(STAGED_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/stage)
+message(STATUS "${PROJECT_NAME} staged install: ${STAGED_INSTALL_PREFIX}")
+
+find_package(OpenSSL REQUIRED)
+message("OpenSSL include dir: ${OPENSSL_INCLUDE_DIR}")
+message("OpenSSL libraries: ${OPENSSL_LIBRARIES}")
+
+set(GRPC_GIT_TAG
+ "v1.45.2"
+ CACHE STRING "gRPC version")
+
+include(ExternalProject)
+ExternalProject_Add(
+ grpc
+ GIT_REPOSITORY https://github.com/grpc/grpc.git
+ GIT_TAG ${GRPC_GIT_TAG}
+ GIT_SHALLOW 1
+ UPDATE_COMMAND ""
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${STAGED_INSTALL_PREFIX}
+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
+ -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+ -DgRPC_SSL_PROVIDER=package
+ -DOPENSSL_ROOT_DIR=OpenSSL
+ -DgRPC_BUILD_TESTS=OFF
+ -DBUILD_SHARED_LIBS=ON
+ -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF
+ -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF
+ -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF
+ -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF
+ -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF
+ -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF
+ CMAKE_CACHE_ARGS -DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS}
+ TEST_AFTER_INSTALL 0
+ DOWNLOAD_NO_PROGRESS 1
+ LOG_CONFIGURE 1
+ LOG_BUILD 0
+ LOG_INSTALL 1)
+
+install(
+ DIRECTORY ${STAGED_INSTALL_PREFIX}/
+ DESTINATION .
+ USE_SOURCE_PERMISSIONS)
diff --git a/src/jaegertracing/opentelemetry-cpp/docker/grpc/Dockerfile b/src/jaegertracing/opentelemetry-cpp/docker/grpc/Dockerfile
new file mode 100644
index 000000000..fee3082b2
--- /dev/null
+++ b/src/jaegertracing/opentelemetry-cpp/docker/grpc/Dockerfile
@@ -0,0 +1,21 @@
+ARG BASE_IMAGE=ubuntu:latest
+FROM ${BASE_IMAGE} AS grpc
+
+ARG CORES=${nproc}
+ARG GRPC_GIT_TAG=v1.45.2
+
+RUN mkdir mkdir -p /opt/third_party/grpc
+
+WORKDIR /opt/third_party/grpc
+
+ADD CMakeLists.txt /opt/third_party/grpc
+
+RUN mkdir build \
+ && cd build \
+ && cmake -DCMAKE_INSTALL_PREFIX=/opt/third_party/install \
+ -DGRPC_GIT_TAG=${GRPC_GIT_TAG} /opt/third_party/grpc \
+ && cmake --build . -j ${CORES} --target install
+
+FROM scratch as final
+
+COPY --from=grpc /opt/third_party/install /
diff --git a/src/jaegertracing/opentelemetry-cpp/docker/thrift/CMakeLists.txt b/src/jaegertracing/opentelemetry-cpp/docker/thrift/CMakeLists.txt
new file mode 100644
index 000000000..0028dc48c
--- /dev/null
+++ b/src/jaegertracing/opentelemetry-cpp/docker/thrift/CMakeLists.txt
@@ -0,0 +1,87 @@
+cmake_minimum_required(VERSION 3.11 FATAL_ERROR)
+
+project(
+ dependencies
+ LANGUAGES CXX
+ VERSION 0.0.1)
+
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_EXTENSIONS OFF)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_FLAGS "-O2")
+
+set(CMAKE_BUILD_TYPE
+ Release
+ CACHE STRING "Build type" FORCE)
+
+include(GNUInstallDirs)
+
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
+ ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
+ ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY
+ ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
+
+set(INSTALL_LIBDIR
+ ${CMAKE_INSTALL_LIBDIR}
+ CACHE PATH "directory for libraries")
+set(INSTALL_BINDIR
+ ${CMAKE_INSTALL_BINDIR}
+ CACHE PATH "directory for executables")
+set(INSTALL_INCLUDEDIR
+ ${CMAKE_INSTALL_INCLUDEDIR}
+ CACHE PATH "directory for header files")
+
+set(DEF_INSTALL_CMAKEDIR share/cmake/${PROJECT_NAME})
+set(INSTALL_CMAKEDIR
+ ${DEF_INSTALL_CMAKEDIR}
+ CACHE PATH "directory for CMake files")
+
+set_property(DIRECTORY PROPERTY EP_BASE ${CMAKE_BINARY_DIR}/subs)
+
+set(STAGED_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/stage)
+message(STATUS "${PROJECT_NAME} staged install: ${STAGED_INSTALL_PREFIX}")
+
+find_package(OpenSSL REQUIRED)
+message("OpenSSL include dir: ${OPENSSL_INCLUDE_DIR}")
+message("OpenSSL libraries: ${OPENSSL_LIBRARIES}")
+
+set(THRIFT_VERSION
+ "0.14.1"
+ CACHE STRING "thrift version")
+
+include(ExternalProject)
+ExternalProject_Add(
+ thrift
+ URL https://github.com/apache/thrift/archive/refs/tags/v${THRIFT_VERSION}.tar.gz
+ UPDATE_COMMAND ""
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${STAGED_INSTALL_PREFIX}
+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
+ -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+ -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE
+ -DBUILD_COMPILER=OFF
+ -DBUILD_CPP=ON
+ -DBUILD_LIBRARIES=ON
+ -DBUILD_NODEJS=OFF
+ -DBUILD_PYTHON=OFF
+ -DBUILD_JAVASCRIPT=OFF
+ -DBUILD_C_GLIB=OFF
+ -DBUILD_JAVA=OFF
+ -DBUILD_TESTING=OFF
+ -DBUILD_TUTORIALS=OFF
+ -DWITH_STDTHREADS=ON
+ -DWITH_BOOSTTHREADS=OFF
+ -DWITH_BOOST_FUNCTIONAL=OFF
+ -DWITH_BOOST_SMART_PTR=OFF
+ CMAKE_CACHE_ARGS -DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS}
+ TEST_AFTER_INSTALL 0
+ DOWNLOAD_NO_PROGRESS 1
+ LOG_CONFIGURE 1
+ LOG_BUILD 0
+ LOG_INSTALL 1)
+
+install(
+ DIRECTORY ${STAGED_INSTALL_PREFIX}/
+ DESTINATION .
+ USE_SOURCE_PERMISSIONS)
diff --git a/src/jaegertracing/opentelemetry-cpp/docker/thrift/Dockerfile b/src/jaegertracing/opentelemetry-cpp/docker/thrift/Dockerfile
new file mode 100644
index 000000000..2c57199f3
--- /dev/null
+++ b/src/jaegertracing/opentelemetry-cpp/docker/thrift/Dockerfile
@@ -0,0 +1,21 @@
+ARG BASE_IMAGE=ubuntu:latest
+FROM ${BASE_IMAGE} AS thrift
+
+ARG CORES=${nproc}
+ARG THRIFT_VERSION=0.14.1
+
+RUN mkdir mkdir -p /opt/third_party/thrift
+
+WORKDIR /opt/third_party/th
+
+ADD CMakeLists.txt /opt/third_party/thrift
+
+RUN mkdir build \
+ && cd build \
+ && cmake -DCMAKE_INSTALL_PREFIX=/opt/third_party/install \
+ -DTHRIFT_VERSION=${THRIFT_VERSION} /opt/third_party/thrift \
+ && cmake --build . -j ${CORES} --target install
+
+FROM scratch as final
+
+COPY --from=thrift /opt/third_party/install /
diff --git a/src/jaegertracing/opentelemetry-cpp/docker/ubuntu14.04/Dockerfile b/src/jaegertracing/opentelemetry-cpp/docker/ubuntu14.04/Dockerfile
new file mode 100644
index 000000000..f4e8a0410
--- /dev/null
+++ b/src/jaegertracing/opentelemetry-cpp/docker/ubuntu14.04/Dockerfile
@@ -0,0 +1,42 @@
+FROM ubuntu:14.04
+ENV DEBIAN_FRONTEND noninteractive
+
+## Update cache and upgrade image
+RUN apt-get -y update && apt-get -y upgrade && apt-get -y dist-upgrade
+
+## Build environment packages
+RUN apt-get install -qq -y --ignore-missing \
+ apt-utils \
+ automake \
+ bc \
+ build-essential \
+ bzip2 \
+ cmake \
+ curl \
+ git \
+ libcurl4-openssl-dev \
+ libssl-dev \
+ make \
+ pkg-config \
+ python \
+ sudo \
+ tar \
+ zip \
+ unzip \
+ wget \
+ zlib1g-dev
+
+RUN mkdir -p /usr/local/bin
+
+## Install cmake since it's an expensive operation and best be done once
+COPY ./setup-cmake.sh /usr/local/bin/setup-cmake.sh
+RUN chmod +x /usr/local/bin/setup-cmake.sh
+RUN /usr/local/bin/setup-cmake.sh
+
+## Install protobuf3 since Ubuntu 14.04 does not have protobuf3
+COPY ./setup-protobuf.sh /usr/local/bin/setup-protobuf.sh
+RUN chmod +x /usr/local/bin/setup-protobuf.sh
+RUN /usr/local/bin/setup-protobuf.sh
+
+# ENTRYPOINT bash
+CMD /bin/bash
diff --git a/src/jaegertracing/opentelemetry-cpp/docker/ubuntu16.04/Dockerfile b/src/jaegertracing/opentelemetry-cpp/docker/ubuntu16.04/Dockerfile
new file mode 100644
index 000000000..328600f1c
--- /dev/null
+++ b/src/jaegertracing/opentelemetry-cpp/docker/ubuntu16.04/Dockerfile
@@ -0,0 +1,38 @@
+FROM ubuntu:16.04
+ENV DEBIAN_FRONTEND noninteractive
+
+## Update cache and upgrade image
+RUN apt-get -y update && apt-get -y upgrade && apt-get -y dist-upgrade
+
+## Build environment packages
+RUN apt-get install -qq -y --ignore-missing \
+ apt-utils \
+ automake \
+ build-essential \
+ bc \
+ bzip2 \
+ cmake \
+ curl \
+ git \
+ libcurl4-openssl-dev \
+ libsqlite3-dev \
+ libssl-dev \
+ libtool-bin \
+ make \
+ pkg-config \
+ python \
+ sudo \
+ tar \
+ zip \
+ unzip \
+ wget \
+ zlib1g-dev
+
+## Install cmake since it's an expensive operation and best be done once
+RUN mkdir -p /usr/local/bin
+COPY ./setup-cmake.sh /usr/local/bin/setup-cmake.sh
+RUN chmod +x /usr/local/bin/setup-cmake.sh
+RUN /usr/local/bin/setup-cmake.sh
+
+# ENTRYPOINT bash
+CMD /bin/bash
diff --git a/src/jaegertracing/opentelemetry-cpp/docker/ubuntu18.04/Dockerfile b/src/jaegertracing/opentelemetry-cpp/docker/ubuntu18.04/Dockerfile
new file mode 100644
index 000000000..9e41506b4
--- /dev/null
+++ b/src/jaegertracing/opentelemetry-cpp/docker/ubuntu18.04/Dockerfile
@@ -0,0 +1,39 @@
+FROM ubuntu:18.04
+ENV DEBIAN_FRONTEND noninteractive
+
+## Update cache and upgrade image
+RUN apt-get -y update && apt-get -y upgrade && apt-get -y dist-upgrade
+
+## Build environment packages
+RUN apt-get install -qq -y --ignore-missing \
+ apt-utils \
+ automake \
+ bc \
+ build-essential \
+ bzip2 \
+ cmake \
+ curl \
+ git \
+ libcurl4-openssl-dev \
+ libssl-dev \
+ libtool-bin \
+ make \
+ pkg-config \
+ protobuf-compiler \
+ libprotobuf-dev \
+ python \
+ sudo \
+ tar \
+ zip \
+ unzip \
+ wget \
+ zlib1g-dev
+
+## Install cmake since it's an expensive operation and best be done once
+RUN mkdir -p /usr/local/bin
+COPY ./setup-cmake.sh /usr/local/bin/setup-cmake.sh
+RUN chmod +x /usr/local/bin/setup-cmake.sh
+RUN /usr/local/bin/setup-cmake.sh
+
+# ENTRYPOINT bash
+CMD /bin/bash
diff --git a/src/jaegertracing/opentelemetry-cpp/docker/ubuntu20.04/Dockerfile b/src/jaegertracing/opentelemetry-cpp/docker/ubuntu20.04/Dockerfile
new file mode 100644
index 000000000..17dba8479
--- /dev/null
+++ b/src/jaegertracing/opentelemetry-cpp/docker/ubuntu20.04/Dockerfile
@@ -0,0 +1,39 @@
+FROM ubuntu:20.04
+ENV DEBIAN_FRONTEND noninteractive
+
+## Update cache and upgrade image
+RUN apt-get -y update && apt-get -y upgrade && apt-get -y dist-upgrade
+
+## Build environment packages
+RUN apt-get install -qq -y --ignore-missing \
+ apt-utils \
+ automake \
+ bc \
+ build-essential \
+ bzip2 \
+ cmake \
+ curl \
+ git \
+ libcurl4-openssl-dev \
+ libssl-dev \
+ libtool-bin \
+ make \
+ pkg-config \
+ protobuf-compiler \
+ libprotobuf-dev \
+ python \
+ sudo \
+ tar \
+ zip \
+ unzip \
+ wget \
+ zlib1g-dev
+
+## Install cmake since it's an expensive operation and best be done once
+RUN mkdir -p /usr/local/bin
+COPY ./setup-cmake.sh /usr/local/bin/setup-cmake.sh
+RUN chmod +x /usr/local/bin/setup-cmake.sh
+RUN /usr/local/bin/setup-cmake.sh
+
+# ENTRYPOINT bash
+CMD /bin/bash
diff --git a/src/jaegertracing/opentelemetry-cpp/docker/ubuntuLatest/Dockerfile b/src/jaegertracing/opentelemetry-cpp/docker/ubuntuLatest/Dockerfile
new file mode 100644
index 000000000..6a1a88388
--- /dev/null
+++ b/src/jaegertracing/opentelemetry-cpp/docker/ubuntuLatest/Dockerfile
@@ -0,0 +1,62 @@
+FROM ubuntu:latest
+ENV DEBIAN_FRONTEND=noninteractive
+WORKDIR /work
+
+#install grpc and abseil
+ARG GRPC_VERSION=v1.38.0
+RUN apt-get update && apt-get install -y build-essential autoconf libtool pkg-config cmake git libssl-dev && \
+ git clone --depth=1 -b $GRPC_VERSION https://github.com/grpc/grpc.git && \
+ cd grpc && git submodule update --init && \
+ mkdir -p "third_party/abseil-cpp/build" && cd "third_party/abseil-cpp/build" && \
+ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE .. && \
+ make -j${nproc} install && cd ../../.. && \
+ mkdir build && cd build && \
+ cmake \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DgRPC_INSTALL=ON \
+ -DgRPC_BUILD_TESTS=OFF \
+ -DgRPC_ABSL_PROVIDER=package \
+ -DgRPC_SSL_PROVIDER=package \
+ .. && \
+ make -j${nproc} install && make clean && ldconfig && \
+ cd ../..
+
+#install thrift
+ARG THRIFT_VERSION=0.14.1
+RUN apt-get install -y --no-install-recommends \
+ libboost-all-dev \
+ libevent-dev \
+ wget && \
+ wget https://github.com/apache/thrift/archive/refs/tags/v$THRIFT_VERSION.tar.gz && \
+ tar -xvf v$THRIFT_VERSION.tar.gz && \
+ mkdir -p thrift-$THRIFT_VERSION/build && cd thrift-$THRIFT_VERSION/build && \
+ cmake \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DBUILD_COMPILER=OFF \
+ -DBUILD_CPP=ON \
+ -DBUILD_LIBRARIES=ON \
+ -DBUILD_NODEJS=OFF \
+ -DBUILD_PYTHON=OFF \
+ -DBUILD_JAVASCRIPT=OFF \
+ -DBUILD_C_GLIB=OFF \
+ -DBUILD_JAVA=OFF \
+ -DBUILD_TESTING=OFF \
+ -DBUILD_TUTORIALS=OFF \
+ .. && \
+ make -j${nproc} install && make clean && ldconfig && \
+ cd ../..
+
+#install opentelemetry-cpp
+RUN apt-get install -y --no-install-recommends libcurl4-openssl-dev && git clone --depth=1 https://github.com/open-telemetry/opentelemetry-cpp.git && \
+ cd opentelemetry-cpp && git submodule update --init && \
+ mkdir -p build && cd build && \
+ cmake \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \
+ -DWITH_ZIPKIN=ON \
+ -DWITH_JAEGER=ON \
+ -DBUILD_TESTING=OFF \
+ -DWITH_OTLP=ON \
+ .. && \
+ make -j${nproc} install && ldconfig && \
+ cd ../..