论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
SQL-Server
›
【docker】docker build上下文
【docker】docker build上下文
金歌
论坛元老
|
2024-12-1 15:20:27
|
显示全部楼层
|
阅读模式
楼主
主题
1057
|
帖子
1057
|
积分
3171
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
什么是 Docker Build 上下文?
在 Docker 中,
构建上下文(Build Context)
是指在执行 docker build 命令时,Docker 会发送给 Docker 引擎的所有文件和目次的集合。构建上下文包含了 Dockerfile 和用于构建镜像的所有文件、资源以及相关的配置。通过上下文,Dockerfile 中的指令可以或许访问并操纵这些文件,以构建镜像。
简朴来说,
Docker build 上下文
就是构建镜像时,Docker 引擎用来天生镜像的所有文件和目次的集合。
如何指定构建上下文?
构建上下文是通过 docker build 命令中的路径参数指定的。通常,路径参数是你本地的一个文件夹,它将作为构建上下文的根目次。Docker 将会发送该路径下的所有文件到 Docker 引擎。
docker build -t <image-name> <context-path>
复制代码
<context-path> 是你希望作为构建上下文的文件夹路径。可以是一个本地目次或一个 Git 仓库的 URL。
<image-name> 是你想要构建的镜像名称。
示例:
docker build -t myapp:latest .
复制代码
在上面的例子中,. 体现当前目次作为构建上下文。当前目次下的所有文件将会被 Docker 引擎发送给构建过程。
Docker Build 上下文的结构
Docker 构建上下文包含以下部分:
Dockerfile
:这个文件界说了镜像构建的步骤,通常是上下文目次中的一个文件。
其他文件和目次
:除了 Dockerfile,本地上下文目次中的所有文件(例如代码、配置文件、脚本、数据等)都会被发送给 Docker 引擎。 Dockerfile 中的 COPY 和 ADD 指令会用到这些文件。
示例:
假设我们有如下的文件结构:
myapp/
│
├── Dockerfile
├── app/
│ ├── main.py
│ └── requirements.txt
└── config/
└── config.json
复制代码
如果在 myapp 目次下执行 docker build -t myapp .,那么 Docker 会将整个 myapp 目次(包括 Dockerfile、app、config 等文件)作为上下文发送给 Docker 引擎。
构建上下文的工作流程
选择上下文路径
:首先,执行 docker build 命令时,Docker 会确定构建上下文的路径。
将上下文发送给 Docker 引擎
:Docker 会将整个构建上下文目次(包括所有文件和子目次)发送到 Docker 引擎。
执行 Dockerfile 指令
:Docker 引擎会根据 Dockerfile 中的指令进行镜像构建,涉及到的文件(如 COPY、ADD)会从上下文中获取。
天生镜像
:Docker 会根据 Dockerfile 的界说,逐步构建镜像,最后输出一个可以运行的镜像。
构建上下文的巨细和性能
由于 Docker 会将整个构建上下文发送给 Docker 引擎,因此
上下文的巨细会影响构建的性能
。如果上下文中包含了很多不必要的文件(比如大文件、日志文件等),它们将被发送到 Docker 引擎并参与构建过程,从而影响构建速度,以致导致不必要的错误。
影响构建上下文的因素:
不必要的大文件
:如果上下文包含了不必要的大文件(例如 node_modules 或 log 文件夹),这些文件会被发送给 Docker,引擎会浪费时间处理它们。
.dockerignore 文件
:为了避免将不需要的文件添加到上下文中,我们可以使用 .dockerignore 文件来清除某些文件或文件夹。这将有助于镌汰构建上下文的巨细,进步构建服从。
示例 .dockerignore 文件:
node_modules/
*.log
.git/
复制代码
在这个 .dockerignore 文件中,我们清除了 node_modules/ 文件夹、所有 .log 文件以及 .git/ 目次,这样它们就不会被发送到 Docker 引擎。
使用 Git 仓库作为构建上下文
Docker 还支持使用 Git 仓库作为构建上下文。在这种情况下,Docker 会直接从 Git 仓库拉取文件作为上下文,而不需要本地文件夹。
docker build -t myapp https://github.com/myusername/myapp.git
复制代码
在这种情况下,Docker 会从指定的 Git 仓库拉取文件,并使用该仓库的内容作为构建上下文。
上下文与 Dockerfile 的位置关系
Dockerfile 通常位于构建上下文目次的根目次,也可以指定 Dockerfile 的位置。如果 Dockerfile 不在构建上下文的根目次,可以通过 -f 参数指定 Dockerfile 的路径。
docker build -f ./path/to/Dockerfile -t myapp .
复制代码
在这种情况下,-f 后面指定的路径是 Dockerfile 的位置,构建上下文仍旧是当前目次(.)。
如何优化 Docker Build 上下文
为了优化构建性能和镌汰不必要的资源斲丧,可以考虑以下计谋:
使用 .dockerignore
:清除不需要的文件和目次。
拆分构建过程
:将构建过程拆分成多个阶段,镌汰每个阶段的上下文巨细。
最小化上下文文件
:只将构建所需的最小文件集发送给 Docker 引擎。例如,在多阶段构建中,可以通过将构建依赖和运行时依赖分开来镌汰最终镜像的巨细。
优化后的文件结构:
myapp/
├── Dockerfile
├── src/
│ ├── main.py
│ └── requirements.txt
└── .dockerignore
复制代码
.dockerignore 文件:
tests/
logs/
复制代码
通过这种方式,我们将不必要的 tests/ 和 logs/ 文件从构建上下文中清除。
总结
Docker build 上下文是构建 Docker 镜像时传递给 Docker 引擎的所有文件和目次的集合。上下文包括 Dockerfile 和它所需要的所有资源文件。公道管理构建上下文,可以进步构建服从,避免无用文件的传输,同时确保镜像构建过程的顺利进行。使用 .dockerignore 文件可以有用镌汰上下文的巨细,优化构建性能。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
金歌
论坛元老
这个人很懒什么都没写!
楼主热帖
iOS 集成WebRTC相关知识点总结 ...
SQL Server 2014完全卸载与SQL Server ...
iOS直播/游戏怎么利用特殊音效制造娱乐 ...
查漏补缺——路由显示的是http://local ...
贩卖和售前,如何与**商一起“玩耍”? ...
【docker专栏6】详解docker容器状态转 ...
.NET ORM框架HiSql实战-第一章-集成HiS ...
一个工作薄中快速新建多个数据表 ...
缓存穿透,缓存雪崩,缓存击穿 ...
京准电钟:NTP网络时间服务器助力精准 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
.Net
Java
移动端开发
DevOps与敏捷开发
网络安全
Mysql
云原生
前端开发
Oracle
程序人生
快速回复
返回顶部
返回列表