Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

alpine image #1382

Merged
merged 10 commits into from
May 16, 2022
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
ARG BASE_IMAGE=ubuntu:latest

ARG GRPC_IMAGE=grpc-${BASE_IMAGE}
FROM ${GRPC_IMAGE} as grpc

FROM base-${BASE_IMAGE}-dev AS otel-cpp

ARG CORES=${nproc}
ARG OTEL_GIT_TAG=v1.3.0

COPY --from=grpc / /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=OFF \
-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 /
14 changes: 14 additions & 0 deletions docker/Dockerfile.alpine.base
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we add gtest/gmock too as part of this distro specific Dockerfile (and enable building tests). Also, how can we take care of thrift installation - should it be separate Dockerfile similar to way we are doing for grpc?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes gtest and gmock could be part of the base. I would use a separate Dockerfile for thrift as well. This would allow users to reuse our Docker files in their CI.


RUN mkdir -p /opt/third_party/install

WORKDIR /opt
62 changes: 62 additions & 0 deletions docker/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#!/bin/bash

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 "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"
}

while getopts ":h:b:o:g:j:" 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
;;
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

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 .
78 changes: 78 additions & 0 deletions docker/grpc/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
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
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)
21 changes: 21 additions & 0 deletions docker/grpc/Dockerfile
Original file line number Diff line number Diff line change
@@ -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 /