Оптимизация сроков сборки грузов в Докере
Я разрабатываю API с помощью Rust и управляю средами, включая внешнюю базу данных с помощью Docker. Каждый раз, когда я делаю изменения в коде API, перестраиваем грузы, и поскольку Docker не кэширует ничего общего сADD
Чтобы скопировать каталог Rust в контейнер, он перезагружает все пакеты, что является довольно длительным процессом, поскольку я использую Nickel, который, похоже, имеет множество зависимостей.
Есть ли способ довести эти зависимости до запускаcargo build
? По крайней мере, таким образом, если зависимости меняются, он устанавливает только то, что требуется, аналогично компиляции Cargo локально.
Вот Dockerfile, который я сейчас использую:
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
А вот и мой 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"] }