lfk*_*lfk 3 scala sbt docker docker-compose
我有两个使用两阶段构建的图像来构建Scala代码并将工件复制到最终图像。为了加快构建速度,我将本地复制~/.ivy2到上下文目录,然后从该目录复制到映像(〜1GB)。不幸的是,这意味着即使没有任何变化并且不需要重新构建映像,docker-compose build(或docker build)仍挂了相当长一段时间才能复制Docker上下文。这当然会发生两次,每个图像一次。
有什么聪明的方法可以做到这一点吗?
Dockerfile:
FROM openjdk:8
RUN apt-get update &&\
apt-get install -y apt-transport-https gnupg2 &&\
echo "deb https://dl.bintray.com/sbt/debian /" | tee -a /etc/apt/sources.list.d/sbt.list &&\
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 642AC823 &&\
apt-get update &&\
apt-get install -y sbt=1.1.6
COPY ivy-cache/ /root/.ivy2
COPY app/source/ /app/source
RUN cd /app/source &&\
sbt assembly &&\
cp target/scala-2.11/my-app-*.jar /app/my-app.jar
FROM gettyimages/spark:2.3.1-hadoop-3.0
COPY --from=0 /app/my-app.jar /app/my-app.jar
CMD ["spark-submit", "--master", "local", "/app/my-app.jar"]
Run Code Online (Sandbox Code Playgroud)
在18.09中,docker包括BuildKit。就其本身而言,BuildKit将缓存先前的上下文,并且仅在后台发送与rsync等效的差异。
对于这种特定情况,您可以使用一些实验性功能将其作为与使用RUN --mount语法的命名卷等效的功能安装到依赖项缓存中。缓存目录从不进入映像,但在以后的构建中存在该目录,当您引入新的依赖项时,它的行为就像本地构建一样,仅下载新的依赖项。
# syntax=docker/dockerfile:experimental
FROM openjdk:8 as build
RUN apt-get update &&\
apt-get install -y apt-transport-https gnupg2 &&\
echo "deb https://dl.bintray.com/sbt/debian /" | tee -a /etc/apt/sources.list.d/sbt.list &&\
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 642AC823 &&\
apt-get update &&\
apt-get install -y sbt=1.1.6
COPY app/source/ /app/source
RUN --mount=type=cache,target=/root/.ivy2 \
cd /app/source &&\
sbt assembly &&\
cp target/scala-2.11/my-app-*.jar /app/my-app.jar
FROM gettyimages/spark:2.3.1-hadoop-3.0 as release
COPY --from=build /app/my-app.jar /app/my-app.jar
CMD ["spark-submit", "--master", "local", "/app/my-app.jar"]
Run Code Online (Sandbox Code Playgroud)
要在18.09下使用BuildKit,可以导出环境变量:
export DOCKER_BUILDKIT=1
Run Code Online (Sandbox Code Playgroud)
或使用/etc/docker/daemon.json中的新默认值更新引擎:
{ "features": {"buildkit": true} }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |