add a Dockerfile for creating nim-waku images

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 <jakub@status.im>
This commit is contained in:
Jakub Sokołowski 2020-05-26 14:04:40 +02:00 committed by Jakub
parent e0a5f810b7
commit 8a648a44aa
6 changed files with 66 additions and 52 deletions

7
.dockerignore Normal file
View File

@ -0,0 +1,7 @@
/README.md
/Dockerfile
/.*ignore
/LICENSE*
/tests
/metrics
**/vendor/*

38
Dockerfile Normal file
View File

@ -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"]

View File

@ -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

View File

@ -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

View File

@ -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 <kimdemey@status.im>
LABEL description="Wakunode: Waku and Whisper client"
ENTRYPOINT ["/usr/bin/wakunode"]

View File

@ -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)