Je développe une API avec Rust et gère les environnements, y compris la base de données externe avec Docker. Chaque fois que je fais une modification au code de l'API, la cargaison se reconstruit, et puisque Docker ne cache rien à faire avec l'instruction ADD
pour copier le répertoire Rust sur le conteneur, il télécharge tous les paquets, ce qui est assez processus long puisque j'utilise Nickel, qui semble avoir une cargaison de dépendances.Optimisation des temps de génération de fret dans Docker
Existe-t-il un moyen d'intégrer ces dépendances avant d'exécuter cargo build
? Au moins de cette façon, si les dépendances changent, elle n'installera que ce qui est requis, similaire à la compilation de Cargo localement.
Voici le Dockerfile J'utilise actuellement:
FROM ubuntu:xenial
RUN apt-get update && apt-get install curl build-essential ca-certificates file xutils-dev nmap -y
RUN mkdir /rust
WORKDIR /rust
RUN curl https://sh.rustup.rs -s >> rustup.sh
RUN chmod 755 /rust/rustup.sh
RUN ./rustup.sh -y
ENV PATH=/root/.cargo/bin:$PATH SSL_VERSION=1.0.2h
RUN rustup default 1.11.0
RUN curl https://www.openssl.org/source/openssl-$SSL_VERSION.tar.gz -O && \
tar -xzf openssl-$SSL_VERSION.tar.gz && \
cd openssl-$SSL_VERSION && ./config && make depend && make install && \
cd .. && rm -rf openssl-$SSL_VERSION*
ENV OPENSSL_LIB_DIR=/usr/local/ssl/lib \
OPENSSL_INCLUDE_DIR=/usr/local/ssl/include \
OPENSSL_STATIC=1
RUN mkdir /app
WORKDIR /app
ADD . /app/
RUN cargo build
EXPOSE 20000
CMD ./target/debug/api
Et voici mon Cargo.toml
[profile.dev]
debug = true
[package]
name = "api"
version = "0.0.1"
authors = ["Vignesh Sankaran <[email protected]>"]
[dependencies]
nickel = "= 0.8.1"
mongodb = "= 0.1.6"
bson = "= 0.3.0"
uuid = { version = "= 0.3.1", features = ["v4"] }
Peut-être que vous pouvez d'abord ajouter et compiler une application fictive avec les mêmes dépendances. – wimh
https://github.com/rust-lang/cargo/issues/1891. Notez également que vous pouvez installer la chaîne d'outils correcte en une seule étape './rustup.sh -y --default-toolchain 1.11.0' – Shepmaster