2015-01-22 3 views
27

Мы часто делаем так, чтобы упаковать весь исходный код в Dockerfile, когда мы создаем образ Docker.Как добавить все файлы/каталоги, кроме скрытого каталога, например .git в Dockerfile

ADD . /app 

Как мы можем избежать простого указания каталога .git?

Я попробовал путь Unix обращения с этой помощью ADD [^.]* /app/

Полный образец:

 
[email protected]:/mnt/sda1/tmp/abc$ find . 
. 
./c 
./.git 
./Dockerfile 
./good 
./good/a1 
[email protected]:/mnt/sda1/tmp/abc$ cat Dockerfile 
FROM ubuntu 

ADD [^.]* /app/ 
[email protected]:/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 
[email protected]:/mnt/sda1/tmp/abc$ docker run -it abc 
[email protected]:/# 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 

А во-вторых, оно потеряет структуру каталогов, так как good\a1 получает изменено на a1.

Связанные исходный код в Докер является https://github.com/docker/docker/blob/eaecf741f0e00a09782d5bcf16159cc8ea258b67/builder/internals.go#L115

ответ

10

Как мы можем избежать в том числе .git каталога в простом способе?

Просто создайте файл с именем .dockerignore в корневой папке контекста следующих строками

**/.git 
**/node_modules 

с такими линиями Докером исключит каталоги .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 

Ссылка на официальные документы: .dockerignore

0

Добавить .dockerignore файл в корневом каталоге (синтаксис, подобный .gitignore файл)