.dockerignore 文件从入门到实践
.dockerignore 文件从入门到实践
简介
.dockerignore
文件的作用类似于 git 工程中的 .gitignore
。不同的是 .dockerignore
应用于 docker 镜像的构建,它存在于 docker 构建上下文的根目录,用来排除不需要上传到 docker 服务端的文件或目录。
docker 在构建镜像时首先从构建上下文找有没有 .dockerignore
文件,如果有的话则在上传上下文到 docker 服务端时忽略掉 .dockerignore
里面的文件列表。这么做显然带来的好处是:
- 构建镜像时能避免不需要的大文件上传到服务端,从而拖慢构建的速度、网络带宽的消耗;
- 可以避免构建镜像时将一些敏感文件及其他不需要的文件打包到镜像中,从而提高镜像的安全性;
.dockerignore 文件编写方法
.dockerignore
文件的写法和 .gitignore
类似,支持正则和通配符,具体规则如下:
- 每行为一个条目;
- 以
#
开头的行为注释; - 空行被忽略;
- 构建上下文路径为所有文件的根路径;
文件匹配规则具体语法如下:
规则 | 行为 |
---|---|
*/temp* | 匹配根路径下一级目录下所有以 temp 开头的文件或目录 |
*/*/temp* | 匹配根路径下两级目录下所有以 temp 开头的文件或目录 |
temp? | 匹配根路径下以 temp 开头,任意一个字符结尾的文件或目录 |
**/*.go |
匹配所有路径下以 .go 结尾的文件或目录,即递归搜索所有路径
|
*.md !README.md |
匹配根路径下所有以 .md 结尾的文件或目录,但 README.md 除外
|
⚠️注意事项:
如果两个匹配语法规则有包含或者重叠关系,那么以后面的匹配规则为准,比如:
*.md
!README*.md
README-secret.md
这么写的意思是将根路径下所有以 .md
结尾的文件排除,以 README
开头 .md
结尾的文件保留,但是 README-secret.md
文件排除。
再来看看下面这种写法(同上面那种写法只是对换了后面两行的位置):
*.md
README-secret.md
!README*.md
这么写的意思是将根路径下所有以 .md
结尾和名称为 README-secret.md
的文件排除,但所有以 README
开头 .md
结尾的文件保留。这样的话 README-secret.md
依旧会被保留,并不会被排除,因为 README-secret.md
符合 !README*.md
规则。
使用案例
前段时间帮前端同学写了一个 Dockerfile,Dockerfile 放在 git 仓库根路径下,发现 git 工程中有很多真正应用跑起来用不到的文件,如果直接在 Dockerfile 中使用 COPY
或 ADD
指令拷贝文件,那么很显然会把很多不需要的文件拷贝到镜像中,从而会拖慢构建镜像的过程,产生的镜像也比较臃肿。解决方法就是编写 .dockerignore
文件,忽略掉不需要的文件,然后放到 docker 构建上下文的根路径下。.dockerignore
及 Dockerfile
文件内容如下:
.dockerignore:
.git
_mockData
deleted
email-templates
script
static
Dockerfile:
FROM node:8-alpineCOPY . /app/node
WORKDIR /app/node
RUN yarn installEXPOSE 8026CMD ["yarn", "run", "tool-dev"]
使用 .dockerignore
前后上传到 docker 服务端的构建上下文大小对比:
使用前(73.36MB
):
[vagrant@docker]$ docker build -t tool:5.0 -f Dockerfile-frontend-tool .
Sending build context to Docker daemon 73.36MB
Step 1/6 : FROM node:8-alpine
使用后(11.38MB
):
[vagrant@docker]$ docker build -t tool:6.0 -f Dockerfile-frontend-tool .
Sending build context to Docker daemon 11.38MB
Step 1/6 : FROM node:8-alpine
参考资料
https://docs.docker.com/engine/reference/builder/#dockerignore-file
.dockerignore 文件从入门到实践相关推荐
- Python编程从入门到实践 第十章:文件和异常 练习答案记录
Python编程从入门到实践 第十章:文件和异常 练习答案记录 练习题导航 Python编程从入门到实践 第十章:文件和异常 练习答案记录 10.1 从文件中读取数据 10.1.1 读取整个文件 10 ...
- 【Docker技术入门与实践(第2版)】Docker入门_学习笔记
第一章 1 Docker入门须知 1.1 Docker基本知识 Docker是基于Go语言实现的开源容器项目,诞生于2013年年初,最初发 起者是dotCloud公司.Docker自开源后受到广泛的关 ...
- python快速编程入门课后简答题答案-Python编程:从入门到实践(第2版)第1章习题答案...
<Python编程:从入门到实践>是一本不错的书.第2版已经公开预售,预计会在10月份正式上市. 动手试一试 本章的练习都是探索性的,但从第2章开始将要求你用那一章学到的知识来解决问题. ...
- python如何导入txt数据集-终于找到python入门到实践数据集
Python是一款功能强大的脚本语言,具有丰富和强大的库,重要的是,它还具有很强的可读性,易用易学,非常适合编程初学者入门.以下是小编为你整理的python入门到实践数据集 环境配置:下载Python ...
- python小项目实例流程-《Python编程:从入门到实践》DEMO实例代码
这篇文章主要知识点是关于Python编程,从入门到实践,DEMO,,的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书 前言 之前,项目后台基本都是使用 Java 的 SpringBo ...
- python网络爬虫教程-终于明了python网络爬虫从入门到实践
Python是一款功能强大的脚本语言,具有丰富和强大的库,重要的是,它还具有很强的可读性,易用易学,非常适合编程初学者入门.以下是小编为你整理的python网络爬虫从入门到实践 环境配置:下载Pyth ...
- python编程入门课程视频-带学《Python编程:从入门到实践》
以<Python编程:从入门到实践>为教材,以吕老师+几位同学学习串讲为主线,系统的进行python的入门,并手把手带着大家做课后习题. 教材简介: <python编程从入门到实践& ...
- python编程入门p-读书笔记 - 《Python编程:从入门到实践》
Tag:看<Python编程:从入门到实践>读书笔记 基础知识: 字符串str 改变大小写(临时):title首字母大写,upper全大写,lower全小写 删除空白(临时):rstrip ...
- python起步输入-《Python编程:从入门到实践》第一章:起步
Python编程:从入门到实践 这篇文章主要知识点是关于Python编程,从入门到实践,起步,Python编程:从入门到实践,的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书 搭建编 ...
最新文章
- 如何选择视觉CV光源颜色
- VS编辑器 设置智能提示
- 推荐系统里,可以用蒸馏吗?
- 面试官:请手写一个带取消功能的延迟函数,axios 取消功能的原理是什么
- Android之网络请求通过协程+okhttp的没有做网络异常处理导致程序奔溃问题
- vue如何过滤html标签,去除富文本中的html标签及vue、react、微信小顺序中的过滤器...
- css开头的文本格式,css文件开头怎么写
- CVPR2021 Oral|开放世界中的目标检测
- 数字电视智能卡的定义
- 单片机简易计算机设计实物,单片机设计的带余数的简易计算器
- 从0开始的网游ARPG实战案例:暗黑战神(第五六章:主城角色控制和任务引导系统)
- ZLMediaKit流媒体服务器
- 两台计算机怎么网络连接,两台电脑怎么连接局域网,详细教您两台电脑怎么连接局域网...
- hDC转PostScript转PDF
- mx550和3050参数对比 mx550和rtx3050差多少
- flux 中的 buffer 的原理
- wps表格户主序号_WPS表格怎么设置自动排列序号?
- estore网上书城项目分享
- Wordpress建站流程-最新手把手详细教程
- unity urp内置lit材质源码解析(上)