概述

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

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

好处

构建镜像时能避免不需要的大文件上传到服务端,从而拖慢构建的速度、网络带宽的消耗

可以避免构建镜像时将一些敏感文件及其他不需要的文件打包到镜像中,从而提高镜像的安全性

.dockerignore 文件编写方法

.dockerignore 文件的写法和 .gitignore 类似,支持正则和通配符,具体规则如下:

1、每行为一个条目;
2、空行被忽略;
3、构建上下文路径为所有文件的根路径;

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

 

符号

作用

#

注释

*

匹配0或多个非/的字符

?

匹配1个非/的字符

**

0个或多个目录

!

除...外,需结合上下文语义

 

 

.dockerignore .dockerignore排除文件夹_docker

示例

示例 1:

# comment
*/*/temp*
temp?
**/*.md

示例 2:除 README.md 外,所有其他 md 文件都被 docker 忽略

*.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

知道、想到、做到、得到