Dockerfile 构建上下文 build -f 选项 加快构建速度

news/2024/10/15 22:12:44/

 理解构建上下文(Build Context)

  • 当运行 docker build 命令时,当前工作目录被称为构建上下文,docker本身会将工作目录里面所有的文件都上传给docker daemon,在这个基础之上再去构建容器镜像。(如果你在根目录去构建容器镜像,将根目录作为构建上下文,那么会相当的慢,它会去检索我所在的当前目录,会将当前目录的所有内容都传输给docker daemon,这样构建的效率会非常的底下)
  • docker build 默认查找当前目录的 Dockerfile作为构建输入,也可以通过-f指定 Dockerfile。

       docker build -f ./Dockerfile

  • docker build 运行时,首先会把构建上下文传输给docker daemon,把没用的文件包含在构建上下文时,会导致传输时间长,构建需要的资源多,构建出的镜像大等问题。

       试着到一个包含文件很多的目录运行下面的命令,会感受到差异:

       (1)docker build-f $GOPATH/src/github.com/cncamp/golang/httpserver/Dockerfile

       (2)docker build $GOPATH/src/github.com/cncamp/golang/httpserver/

       可以通过.dockerignore文件从编译上下文排除某些文件。

  • 因此需要确保构建上下文清晰,比如创建一个专门的目录放置 Dockerfile,并在目录中运行docker build。
[root@jenkins dockerfile]# docker build -f ./Dockerfile -t java-demo:v1.1 .
[+] Building 0.1s (7/7) FINISHED                                                                                                                                   docker:default=> [internal] load build definition from Dockerfile                                                                                                                         0.0s=> => transferring dockerfile: 311B                                                                                                                                         0.0s=> [internal] load metadata for docker.io/library/openjdk:8-jdk-alpine                                                                                                      0.0s=> [internal] load .dockerignore                                                                                                                                            0.0s=> => transferring context: 2B                           

docker build -f docker/Dockerfile  -t  镜像名字(给镜像起一个名字):v1.1.1 .     

后面这个点.  是打包镜像(这行命令最后有一个‘空格 点’不能忽略)

需要注意的是,在 docker build 命令接收的参数中,提供给 docker build 命令的 -f 选项应该 Dockerfile 路径名。如果 Dockerfile 文件就叫 Dockerfile 那么文件名可省略,如果 Dockerfile 文件就在当前目录下,那么 -f 选项可省略。

docker build -f ./Dockerfile -t xxx .
# 等同于
docker build -f . -t xxx .
# 等同于
docker build -t xxx .

如果你的 Dockerfile 在别处,而且还不叫 Dockerfile 那么你的 docker build 命令就应该形如如下形式:

docker build -f /xxx/yyy/zzz -t xxx .

在上面的例子中,你的 Dockerfile 在 /xxx/yyy 下,名为 zzz


http://www.ppmy.cn/news/1444644.html

相关文章

【Python】使用Python连接ClickHouse进行批量数据写入

有许多时候 眼泪就要流 那扇窗是让我 坚强的理由 小小的门口 还有她的温柔 给我温暖陪伴我左右 曾经的乡音 悄悄地隐藏 说不出的诺言 一直放心上 🎵 李健《异乡人》 在本教程中,我们将探讨如何使用Python连接到ClickHouse数据库&am…

【树莓派学习】开发环境配置

【树莓派学习】开发环境配置 ​ Raspberry Pi OS作为基于Linux的系统,其默认网络配置在国内的网络环境下容易出现访问慢甚至无法连接等问题,不便于我们的学习,同时,树莓派上C/C的使用需要单独安装WiringPi。本文主要介绍如何更改…

SpringCloud系列(10)--Eureka集群原理及搭建

前言:当注册中心只有一个,而且当这个注册中心宕机了,就会导致整个服务环境不可用,所以我们需要搭建Eureka注册中心集群来实现负载均衡故障容错 Eureka架构原理图 1、Eureka集群原理 2、创建Eureka Server端服务注册中心模块 (1)在…

这是一条经验博客,记录每天不一样的感悟(1)

2024/4/29 最近在写专利,一开始老是进入不了状态,脑子一团浆糊,实在不知从何写起;先看了俩视频,感觉就是先看视频其实效率也挺低的,之后选择了先写着,上一周前几天完全是低效,但是在…

半导体晶圆厂内外网数据单向导出,什么样的方案才安全又便捷?

半导体晶圆厂企业为了隔绝外部⽹络有害攻击、保护⽹络和数据安全,通常采⽤物理隔离的⽅式,将企业内⽹与互联⽹隔离。⽹络隔离后,基于业务开展需求,部分重要数据仍需由内⽹导⼊及导出⾄外部⽹络区域。为保障数据的安全合规性&#…

数字资产与数据资产

数字资产与数据资产的区别 在当今的数字时代,数字资产和数据资产是两个经常被提及的概念。虽然它们都与数字领域有关,但它们有着明显的区别。 数字资产是指以数字形式存在的、具有一定价值的资产。这些资产可以是数字货币、数字版权、数字艺术品、虚拟…

面试题:@Controller、@Service、@Component有什么用?可以互换使用吗?

我的回答 Ctronller 一般约定Controller是用于控制层,用来声明接口。 Service Service是用来注解在业务层上。 Component 一般我们自己定义的类,没有明确属于哪一层,就可以使用Component注解,比如 这样代码架构更容易维护&…

uniapp自定义顶部导航栏

首先uniapp获取设备信息:uni.getSystemInfo或uni.getSystemInfoSync,可用于设置顶部安全区 留一个设备安全区的位置哦 然后在pages.json文件里配置自定义导航栏 {"pages": [ //pages数组中第一项表示应用启动页,参考&#xff1a…