How to ADD all files/directories except a hidden directory like .git in Dockerfile
我们经常做的事情之一是在构建Docker映像时将所有源代码打包到
1 | ADD . /app |
如何避免简单地包含
我试过用Unix的方法来处理这个问题。
完整样品:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | docker@boot2docker:/mnt/sda1/tmp/abc$ find . . ./c ./.git ./Dockerfile ./good ./good/a1 docker@boot2docker:/mnt/sda1/tmp/abc$ cat Dockerfile FROM ubuntu ADD [^.]* /app/ docker@boot2docker:/mnt/sda1/tmp/abc$ docker build -t abc . Sending build context to Docker daemon 4.096 kB Sending build context to Docker daemon Step 0 : FROM ubuntu ---> 04c5d3b7b065 Step 1 : ADD [^.]* /app/ d ---> 5d67603f108b Removing intermediate container 60159dee6ac8 Successfully built 5d67603f108b docker@boot2docker:/mnt/sda1/tmp/abc$ docker run -it abc root@1b1705dd66a2:/# ls -l app total 4 -rw-r--r-- 1 1000 staff 30 Jan 22 01:18 Dockerfile -rw-r--r-- 1 root root 0 Jan 22 01:03 a1 -rw-r--r-- 1 root root 0 Jan 22 00:10 c |
其次,它将丢失目录结构,因为
docker中的相关源代码是https://github.com/docker/docker/blob/eaecf741f0a09782d5bcf16159cc8ea258b67/builder/internals.go l115
在.dockerignore文件的帮助下,可以排除不需要的文件
How can we avoid including the .git directory in simple way ?
只需在根上下文文件夹中创建一个名为
1 2 | **/.git **/node_modules |
使用这些行,Docker将从任何子目录(包括根目录)中排除目录
And secondly, it will lose the directory structure, since good\a1 gets changed to a1
有了码头码头,就不会了。
1 2 3 4 5 6 7 8 9 10 | $ docker run -it --rm sample tree /opt/ /opt/ ├── Dockerfile ├── c │ └── no_sslv2.patch └── good └── a1 └── README 3 directories, 3 files |
官方文件参考:.dockerignore
在根目录中添加.dockerignore文件(语法类似于.gitignore文件)