• .dockerignore


    .dockerignore 文件从入门到实践

    .dockerignore 文件的作用类似于 git 工程中的 .gitignore 。不同的是 .dockerignore 应用于 docker 镜像的构建,它存在于 docker 构建上下文的根目录,

    用来排除不需要上传到 docker 服务端的文件或目录。

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

    好处是:

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

    .dockerignore 文件编写方法

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

    • 每行为一个条目;
    • 以 # 开头的行为注释;
    • 空行被忽略;
    • 构建上下文路径为所有文件的根路径;

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

    ⚠️注意事项:
    如果两个匹配语法规则有包含或者重叠关系,那么以后面的匹配规则为准,比如:

    *.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 构建上下文的根路径下。

    .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
    

      

    参考资料

    https://docs.docker.com/engine/reference/builder/#dockerignore-file

    .dockerignore 文件的作用

     

    类比

    在项目中,我们见过很多各式各样的 ignore 文件。

    比如使用 .gitignore 来忽略掉你不想追踪的文件:https://git-scm.com/docs/gitignore

    使用 .npmignore 来忽略你在发布包时不想发布的文件:https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-package

    那么 .dockerignore 文件是起什么作用的呢,不管是在 docker build 过程中,还是 docker run 的过程中,有没有这个文件好像并有什么很大的影响,存在感不强的一个文件

    首先需要理解一下 镜像构建上下文(context) 的概念,参见另一篇博文:docker build 命令后 . 号的意思

    理解了这个概念就明白,当我们在 docker build 的过程中,

    首先会将指定的上下文目录打包传递给 docker引擎,而这个上下文目录中可能并不是所有的文件我们都会在 Dockerfile 中使用到,那么这个时候就可以在 .dockerignore 文件中指定在传递给 docker引擎 时需要忽略掉的文件或文件夹

    举栗说明~
    比如我们在前端项目中,node_modules 文件夹构建镜像过程中如果用不到,但是又异常庞大,那么向 docker引擎 传递其实是并没有必要的(其实大家电脑性能都这么好,也不在乎这几秒钟了。。。只是举个例子,可以提升镜像构建速度),这个时候就可以将 node_modules 文件夹加入 .dockerignore 文件中。

    如下所示,速度提升还是很明显的。
    加入前:

     加入后:

  • 相关阅读:
    poj 2773 利用欧拉函数求互质数
    poj3358:欧拉定理
    poj:2992 因子数量
    poj3696:同余方程,欧拉定理
    USACO5.4-Character Recognition
    hdu5017:补题系列之西安网络赛1011
    hdu5014:number sequence对称思想
    欧拉函数,欧拉定理例题整理
    POJ 3463 Sightseeing (次短路)
    POJ
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/12603658.html
Copyright © 2020-2023  润新知