Ответ 1
Вы можете исключить нежелательные файлы с помощью файла.dockerignore
Одной из вещей, которые мы часто делаем, является пакетный исходный код в Dockerfile
когда мы создаем образ Docker.
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
.
Исходный код в Docker - https://github.com/docker/docker/blob/eaecf741f0e00a09782d5bcf16159cc8ea258b67/builder/internals.go#L115
Вы можете исключить нежелательные файлы с помощью файла.dockerignore
Как мы можем избежать включения каталога.git простым способом?
Просто создайте файл с именем .dockerignore
в корневой папке контекста со следующими строками
**/.git
**/node_modules
С такими строками Docker исключает каталоги .git
и node_modules
из любого подкаталога, включая root. Docker также поддерживает специальную подстановочную строку **
которая соответствует любому количеству каталогов (включая ноль).
А во-вторых, он потеряет структуру каталогов, так как good\a1 будет изменен на a1
С.dockerignore это не будет
$ docker run -it --rm sample tree /opt/
/opt/
├── Dockerfile
├── c
│ └── no_sslv2.patch
└── good
└── a1
└── README
3 directories, 3 files
Ссылка на официальные документы: .dockerignore
Добавьте файл .dockerignore в корневой каталог (синтаксис, например, файл .gitignore)