如何在Dockerfile中添加除.git之类的隐藏目录之外的所有文件/目录
我们经常做的一件事就是在构buildDocker镜像时将所有源代码打包到Dockerfile
。
ADD . /app
我们如何避免以简单的方式包含.git
目录?
我尝试了使用ADD [^.]* /app/
完整的样本:
docker @ boot2docker:/ mnt / sda1 / tmp / abc $ find。 。 。/C ./.git ./Dockerfile 。/好 ./good/a1 docker @ boot2docker:/ mnt / sda1 / tmp / abc $ cat Dockerfile 从Ubuntu的 ADD [^。] * / app / docker @ boot2docker:/ mnt / sda1 / tmp / abc $ docker build -t abc。 发送构build上下文到Docker守护进程4.096 kB 发送构build上下文到Docker守护进程 第0步:从Ubuntu的 ---> 04c5d3b7b065 第1步:添加[^。] * / app / d ---> 5d67603f108b 删除中间容器60159dee6ac8 成功构build5d67603f108b docker @ boot2docker:/ mnt / sda1 / tmp / abc $ docker run -it abc root @ 1b1705dd66a2:/#ls -l app 总共4 -rw-r - r-- 1 1000人员30 Jan 22 01:18 Dockerfile -rw-r - r-- 1 root root 0 1月22日01:03 a1 -rw-r - r-- 1 root root 0 Jan 22 00:10 c
其次,它将会丢失目录结构,因为good\a1
会变成a1
。
Docker中的相关源代码是https://github.com/docker/docker/blob/eaecf741f0e00a09782d5bcf16159cc8ea258b67/builder/internals.go#L115
您可以在.dockerignore文件的帮助下排除不需要的文件
我们如何避免以简单的方式包含.git目录?
只需在根上下文文件夹中使用以下几行创build一个名为.dockerignore的文件即可
**/.git **/node_modules
通过这样的代码,docker将从包括root的任何子目录中排除目录.git和node_modules。 Docker也支持一个特殊的通配符**,匹配任意数量的目录(包括零)。
其次,它会失去目录结构,因为好的\ a1被更改为a1
与.dockerignore它不会
$ docker run -it --rm sample tree /opt/ /opt/ ├── Dockerfile ├── c │ └── no_sslv2.patch └── good └── a1 └── README 3 directories, 3 files