Use multi step build to limit the docker image size (#416)

* Use multi step build to limit the image size

This change replace the Dockerfile with a multi step build to avoid huge image
size (the new image should be around 130Mo including all layers), compared to
more that 1Go with the full build chain. It's also more safe. This image does
not include cargo (not needed in production), so the old Dockerfile is available
and renamed Dockerfile.slim for those who use Docker for development setup.

* Use correct path for local repository

* Use sleep between chmod and execution
This commit is contained in:
Dominique Feyer 2019-01-09 17:48:18 +01:00 committed by Baptiste Gelez
parent 671c340aa8
commit 0490b698cb
2 changed files with 57 additions and 3 deletions

View File

@ -1,6 +1,7 @@
FROM rust:1-stretch FROM rust:1-stretch as builder
RUN apt-get update && apt-get install -y --no-install-recommends \ RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
gettext \ gettext \
postgresql-client \ postgresql-client \
libpq-dev \ libpq-dev \
@ -10,17 +11,37 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
make \ make \
openssl \ openssl \
libssl-dev libssl-dev
WORKDIR /scratch WORKDIR /scratch
COPY script/wasm-deps.sh . COPY script/wasm-deps.sh .
RUN chmod a+x ./wasm-deps.sh && ./wasm-deps.sh RUN chmod a+x ./wasm-deps.sh && sleep 1 && ./wasm-deps.sh
WORKDIR /app WORKDIR /app
COPY Cargo.toml Cargo.lock rust-toolchain ./ COPY Cargo.toml Cargo.lock rust-toolchain ./
RUN cargo install diesel_cli --no-default-features --features postgres --version '=1.3.0' RUN cargo install diesel_cli --no-default-features --features postgres --version '=1.3.0'
RUN cargo install cargo-web RUN cargo install cargo-web
COPY . . COPY . .
RUN chmod a+x ./script/plume-front.sh && ./script/plume-front.sh
RUN chmod a+x ./script/plume-front.sh && sleep 1 && ./script/plume-front.sh
RUN cargo install --path ./ --force --no-default-features --features postgres RUN cargo install --path ./ --force --no-default-features --features postgres
RUN cargo install --path plume-cli --force --no-default-features --features postgres RUN cargo install --path plume-cli --force --no-default-features --features postgres
RUN cargo clean RUN cargo clean
FROM debian:stretch-slim
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
libpq5 \
libssl1.1
WORKDIR /app
COPY --from=builder /app /app
COPY --from=builder /usr/local/cargo/bin/plm /bin/
COPY --from=builder /usr/local/cargo/bin/plume /bin/
COPY --from=builder /usr/local/cargo/bin/diesel /bin/
CMD ["plume"] CMD ["plume"]
EXPOSE 7878 EXPOSE 7878

33
Dockerfile.dev Normal file
View File

@ -0,0 +1,33 @@
FROM rust:1-stretch
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
gettext \
postgresql-client \
libpq-dev \
git \
curl \
gcc \
make \
openssl \
libssl-dev
WORKDIR /scratch
COPY script/wasm-deps.sh .
RUN chmod a+x ./wasm-deps.sh && sleep 1 && ./wasm-deps.sh
WORKDIR /app
COPY Cargo.toml Cargo.lock rust-toolchain ./
RUN cargo install diesel_cli --no-default-features --features postgres --version '=1.3.0'
RUN cargo install cargo-web
COPY . .
RUN chmod a+x ./script/plume-front.sh && sleep 1 && ./script/plume-front.sh
RUN cargo install --path ./ --force --no-default-features --features postgres
RUN cargo install --path plume-cli --force --no-default-features --features postgres
RUN cargo clean
CMD ["plume"]
EXPOSE 7878