Docker(45)- docker build 命令详解

简介: Docker(45)- docker build 命令详解

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/

相关文章
|
3月前
|
存储 Java Linux
【Docker】(2)还在浏览网页寻找Docker命令?本文全面列举与使用Docker里的各个命令!想要什么命令直接从本文拿!
docker有着比VM更少的抽象层 由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源 因此在CPU、内存利用率上Docker将会在效率上有明显优势 docker利用的时宿主机的内核,而不需要加载操作系统OS内核 当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统内核 进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程时分钟级别的。 而Docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个Docker容器只需
443 124
|
6月前
|
安全 Unix Linux
Docker中授权普通用户使用docker命令以及解决无权限访问/var/run/docker.sock错误。
通过上述步骤,可以有效解决普通用户无法使用Docker命令的问题,同时处理 `/var/run/docker.sock`权限错误。这样的设置不仅方便用户使用Docker提供的各项服务,同时还能保护系统的安全性。在进行此类配置更改时,请确保理解每一步骤的作用及潜在的安全风险,尤其是在修改文件权限时。在实际的操作中,始终应该努力保持系统的最低必要权限,避免过度放宽权限,这是保障系统安全的一个重要方针。
2102 75
|
7月前
|
Docker 容器
Docker run命令-p参数详解
本文介绍Docker端口映射的基础用法。通过`docker run -p <宿主机端口>:<容器端口>`实现端口映射,例如`-p 5000:80`将宿主机5000端口映射到容器80端口,外部访问宿主机5000端口时流量会转发至容器内部的80端口。示例命令中,`-d`用于后台运行,`--restart=always`确保容器自动重启,`--name`指定容器名称。部署完成后可通过`http://服务器IP地址:5000`验证服务是否正常运行。
1043 57
|
8月前
|
网络协议 Ubuntu Docker
Docker Compose--命令说明
Docker Compose--命令说明
1522 30
|
6月前
|
Docker 容器
熟悉Docker容器管理命令:start、stop与restart详细使用指南
掌握这些Docker容器管理命令对于维护应用程序的正常运行至关重要。在实际操作中,应注意容器配置、关联资源以及日志等信息,确保各项操作都能够顺畅并且安全地执行。
1071 0
|
8月前
|
Ubuntu Linux 开发者
常用的Docker命令:docker_cmd_sheet
以上就是一些常用的Docker命令,希望能帮助你更好地驾驭这个强大的工具。记住,Docker就像是一个魔法咒语,只有真正理解和熟练使用,才能发挥出它的最大魔力。
193 22
|
8月前
|
Shell 应用服务中间件 nginx
docker 镜像的部分常用命令
docker镜像常用命令
271 16
|
8月前
|
关系型数据库 MySQL Docker
|
8月前
|
关系型数据库 MySQL 数据库
Docker 安装常用软件相关命令
本文介绍了在CentOS 7.9系统上安装Docker的详细步骤,包括添加阿里云镜像源、安装Docker及相关组件、启动服务以及配置镜像加速。同时,还展示了如何通过Docker安装MySQL 5.7版本数据库,涵盖拉取镜像、创建数据目录、运行容器及配置挂载点等操作,并提供验证安装成功的命令和截图。适合需要部署Docker与MySQL环境的用户参考。
464 5
|
9月前
|
NoSQL 应用服务中间件 Redis
Docker 常用命令整理
Docker 常用命令整理
285 1

热门文章

最新文章