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.4sCACHED [1/2] FROM docker.io/library/alpine:3.2@sha256:e9a2035f9d0d7ce  0.0sCACHED [2/2] RUN apk add --no-cache socat                              0.0sexporting 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/

Docker(45)- docker build 命令详解相关推荐

  1. Docker - Docker Container及Container命令详解

    Docker - Docker Container及Container命令详解 什么是Docker容器(Docker Container) 上一篇博客介绍了Docker镜像(Docker Image) ...

  2. Docker - Docker Volume及Volume命令详解

    Docker - Docker Volume及Volume命令详解 什么是数据卷(Volume) Docker镜像被存储在一系列的只读层中.当我们创建一个容器时,Docker会读取镜像(只读),并在其 ...

  3. docker build命令详解_Docker镜像与容器常用命令图文详解

    一.系统命令 #查看docker版本 docker version #查看docker的系统信息,包含镜像容器的数量 docker info #查看docker的所有命令 docker --help ...

  4. docker build命令详解_Docker 搭建你的第一个 Node 项目到服务器

    本文你能学到什么 Docker 是什么 Docker 概念 关于 Docker 的概念是确实不太好总结,下面我通过四点向你说明 Docker 到底是个什么东西. Docker 是世界领先的软件容器平台 ...

  5. docker build命令详解_『中级篇』docker之java容器运行外置springboot-jar(番外篇)(79)...

    学了docker这么久终于开始实战了,所有部署方式全部使用docker的方式感觉特别爽,我这里分享下,我部署springboot的富jar包. 下载java的镜像 docker pull java:o ...

  6. docker build命令详解

    docker build命令用于根据给定的Dockerfile和上下文以构建Docker镜像. docker build命令的使用格式: docker build [OPTIONS] <PATH ...

  7. Docker(三):Dockerfile 命令详解

    上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dockerfile 的使用,这篇文章我们来继续了解 Dockerfile ,学习 Dockerfile 各种命令的使用. Dock ...

  8. go build命令详解

    go help build 构建编译由导入路径命名的包,以及它们的依赖关系,但它不会安装结果. 使用 go build [-o 输出名] [-i] [编译标记] [包名] 如果参数为***.go文件或 ...

  9. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

最新文章

  1. mysql实时读写_[DataBase] MySql 查看实时日志
  2. iOS - 让view触发点击事件
  3. Veritas Storage Foundation 5.0 HA for Windows
  4. java retry(重试) spring retry, guava retrying 详解
  5. 如何通过PHP将excel的数据导入MySQL中
  6. UE3 使用光源函数
  7. 实验一 分治与递归—全排列 java算法
  8. 黑鲨4S系列正式发布全系2699元起并推出自由高达联名套装
  9. resultset不支持循环遍历_二叉树的各种遍历方法的简单解释
  10. python【字符串】【转义符】【下标】【切片】【遍历】
  11. python如何打开txt文件、并算词频_Python 合并多个TXT文件并统计词频的实现
  12. Arturia Analog Lab V for Mac - 超强键盘模拟合成器
  13. 互联网产品需求管理思考——统一需求管理
  14. 如何覆盖上一次commit_如何在 Linux 上一次性批量重命名一组文件?
  15. 百度指数查关键词(惊到我啦)
  16. 2022短视频去水印小程序带流量主/CPS/资源/工具/批量解析/修改MD5
  17. html代码大全字号,网页设计HTML代码大全
  18. 原版黑苹果安装教程(Clover引导)
  19. Windows10配置和挂载联想DE2000H存储服务器
  20. 第十二周项目四----利用遍历思想求解图问题之输出简单路径

热门文章

  1. pwd命令——查看当前工作目录
  2. oracle cmd导出数据库命令行,oracle 中数据库完全导入导出:cmd命令行模式(转载)...
  3. Clustered聚集 Unclustered非聚集索引
  4. 我是谁?|一名双非、大龄青年的转行之路
  5. 前端开发面试题—JavaScript原型链
  6. 压缩算法:字符串(JSON)压缩和解压【JDK之Deflater压缩与Inflater解压】
  7. php http长轮询,http长轮询短轮询
  8. oracle创建record,oracle record | 学步园
  9. Linux下用C语言做小老鼠推箱子的游戏
  10. putty窗口标题修改、字体颜色修改等简单配置以及putty多开工具mtputty的使用