美文网首页Docker 基础
docker-.dockerignore 文件

docker-.dockerignore 文件

作者: yjtuuige | 来源:发表于2021-07-18 15:51 被阅读0次

概述

  • .dockerignore 文件的作用类似于 git 工程中的 .gitignore 。不同的是 .dockerignore 应用于 docker 镜像的构建,它存在于 docker 构建上下文的根目录,用来排除不需要上传到 docker服务端的文件或目录。

  • docker 在构建镜像时首先从构建上下文找有没有 .dockerignore 文件,如果有的话则在上传上下文到 docker 服务端时忽略掉 .dockerignore 里面的文件列表。

好处是:

  • 构建镜像时能避免不需要的大文件上传到服务端,从而拖慢构建的速度、网络带宽的消耗;
  • 可以避免构建镜像时将一些敏感文件及其他不需要的文件打包到镜像中,从而提高镜像的安全性;

.dockerignore 文件编写方法

  • .dockerignore 文件的写法和 .gitignore 类似,支持正则和通配符,具体规则如下:
    1、每行为一个条目;
    2、空行被忽略;
    3、构建上下文路径为所有文件的根路径;

  • 文件匹配规则具体语法如下:

符号 作用
# 注释
* 匹配0或多个非/的字符
? 匹配1个非/的字符
** 0个或多个目录
! 除...外,需结合上下文语义

示例:

  • 示例 1:
# comment
*/*/temp*
temp?
**/*.md
  • 示例 2:除 README.md 外,所有其他 md 文件都被 docker 忽略
*.md
!README.md

⚠️注意事项:

  • 如果两个匹配语法规则有包含或者重叠关系,那么以后面的匹配规则为准,比如:
# comment
*.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 放在 git 仓库根路径下,但 git 工程中有很多真正应用跑起来用不到的文件,如果直接在 Dockerfile 中使用 COPYADD 指令拷贝文件,那么很显然会把很多不需要的文件拷贝到镜像中,从而会拖慢构建镜像的过程,产生的镜像也比较臃肿。
  • 解决方法就是编写 .dockerignore 文件,忽略掉不需要的文件,然后放到 docker构建上下文的根路径下。
  • .dockerignore:
.git
_mockData
deleted
email-templates
script
static
  • Dockerfile:
FROM node:8-alpine
 
COPY . /app/node
WORKDIR /app/node
RUN yarn install
 
EXPOSE 8026
 
CMD ["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

相关文章

网友评论

    本文标题:docker-.dockerignore 文件

    本文链接:https://www.haomeiwen.com/subject/pxhapltx.html