5 способов исключить папку из монтирования Docker Compose

При использовании Docker Compose для управления контейнерами вы можете столкнуться со сценариями, в которых вам необходимо исключить монтирование определенных папок. Это может быть полезно, если вы хотите запретить доступ к определенным файлам или каталогам внутри контейнера или когда у вас есть большие файлы, которые вы не хотите включать в файловую систему контейнера. В этой статье мы рассмотрим несколько способов достижения этой цели, а также приведем примеры кода.

Метод 1: файл.dockerignore
Самый простой способ исключить папку из подключения — использовать файл.dockerignore. Этот файл позволяет указать шаблоны файлов и каталогов, которые следует исключить при создании образа Docker. Вот пример:

# .dockerignore
folder-to-exclude/

Добавив имя папки в файл.dockerignore, Docker Compose пропустит подключение этой папки к контейнеру.

Метод 2: тома с определенными путями к файлам.
Другой подход — указать точные пути к файлам, которые вы хотите включить, а не исключать определенные папки. В файле docker-compose.yaml вы можете определить том с явными путями к файлам для монтирования, например:

version: '3'
services:
  myservice:
    volumes:
      - ./file1.txt:/path/to/file1.txt
      - ./file2.txt:/path/to/file2.txt

Указывая отдельные файлы, которые вы хотите включить, вы фактически исключаете монтирование остальных файлов и папок.

Метод 3: команда Dockerfile COPY
Если у вас есть контроль над Dockerfile, вы можете использовать команду COPY для выборочного копирования файлов и папок в образ. Исключив ненужные файлы или папки, они не будут присутствовать в контейнере. Вот пример:

FROM alpine:latest
COPY ./path/to/file1.txt /path/to/file1.txt
COPY ./path/to/file2.txt /path/to/file2.txt

Метод 4: Внешние тома
Вместо использования привязки вы можете использовать внешние тома, чтобы исключить папку из подключения. Внешние тома можно создавать с помощью плагинов или драйверов хранилища, которые не ограничиваются файловой системой хоста. Используя внешний том, вы можете вообще исключить подключение определенных папок.

Метод 5: собственный сценарий точки входа
Если ни один из предыдущих методов не соответствует вашим требованиям, вы можете создать собственный сценарий точки входа, который запускается до запуска основного процесса. В рамках этого скрипта вы можете производить любые необходимые манипуляции с файлами, в том числе исключать нужную папку. Вот пример использования сценария Bash:

#!/bin/bash
rm -rf /path/to/folder-to-exclude
exec "$@"

В этом скрипте мы удаляем исключаемую папку перед выполнением основного процесса.

Используя упомянутые выше методы, вы можете легко исключить подключение определенных папок при использовании Docker Compose. Независимо от того, используете ли вы файл.dockerignore, указывая отдельные пути к файлам, используя команду COPY в Dockerfile, используя внешние тома или создавая собственный сценарий точки входа, у вас есть несколько вариантов достижения желаемого результата.