编写.dockerignore

参考:.dockerignore file

.dockerignore的作用和.gitignore类似,用于忽略或指定哪些文件不被ADDCOPY指令操作

匹配规则

其文件匹配规则遵循Go's func Match

其中通配符有星号、问号以及中括号

  • 星号(*)表示匹配任何非分隔字符序列
  • 问号(?)表示匹配任何单个非分隔符字符
  • 中括号([)表示匹配位于字符范围内的字符

Docker还提供了一个特殊的通配符字符串**,用于匹配任何路径。比如**/*.go将匹配所有目录中以.go结尾的所有文件,包括生成上下文的根目录

#开头的行被视为注释,不起作用

!开头的匹配字符串表示指定匹配文件不被忽略

示例一

.dockerignore文件内容如下:

# comment
*/temp*
*/*/temp*
temp?
  • 第一行是注释
  • 第二行表示忽略所有二级目录中以temp开头的文件
  • 第三行表示忽略所有三级目录中以temp开头的文件
  • 第四行表示忽略根目录中以temp开头,后跟一个字符的文件

示例二

使用感叹号!指定匹配文件不被忽略,还需要考虑其在.dockerignore文件中的使用位置

*.md
!README.md

除了README.md外的所有.md文件都被忽略

*.md
!README*.md
README-secret.md

此时README-secret.md同样会被忽略

*.md
README-secret.md
!README*.md

此时README-secret.md同样不会被忽略

示例三

可以通过.dockerignore文件忽略Dockerfile.dockerignore文件。这些文件仍然被发送到守护进程,因为需要它们来完成工作。但是ADDCOPY指令不会将它们复制到镜像中