From 8a648a44aa1e08775da1ccf7b7bcb63db80b873c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Soko=C5=82owski?= Date: Tue, 26 May 2020 14:04:40 +0200 Subject: [PATCH] add a Dockerfile for creating nim-waku images MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also I remove old Dockerfile at waku/node/v1/docker. Images are uploaded to our Docker Hub account: https://hub.docker.com/r/statusteam/nim-waku Signed-off-by: Jakub SokoĊ‚owski --- .dockerignore | 7 +++++++ Dockerfile | 38 ++++++++++++++++++++++++++++++++++ Makefile | 15 ++++++++++++++ README.md | 6 ++++++ waku/node/v1/docker/Dockerfile | 36 -------------------------------- waku/node/v1/docker/Makefile | 16 -------------- 6 files changed, 66 insertions(+), 52 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile delete mode 100644 waku/node/v1/docker/Dockerfile delete mode 100644 waku/node/v1/docker/Makefile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..70ac9cb78 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +/README.md +/Dockerfile +/.*ignore +/LICENSE* +/tests +/metrics +**/vendor/* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..c7261b863 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +# BUILD IMAGE -------------------------------------------------------- +FROM alpine:3.11 AS nim-build + +ARG NIM_PARAMS + +# Get build tools and required header files +RUN apk add --no-cache bash build-base pcre-dev linux-headers git + +RUN mkdir /app +WORKDIR /app +ADD . . + +# Ran separately from 'make' to avoid re-doing +RUN git submodule update --init --recursive + +# Build the node binary +RUN make -j$(nproc) wakunode NIM_PARAMS="${NIM_PARAMS}" + +# ACTUAL IMAGE ------------------------------------------------------- +FROM alpine:3.11 + +LABEL maintainer="jakub@status.im" +LABEL source="https://github.com/status-im/nim-waku" +LABEL description="Wakunode: Waku and Whisper client" + +EXPOSE 1234 + +# Referenced in the binary +RUN apk add --no-cache libgcc pcre-dev + +# Fix for 'Error loading shared library libpcre.so.3: No such file or directory' +RUN ln -s /usr/lib/libpcre.so /usr/lib/libpcre.so.3 + +COPY --from=nim-build /app/build/wakunode /usr/bin/wakunode + +ENTRYPOINT ["/usr/bin/wakunode"] +# By default just show help if called without arguments +CMD ["--help"] diff --git a/Makefile b/Makefile index d7aec30b2..4e30a3f2e 100644 --- a/Makefile +++ b/Makefile @@ -10,6 +10,12 @@ SHELL := bash # the shell used internally by Make # used inside the included makefiles BUILD_SYSTEM_DIR := vendor/nimbus-build-system +# Docker image name +DOCKER_IMAGE_TAG ?= latest +DOCKER_IMAGE_NAME ?= statusteam/nim-waku:$(DOCKER_IMAGE_TAG) +# Necessary to enable Prometheus HTTP endpoint for metrics +DOCKER_IMAGE_NIM_PARAMS ?= -d:insecure + # we don't want an error here, so we can handle things later, in the ".DEFAULT" target -include $(BUILD_SYSTEM_DIR)/makefiles/variables.mk @@ -93,6 +99,15 @@ waku.nims: libbacktrace: + $(MAKE) -C vendor/nim-libbacktrace --no-print-directory BUILD_CXX_LIB=0 +# build a docker image for the fleet +docker-image: + docker build \ + --build-arg="NIM_PARAMS=$(DOCKER_IMAGE_NIM_PARAMS)" \ + --tag $(DOCKER_IMAGE_NAME) . + +docker-push: + docker push $(DOCKER_IMAGE_NAME) + # builds and runs the test suite test: | build deps $(ENV_SCRIPT) nim test $(NIM_PARAMS) waku.nims diff --git a/README.md b/README.md index dab756f5e..9fc5fbbe2 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,12 @@ make wakunode ./build/wakunode --log-level:debug --discovery:off --fleet:test --log-metrics ``` +You can also create a Docker image using: +```bash +make docker-image +docker run --rm -it statusteam/nim-waku:latest --help +``` + ### Waku Protocol Test Suite ```bash diff --git a/waku/node/v1/docker/Dockerfile b/waku/node/v1/docker/Dockerfile deleted file mode 100644 index 8d061e6e0..000000000 --- a/waku/node/v1/docker/Dockerfile +++ /dev/null @@ -1,36 +0,0 @@ -FROM debian:bullseye-slim AS build - -SHELL ["/bin/bash", "-c"] - -RUN apt-get -qq update \ - && apt-get -qq -y install build-essential make wget libpcre3-dev git curl &>/dev/null \ - && apt-get -qq clean - -ARG GIT_REVISION - -RUN cd /root \ - && git clone https://github.com/status-im/nim-waku.git \ - && cd nim-waku \ - && git reset --hard ${GIT_REVISION} \ - && { make &>/dev/null || true; } \ - && make -j$(nproc) update \ - && make NIMFLAGS="-d:debug -d:insecure" wakunode - -# --------------------------------- # -# Starting new image to reduce size # -# --------------------------------- # -FROM debian:bullseye-slim - -SHELL ["/bin/bash", "-c"] - -RUN apt-get -qq update \ - && apt-get -qq -y install libpcre3 &>/dev/null \ - && apt-get -qq clean \ - && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* - -COPY --from=build /root/nim-waku/build/wakunode /usr/bin/wakunode - -MAINTAINER Kim De Mey -LABEL description="Wakunode: Waku and Whisper client" - -ENTRYPOINT ["/usr/bin/wakunode"] diff --git a/waku/node/v1/docker/Makefile b/waku/node/v1/docker/Makefile deleted file mode 100644 index 7fc69ab09..000000000 --- a/waku/node/v1/docker/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -SHELL := bash # the shell used internally by "make" - -# These default settings can be overriden by exporting env variables - -GIT_REVISION ?= $(shell git rev-parse HEAD) - -IMAGE_TAG ?= latest -IMAGE_NAME ?= statusteam/nimbus_wakunode:$(IMAGE_TAG) - -build: - docker build \ - --build-arg="GIT_REVISION=$(GIT_REVISION)" \ - -t $(IMAGE_NAME) . - -push: build - docker push $(IMAGE_NAME)