build(Dockerfile): reduce image size from 2G GB to ~0.4GB

This uses mulit-stage build to separate the build phase from
the distribution image and signigicantly reduces images size.

You can find more information on Docker multistage builds here:
https://docs.docker.com/develop/develop-images/multistage-build/
This commit is contained in:
Benjamin Schmid
2020-08-13 20:36:42 +02:00
parent 4e4829b650
commit b0b3dc761b

View File

@@ -1,4 +1,4 @@
FROM golang:1.13-buster
FROM golang:1.13-buster AS buildcontainer
ARG SIGNAL_CLI_VERSION=0.6.8
ARG SWAG_VERSION=1.6.7
@@ -29,10 +29,7 @@ RUN cd /tmp/ \
&& git checkout v${SIGNAL_CLI_VERSION} \
&& ./gradlew build \
&& ./gradlew installDist \
&& ln -s /tmp/signal-cli-${SIGNAL_CLI_VERSION}/build/install/signal-cli/bin/signal-cli /usr/bin/signal-cli
RUN mkdir -p /signal-cli-config/
RUN mkdir -p /home/.local/share/signal-cli
&& ln -s /tmp/signal-cli-${SIGNAL_CLI_VERSION}/build/install/signal-cli/ /tmp/signal-cli
COPY src/api /tmp/signal-cli-rest-api-src/api
COPY src/main.go /tmp/signal-cli-rest-api-src/
@@ -41,7 +38,15 @@ COPY src/go.sum /tmp/signal-cli-rest-api-src/
RUN cd /tmp/signal-cli-rest-api-src && swag init && go build
ENV PATH /tmp/signal-cli-rest-api-src/:/usr/bin/signal-cli-${SIGNAL_CLI_VERSION}/bin/:$PATH
# Start a fresh container for release container
FROM openjdk:11-slim
COPY --from=buildcontainer /tmp/signal-cli-rest-api-src/signal-cli-rest-api /usr/bin/signal-cli-rest-api
COPY --from=buildcontainer /tmp/signal-cli /opt/signal-cli
RUN ln -s /opt/signal-cli/bin/signal-cli /usr/bin/signal-cli
RUN mkdir -p /signal-cli-config/
RUN mkdir -p /home/.local/share/signal-cli
EXPOSE 8080