diff options
author | Daniel <[email protected]> | 2024-05-19 21:32:36 +0300 |
---|---|---|
committer | GitHub <[email protected]> | 2024-05-19 20:32:36 +0200 |
commit | 3261534438f572a36029f17f9a0ce88fe2b79b0d (patch) | |
tree | 94d7bd0cb9fe402d50f2646ea3697a5c59049990 /docker | |
parent | 46762d9fdeeb8e91c5e404a0a1a5f4399da45a05 (diff) | |
download | vaultwarden-3261534438f572a36029f17f9a0ce88fe2b79b0d.tar.gz vaultwarden-3261534438f572a36029f17f9a0ce88fe2b79b0d.zip |
Optimize Dockerfiles (#4532)
Move some ARGs closer to the build stage (potentially improving caching)
Remove redundant COPY commands
Remove redundant RUN command
Move CARGO_HOME's "&&" operator to the first line (improves consistency)
Diffstat (limited to 'docker')
-rw-r--r-- | docker/Dockerfile.alpine | 24 | ||||
-rw-r--r-- | docker/Dockerfile.debian | 31 | ||||
-rw-r--r-- | docker/Dockerfile.j2 | 39 |
3 files changed, 44 insertions, 50 deletions
diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine index 53f2a4a7..8d3eaf47 100644 --- a/docker/Dockerfile.alpine +++ b/docker/Dockerfile.alpine @@ -58,8 +58,8 @@ ENV DEBIAN_FRONTEND=noninteractive \ # Create CARGO_HOME folder and don't download rust docs -RUN mkdir -pv "${CARGO_HOME}" \ - && rustup set profile minimal +RUN mkdir -pv "${CARGO_HOME}" && \ + rustup set profile minimal # Creates a dummy project used to grab dependencies RUN USER=root cargo new --bin /app @@ -72,20 +72,17 @@ RUN echo "export CARGO_TARGET=${RUST_MUSL_CROSS_TARGET}" >> /env-cargo && \ # Output the current contents of the file cat /env-cargo -# Configure the DB ARG as late as possible to not invalidate the cached layers above -# Enable MiMalloc to improve performance on Alpine builds -ARG DB=sqlite,mysql,postgresql,enable_mimalloc - RUN source /env-cargo && \ rustup target add "${CARGO_TARGET}" +# Copies over *only* your manifests and build files +COPY ./Cargo.* ./rust-toolchain.toml ./build.rs ./ + ARG CARGO_PROFILE=release -ARG VW_VERSION -# Copies over *only* your manifests and build files -COPY ./Cargo.* ./ -COPY ./rust-toolchain.toml ./rust-toolchain.toml -COPY ./build.rs ./build.rs +# Configure the DB ARG as late as possible to not invalidate the cached layers above +# Enable MiMalloc to improve performance on Alpine builds +ARG DB=sqlite,mysql,postgresql,enable_mimalloc # Builds your dependencies and removes the # dummy project, except the target folder @@ -98,6 +95,8 @@ RUN source /env-cargo && \ # To avoid copying unneeded files, use .dockerignore COPY . . +ARG VW_VERSION + # Builds again, this time it will be the actual source files being build RUN source /env-cargo && \ # Make sure that we actually build the project by updating the src/main.rs timestamp @@ -151,8 +150,7 @@ EXPOSE 3012 # and the binary from the "build" stage to the current stage WORKDIR / -COPY docker/healthcheck.sh /healthcheck.sh -COPY docker/start.sh /start.sh +COPY docker/healthcheck.sh docker/start.sh / COPY --from=vault /web-vault ./web-vault COPY --from=build /app/target/final/vaultwarden . diff --git a/docker/Dockerfile.debian b/docker/Dockerfile.debian index dc0d0a72..a9cf3b13 100644 --- a/docker/Dockerfile.debian +++ b/docker/Dockerfile.debian @@ -64,10 +64,7 @@ RUN apt-get update && \ "libc6-$(xx-info debian-arch)-cross" \ "libc6-dev-$(xx-info debian-arch)-cross" \ "linux-libc-dev-$(xx-info debian-arch)-cross" && \ - # Run xx-cargo early, since it sometimes seems to break when run at a later stage - echo "export CARGO_TARGET=$(xx-cargo --print-target-triple)" >> /env-cargo - -RUN xx-apt-get install -y \ + xx-apt-get install -y \ --no-install-recommends \ gcc \ libmariadb3 \ @@ -78,11 +75,13 @@ RUN xx-apt-get install -y \ # Force install arch dependend mariadb dev packages # Installing them the normal way breaks several other packages (again) apt-get download "libmariadb-dev-compat:$(xx-info debian-arch)" "libmariadb-dev:$(xx-info debian-arch)" && \ - dpkg --force-all -i ./libmariadb-dev*.deb + dpkg --force-all -i ./libmariadb-dev*.deb && \ + # Run xx-cargo early, since it sometimes seems to break when run at a later stage + echo "export CARGO_TARGET=$(xx-cargo --print-target-triple)" >> /env-cargo # Create CARGO_HOME folder and don't download rust docs -RUN mkdir -pv "${CARGO_HOME}" \ - && rustup set profile minimal +RUN mkdir -pv "${CARGO_HOME}" && \ + rustup set profile minimal # Creates a dummy project used to grab dependencies RUN USER=root cargo new --bin /app @@ -111,19 +110,16 @@ RUN source /env-cargo && \ # Output the current contents of the file cat /env-cargo -# Configure the DB ARG as late as possible to not invalidate the cached layers above -ARG DB=sqlite,mysql,postgresql - RUN source /env-cargo && \ rustup target add "${CARGO_TARGET}" +# Copies over *only* your manifests and build files +COPY ./Cargo.* ./rust-toolchain.toml ./build.rs ./ + ARG CARGO_PROFILE=release -ARG VW_VERSION -# Copies over *only* your manifests and build files -COPY ./Cargo.* ./ -COPY ./rust-toolchain.toml ./rust-toolchain.toml -COPY ./build.rs ./build.rs +# Configure the DB ARG as late as possible to not invalidate the cached layers above +ARG DB=sqlite,mysql,postgresql # Builds your dependencies and removes the # dummy project, except the target folder @@ -136,6 +132,8 @@ RUN source /env-cargo && \ # To avoid copying unneeded files, use .dockerignore COPY . . +ARG VW_VERSION + # Builds again, this time it will be the actual source files being build RUN source /env-cargo && \ # Make sure that we actually build the project by updating the src/main.rs timestamp @@ -193,8 +191,7 @@ EXPOSE 3012 # and the binary from the "build" stage to the current stage WORKDIR / -COPY docker/healthcheck.sh /healthcheck.sh -COPY docker/start.sh /start.sh +COPY docker/healthcheck.sh docker/start.sh / COPY --from=vault /web-vault ./web-vault COPY --from=build /app/target/final/vaultwarden . diff --git a/docker/Dockerfile.j2 b/docker/Dockerfile.j2 index 73a9c2a5..3552cc39 100644 --- a/docker/Dockerfile.j2 +++ b/docker/Dockerfile.j2 @@ -82,10 +82,7 @@ RUN apt-get update && \ "libc6-$(xx-info debian-arch)-cross" \ "libc6-dev-$(xx-info debian-arch)-cross" \ "linux-libc-dev-$(xx-info debian-arch)-cross" && \ - # Run xx-cargo early, since it sometimes seems to break when run at a later stage - echo "export CARGO_TARGET=$(xx-cargo --print-target-triple)" >> /env-cargo - -RUN xx-apt-get install -y \ + xx-apt-get install -y \ --no-install-recommends \ gcc \ libmariadb3 \ @@ -96,12 +93,14 @@ RUN xx-apt-get install -y \ # Force install arch dependend mariadb dev packages # Installing them the normal way breaks several other packages (again) apt-get download "libmariadb-dev-compat:$(xx-info debian-arch)" "libmariadb-dev:$(xx-info debian-arch)" && \ - dpkg --force-all -i ./libmariadb-dev*.deb + dpkg --force-all -i ./libmariadb-dev*.deb && \ + # Run xx-cargo early, since it sometimes seems to break when run at a later stage + echo "export CARGO_TARGET=$(xx-cargo --print-target-triple)" >> /env-cargo {% endif %} # Create CARGO_HOME folder and don't download rust docs -RUN mkdir -pv "${CARGO_HOME}" \ - && rustup set profile minimal +RUN mkdir -pv "${CARGO_HOME}" && \ + rustup set profile minimal # Creates a dummy project used to grab dependencies RUN USER=root cargo new --bin /app @@ -131,8 +130,6 @@ RUN source /env-cargo && \ # Output the current contents of the file cat /env-cargo -# Configure the DB ARG as late as possible to not invalidate the cached layers above -ARG DB=sqlite,mysql,postgresql {% elif base == "alpine" %} # Environment variables for Cargo on Alpine based builds RUN echo "export CARGO_TARGET=${RUST_MUSL_CROSS_TARGET}" >> /env-cargo && \ @@ -141,21 +138,22 @@ RUN echo "export CARGO_TARGET=${RUST_MUSL_CROSS_TARGET}" >> /env-cargo && \ # Output the current contents of the file cat /env-cargo -# Configure the DB ARG as late as possible to not invalidate the cached layers above -# Enable MiMalloc to improve performance on Alpine builds -ARG DB=sqlite,mysql,postgresql,enable_mimalloc {% endif %} - RUN source /env-cargo && \ rustup target add "${CARGO_TARGET}" +# Copies over *only* your manifests and build files +COPY ./Cargo.* ./rust-toolchain.toml ./build.rs ./ + ARG CARGO_PROFILE=release -ARG VW_VERSION -# Copies over *only* your manifests and build files -COPY ./Cargo.* ./ -COPY ./rust-toolchain.toml ./rust-toolchain.toml -COPY ./build.rs ./build.rs +# Configure the DB ARG as late as possible to not invalidate the cached layers above +{% if base == "debian" %} +ARG DB=sqlite,mysql,postgresql +{% elif base == "alpine" %} +# Enable MiMalloc to improve performance on Alpine builds +ARG DB=sqlite,mysql,postgresql,enable_mimalloc +{% endif %} # Builds your dependencies and removes the # dummy project, except the target folder @@ -168,6 +166,8 @@ RUN source /env-cargo && \ # To avoid copying unneeded files, use .dockerignore COPY . . +ARG VW_VERSION + # Builds again, this time it will be the actual source files being build RUN source /env-cargo && \ # Make sure that we actually build the project by updating the src/main.rs timestamp @@ -237,8 +237,7 @@ EXPOSE 3012 # and the binary from the "build" stage to the current stage WORKDIR / -COPY docker/healthcheck.sh /healthcheck.sh -COPY docker/start.sh /start.sh +COPY docker/healthcheck.sh docker/start.sh / COPY --from=vault /web-vault ./web-vault COPY --from=build /app/target/final/vaultwarden . |