Docker通过读取Dockerfile中的指令自动构建镜像,Dockerfile是一个文本文件,其中依次包含构建给定镜像所需的所有命令。

上面的解释摘自Docker的官方文档并总结了Dockerfile的用途。Dockerfile的使用非常重要,因为它是我们的蓝图,是我们添加到Docker镜像中的层的记录。
本文,我们将学习如何利用BuildKit功能,这是Docker v18.09上引入的一组增强功能。集成BuildKit将为我们提供更好的性能,存储管理和安全性。
本文目标
-
减少构建时间;
-
缩小镜像尺寸;
-
获得可维护性;
-
获得可重复性;
-
了解多阶段Dockerfile;
-
了解BuildKit功能。
先决条件
-
Docker概念知识
-
已安装Docker(当前使用v19.03)
-
一个Java应用程序(在本文中,我使用了一个Jenkins Maven示例应用程序)
让我们开始吧!
简单的Dockerfile示例
以下是一个包含Java应用程序的未优化Dockerfile的示例。我们将逐步进行一些优化。
FROM debian
COPY . /app
RUN apt-get update
RUN apt-get -y install openjdk-11-jdk ssh emacs
CMD [“java”, “-jar”, “/app/target/my-app-1.0-SNAPSHOT.jar”]
在这里,我们可能会问自己:构建需要多长时间?为了回答这个问题,让我们在本地开发环境上创建该Dockerfile,并让Docker构建镜像。
# enter your Java app folder
cd simple-java-maven-app-master
# create a Dockerfile
vim Dockerfile
# write content, save and exit
docker pull debian:latest # pull the source image
time docker build --no-cache -t docker-class . # overwrite previous layers
# notice the build time
0,21s user 0,23s system 0% cpu 1:55,17 total
此时,我们的构建需要1m55s。
如果我们仅启用BuildKit而没有其他更改,会有什么不同吗?
启用BuildKit
BuildKit可以通过两种方法启用:
在调用Docker build命令时设置DOCKER_BUILDKIT = 1环境变量,例如:
time DOCKER_BUILDKIT=1 docker build --no-cache -t docker-class
将Docker BuildKit设置为默认开启,需要在/etc/docker/daemon.json进行如下设置,然后重启:
{ "features": { "buildkit": true } }
BuildKit最初的效果
DOCKER_BUILDKIT=1 docker


1425

被折叠的 条评论
为什么被折叠?



