Docker - docker build 命令详解

2023-05-16

docker build 命令原理

  • docker build 命令从 Dockerfile 和上下文构建镜像
  • 构建的上下文:位于指定 PATH 或 URL 中的一组文件
  • 构建过程可以引用上下文中的任何文件,例如,构建可以使用 COPY 指令来引用上下文中的文件
  • PATH:就是本地文件系统上的一个目录路径
  • URL:Git 地址

个人理解:以设置的上下文为根目录,在 dockerfile 中写的文件路径都会以这个上下文开始找

构建上下文是递归处理的

PATH 包含任何子目录,URL 包含 repository 及其子模块

简单的例子

上下文为当前目录

也是最简单的 docker build 使用方式

docker build .
  • 指定 PATH 为 . ,因此本地目录中的所有文件都会被延迟并发送到 Docker 守护程序
  • PATH 指定在哪里可以找到 Docker 守护程序上构建的“上下文”的文件
  • 请记住,守护进程可以在远程机器上运行,并且不会在客户端(运行 docker build 的地方)解析 Dockerfile
  • 这意味着 PATH 中的所有文件都会被发送,而不仅仅是 Dockerfile 中列出的 ADD 文件
  • 当看到 Sending build context 消息时,docker 客户端的意思是将上下文从本地机器传输到 Docker 守护进程。

构建由 Docker 守护程序(Daemon)运行

  • 而不是 CLI(命令行)运行
  • 构建过程做的第一件事是将整个上下文(递归)发送到守护进程
  • 官方建议:将一个空目录作为上下文起点,并将 Dockerfile 保存在该目录中,仅添加构建 Dockerfile 所需的文件

特别注意

不要使用根目录 / 作为构建上下文的 PATH,因为会导致构建时,将硬盘驱动器的全部内容发送到 Docker 守护程序

逐一运行

  • Docker 守护进程将逐一运行 Dockerfile 中的指令,如有必要,会将每条指令的结果提交到新镜像,最后会输出一个最新镜像的 ID
  • Docker 守护进程将自动清理发送的上下文
  • 重点:每条指令都是独立运行的,并会创建一个新镜像,因此像 RUN cd /tmp 不会对下一条自定产生任何影响
  • 只要有可能,Docker 就会使用构建缓存来加速 Docker 构建过程,这由控制台输出中的 CACHED 消息指示
 > docker build -t svendowideit/ambassador .
 [internal] load build definition from Dockerfile                       0.1s
 => transferring dockerfile: 286B                                       0.0s
 [internal] load .dockerignore                                          0.1s
 => transferring context: 2B                                            0.0s
 [internal] load metadata for docker.io/library/alpine:3.2              0.4s
 CACHED [1/2] FROM docker.io/library/alpine:3.2@sha256:e9a2035f9d0d7ce  0.0s
 CACHED [2/2] RUN apk add --no-cache socat                              0.0s
 exporting to image                                                     0.0s
 => exporting layers                                                    0.0s
 => writing image sha256:1affb80ca37018ac12067fa2af38cc5bcc2a8f09963de  0.0s
 => naming to docker.io/svendowideit/ambassador                         0.0s

命令行参数

-f,–file

指定 dockerfile 路径

docker build -f /path/to/a/Dockerfile .

不指定的话,默认会读取上下文路径( . )下的 dockerfile

-t,–tag

指定构建的镜像名和 tag

docker build -t ubuntu-nginx:v1 . 

构建的镜像指定多个 tag

docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest .

–add-host

可以使用一个或多个 --add-host 标志将其他主机添加到容器的 /etc/hosts 文件中

docker build --add-host=docker:10.180.0.1 .

–no-cache

构建镜像时不使用缓存

–network

在构建过程中为 RUN 指令设置网络模式

更多参数可以看官方文档
https://docs.docker.com/engine/reference/commandline/build/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker - docker build 命令详解 的相关文章

  • linux tftp服务器搭建与测试

    1 安装tftp服务器 sudo apt get install tftp hpa tftpd hpa tftp hpa是客户端 tftpd hpa是服务器端 2 配置tftp服务器 sudo vim etc default tftpd h
  • FreeRTOS基础知识

    FreeRTOS任务特性 xff1a 简单 xff1b 没有使用限制 xff1b 支持抢占 xff1b 支持优先级 xff1b 每个任务都有堆栈 xff0c 但也导致了RAM使用量增大 xff1b 如果使用强化在哪的话必须仔细考虑重入的问题
  • makeinfo 安装

    环境 ubuntu sudo apt get install texinfo 就OK 今天在打包的时候有个包需要 makeinfo 当时就各种搜结果就没有 makeinfo 这个软件包 xff0c 最后看到有人说其实就是 texinfo 这
  • 通过MCU实现Altera FPGA在线升级

    一 xff0e 问题背景 在实际工程应用中 xff0c 我们时常会遇到为解决某个老产品的BUG xff0c 需要在工程现场更新设备的FPGA代码 xff0c 或者参加电信测试时需要现场升级设备FPGA程序以便于调试 公司现阶段所用的Alte
  • ubuntu linux zip和unzip类命令详解

    微信搜索关注公众号 郑州行疆户外 了解软件工程师的业余户外生活 1 zip zip r myfile zip 将当前目录下的所有文件和文件夹全部压缩成myfile zip文件 xff0d r表示递归压缩子目录下所有文件 2 unzip un
  • ubuntu运行sh脚本sudo自动输入密码

    微信搜索关注公众号 郑州行疆户外 了解软件工程师的业余户外生活 示例 xff1a sudo apt get update 第一种方法 xff1a 使用管道 xff08 上一个命令的 stdout 接到下一个命令的 stdin xff09 b
  • 基本命令+环境变量+正则表达式 --- shell脚本编程教程之一

    vim 单纯的使用vi查看文件 shell 编程常见的命令 xff1a alias 别名 给一长命令起别名 例如 xff1a alias myssh 61 34 ssh root 64 192 168 1 158 34 myssh 相当于
  • 基本的shell编程格式+简单的脚本实例 --- shell脚本编程教程之二

    温习shell编程基础的要点 xff1a 正则表达式的要点 xff1a 39 39 a 39 39 a 61 61 a aa aaa 39 43 39 grep E 39 a 43 39 61 61 grep 39 a 43 39 39 3
  • shell if条件分支编程 --- shell脚本编程教程之三

    数学运算 xff1a vim math sh a 61 1 b 61 2 c 61 a 43 2 或者 c 61 a 43 b echo c 条件判断 xff1a 格式1 if 条件 then 条件为真执行的任务 fi 格式2 fi 条件
  • VIM 常用快捷键

    转载 xff1a https www cnblogs com markleaf p 7808817 html 一 移动光标 h j k l 上 xff0c 下 xff0c 左 xff0c 右 ctrl e 移动页面 ctrl f 上翻一页
  • Qt5 对xml文件常用的操作(读写,增删改查)

    微信搜索关注公众号 郑州行疆户外 了解软件工程师的业余户外生活 项目配置 pro文件里面添加QT 43 61 xml include lt QtXml gt xff0c 也可以include lt QDomDocument gt 项目文件
  • Shell分支语句case···esac语法

    Shell编程 xff1a case esac多分支选择编程 也多常用于菜单选择 语法 xff1a case 值 in 模式1 command1 command2 command3 模式2 xff09 command1 command2 c
  • Ubuntu使用iptables配置防火墙提示:unrecognized service(Ubuntu配置iptables防火墙)

    Ubuntu默认安装是没有开启任何防火墙的 当使用service iptables status时发现提示iptables unrecoginzed service 意思是无法识别的服务 以下方法来自http blog csdn net l
  • CMake使用问题汇总

    cmake 指定编译类型 主要用在vs这种支持多配置的集成开发环境中 xff0c 可以在CMakeLists txt中指定 xff0c 也可以在CLI中指定 测试的时候发现在CMakeLists txt定义时不能使用自定义类型 xff0c
  • Shell编程,shift参数操作

    shift参数操作 xff0c 是将参数从左到右逐个移动 比如 xff1a 现在有 1 2 3 4 5 几个参数 shift操作后 xff0c 1被处理过之后 xff0c 2变为 1 3变为 2 4变为 3 5变为 4 就这样依次变动 sh
  • Java入门总览

    Java入门总览 1 JDK的安装 可以去官网下载 xff0c 有各种平台和各种版本的软件 目前常用的 xff0c 网上介绍多的大都是jdk1 8 0 211此版本 Linux系统和Windows系统安装起来都很方便 2 环境变量的配置 配
  • 示例:Linux应用程序遍历当前系统的PCI设备

    使用应用程序遍历设备上的所有PCI设备 xff0c 通过遍历这些设备 xff0c 可以获取到每个设备对应的bus号 xff0c dev号 xff0c func号 xff0c 以及每个PCI设备的额vendorID和deviceID 示例程序
  • 示例:Linux设备属性节点驱动,以及cat, echo操作

    在写Linux字符驱动的时候 xff0c 经常涉及到一些驱动需要在 sys目录或子目录下创建 xff0c 一个属性节点 xff0c 以便与 xff0c 不用查看驱动的版本信息 xff0c 时间等等一些属性信息 xff0c 以判断驱动程序加载
  • 一个双非学校的本科生的春招经历

    截止到目前各大公司的校招也已经基本进入尾声 xff0c 在这场春招中我也试着投递了几家公司 xff0c 但是效果不是太好 先说我投递的第一家 腾讯 xff0c 参加腾讯的笔试之前根本没有参加过任何相关的公司招聘的线上笔试 xff0c 这是我
  • C++多态的实例

    1 1 多态的概念 简单理解 xff1a 同一个接口 xff0c 多种实现方式 xff0c 让不同类的的对象对同一件事情可以采用不同方法去做 1 2 多态的作用 xff08 1 xff09 应用程序可以不必为一个派生类编写功能调用 xff0

随机推荐

  • Linux下的多进程编程——fork(),exec()等函数的使用

    Linux下的多进程编程初步 1 引言 对于没有接触过Unix Linux操作系统的人来说 xff0c fork是最难理解的概念之一 xff1a 它执行一次却返回两个值 fork函数是Unix系统最杰出的成就 之一 xff0c 它是七十年代
  • APM学习--Skywalking安装(5.0.0版本)

    Requirements JDK 6 43 xff08 instruments application can run in jdk6 xff09 JDK8 SkyWalking collector and SkyWalking WebUI
  • FreeRTOS消息队列

    FreeRTOS消息队列 队列又称消息队列 xff0c 是一种常用于任务间通信的数据结构 xff0c 队列可以在任务与任务间 中断和任务间传递信息 xff0c 实现了任务接收来自其他任务或中断的不固定长度的消息 xff0c 任务能够从队列里
  • 嵌入式前景怎么样

    现在物联网的发展也把之前大家没有注意过的嵌入式给带动起来了 xff0c 其实想去学习嵌入式的人还真不少 xff0c 不过这其中也会有人担心自己的发展前景 xff0c 下面可以一起先来了解下嵌入式前景怎么样 目前 xff0c 嵌入式开发人才需
  • datax同步数据:数据源:mongo,目标源:hdfs

    一 配置文件mongo hdfs json 34 job 34 34 setting 34 34 speed 34 34 channel 34 2 34 content 34 34 reader 34 34 name 34 34 mongo
  • 做程序媛这几年,感受?体验?

    首先 感受 和男程序员一个样 真不是废话 BUG是修不完的 但是不能放过它 因为你的内心会遭受煎熬 直接进入体验 就不用重复的文字去啰嗦了 直接上图哈 以下的这几种情况 在我的生活中 是真的不断出现 连样式都没变过 first 修电脑AND
  • 天猫精灵与oauth的认证接入流程(AliGenie智能家居接入流程)

    写在前面的叨叨 xff1a 对于天猫精灵的对接网上的教程也是颇少的 xff0c 所以希望我的记录过程也能对他人学习有所帮助 xff0c 要想学一样新的技术必须得找到相关技术文章好好专研了 xff0c 在学习的路上孜孜不倦 xff0c 偶遇难
  • 致敬2016年我的每一次选择。

    2016年 对我来说 是不平凡的 不是因为经历了什么永生难忘的经历也不是因为我做了什么伟大的事情 只是因为毕业了 我毕业了 多么开心却又悲伤的故事 我开心在我终于可以做自己想做的事情 悲伤的是当同学们的父母都陆续为他们铺好以后的路的时候 我
  • 打开计算机的管理需要在控制面板中创建关联

    今天在工作中发现当我选择计算机 管理时提示我需要在控制面板中创建关联 xff0c 如下图所示 xff1a 于是 xff0c 我便上百度搜索了一下 xff0c 答案是这样的 xff1a 修改 span style font family no
  • ftp身份认证时登录框反复弹出以及ftp常用配置

    1 若我们想访问一个人的ftp站点 xff0c 直接通过浏览器直接访问就可以了 xff08 ftp 要访问主机A的IP地址 xff09 如果对方开启了基本身份认证的话 xff0c 我们就需要输入正确的用户名及密码才可正常访问 xff0c 即
  • Linux下挂载U盘、ISO、光盘、rpm

    1 挂载U盘 1 xff09 将U盘连接到虚拟机后 xff0c 使用fdisk l xff08 注意 xff0c 这是list单词的首字母l xff09 命令查看当前U盘的设备符号 2 xff09 创建目录 mnt usb xff0c 以备
  • unity 3D学习日记:创建一个小场景并编写简单C#移动脚本

    学习Unity 3D第一周 xff0c 完成的目标一是创建一个小场景 xff0c 用角色控制器在场景里行走 xff1b 二是编写一个简单的移动脚本 一 创建一个小场景 xff0c 用角色控制器在场景里行走 1 先安装Unity 3D 5 3
  • 基于Unity3D平台的三维虚拟城市研究与应用

    0 引 言 随着现代城市的不断拓展延伸 城市空间多层次 立体模式管理逐渐成为城市规划管理的发展趋势 1 实现城市空间信息管理模式从二维到三维的转变 三维虚拟城市技术 已经成为人们关注和研究的热点 2 三维虚拟系统具有多维信息处理 表达和分析
  • unity:C#控制人在真实环境中行走

    自己在学习unity的课程中遇到了 xff0c 有的地方还没怎么太理解上去 xff0c 先做个笔记 xff0c 顺便看看有没有需要的人 1 搭建一个小场景 xff0c 一个需要控制的 人 xff08 添加CharacterControlle
  • unity 3D:自动寻路

    首先 xff0c 搭建一下场景 xff0c 场景要求 xff1a 有遮挡 xff0c 设置好不可走区域为navigation static 以及 not walkable 在人身上添加Nav Mesh Agent 设置好后勾选显示导航网格
  • 数据结构 ——c++实现(知识点集合)

    数据结构 c 43 43 实现 xff08 知识点集合 xff09 某不知名学狗的复习记录 xff0c 包含数据结构基本概念 xff0c 线性表 xff0c 栈 队列 递归 xff0c 串 数组 广义表和树和森林内容整理 主要整理了知识点
  • Unity3D 使用SceneManager跳转/加载场景

    很久没有更新博客了 xff0c 最近也是还在学习U3D 下面写一下使用SceneManager跳转 加载场景 我们假设要点击一个按钮跳转 xff0c 那么我们只要把跳转的代码写进按钮点击事件里就好了 其实加载场景很简单 xff0c 只需要写
  • [OpenCV] aruco Markers识别 小车巡线

    小车巡线代码 include lt ros ros h gt include lt sensor msgs Image h gt include lt geometry msgs Twist h gt include lt cv bridg
  • 备份ubuntu

    在使用Ubuntu之前 xff0c 相信很多人都有过使用Windows系统的经历 如果你备份过Windows系统 xff0c 那么你一定记忆犹新 xff1a 首先需要找到一个备份工 具 通常都是私有软件 xff0c 然后重启电脑进入备份工具
  • Docker - docker build 命令详解

    docker build 命令原理 docker build 命令从 Dockerfile 和上下文构建镜像构建的上下文 xff1a 位于指定 PATH 或 URL 中的一组文件构建过程可以引用上下文中的任何文件 xff0c 例如 xff0