Тестирование файловых шаблонов Docker .dockerignore
Используйте скрипт для быстрой и простой проверки каталогов и файлов, которые будут включены в ваш Docker image .
Это короткая заметка о том, что я хотел сделать давным-давно и для чего я, наконец, нашел некоторое время. На самом деле это был не случай TLT;DR (Слишком долго; не читал), а скорее что-то вроде TLT;DR (Слишком мало времени; не читал). Как вы вероятно знаете, файл Docker .dockerignore используется для предотвращения попадания определенных файлов и каталогов в ваш Docker image. Файл Docker .dockerignore используется при сборке Docker image и состоит из правил, соответствующих файлам и/или директориям.
Причины для этого:
- Уменьшение размера Docker image
- Более быстрые сборки Docker image
- Избегает раскрытия секретов
У меня уже был файл .dockerignore , но теперь я тоже искал простой способ проверить, что будет в Docker image.
Напишите правила, запустите скрипт, проверьте файлы.
Я нашла в интернете красивый пост и поместила его в сценарий. Что это делает, так это ведет себя, когда вы собираете свой Docker image , но теперь он использует изображение busybox . Она выводит список каталогов и файлов, которые включены и выходят. Вы можете проверить эти файлы, и если вас это не устраивает, вы редактируете файл .dockerignore и запускаете сценарий снова.
Все кредиты ребятам на Stackoverflow, смотрите также ссылки ниже. Я назвал скрипт 'dockerignore_test.sh':
#!/bin/sh
# dockerignore_test.sh
# based on BMitch's answer from:
# How to test dockerignore file?
# https://stackoverflow.com/questions/38946683/how-to-test-dockerignore-file
# tested on: ubuntu 18.04 lts (desktop)
# with: Docker version 19.03.12, build 48a66213fe
# note: will create and delete temporary file "Dockerfile.build-context"
# instructions
#
# 1. put this script in the folder where the image is being built
# make it executable using chmod 755 dockerignore_test.sh
#
# 2. edit this script to change the build-context
# for me the build-context is './project' because
# my docker-compose.yaml file has lines:
# if the build-context is the current directory
# then change this to '.'
#
# web:
# image: ...
# ...
# build:
# context: ./project
#
# 3. edit the .dockerignore file and put it in the build-context directory
#
# 4. run script
# ./dockerignore_test.sh
# you should see list of files in build context
# these are the files that end up in your image
#
# 5. (optional) capture the list of files
# ./dockerignore_test.sh > images_files_list
#
# 6. if you see unwanted files, go back to step 3
#
cat <<EOF > Dockerfile.build-context
FROM busybox
COPY . /build-context
WORKDIR /build-context
CMD find .
EOF
docker build -f Dockerfile.build-context -t build-context ./project
docker run --rm -it build-context
rm Dockerfile.build-context
А как же правила .dockerignore ?
Многие люди в интернете жалуются на то, что документация Docker по файлу .dockerignore не очень-то полезна, и у меня тоже возникла эта проблема. В конце концов, я просто упростил задачу, исключил некоторые каталоги и файлы .pyc. При этом сами каталоги не удаляются, а только файлы и подкаталоги в них. Правило таково:
**/<directory name>/*
Двойная звездочка в начале означает, что каталог может находиться на каждом уровне пути. Звездочка в конце означает, что она будет соответствовать всему в указанном каталоге. Мой .dockerignore файл выглядит так:
# ./project/.dockerignore
#
# ignore directories
**/.pytest_cache/*
**/alembic/versions/*
**/misc/*
**/static/*
**/tmp/*
**/tests_frontend/*
# ignore files
**/*.pyc
Заключение .
Использование файла Docker .dockerignore необходимо при сборке Docker images. Представленный сценарий является простым способом проверить, какие файлы будут включены в Docker image.
Ссылки / кредиты
Do not ignore .dockerignore (it’s expensive and potentially dangerous)
https://codefresh.io/docker-tutorial/not-ignore-dockerignore-2/
How to test dockerignore file?
https://stackoverflow.com/questions/38946683/how-to-test-dockerignore-file
Подробнее
Docker Docker-compose
Недавний
- Скрытие первичных ключей базы данных UUID вашего веб-приложения
- Don't Repeat Yourself (DRY) с Jinja2
- SQLAlchemy, PostgreSQL, максимальное количество строк для user
- Показать значения в динамических фильтрах SQLAlchemy
- Безопасная передача данных с помощью шифрования Public Key и pyNaCl
- rqlite: альтернатива dist с высокой степенью готовности и SQLite
Большинство просмотренных
- Используя Python pyOpenSSL для проверки SSL-сертификатов, загруженных с хоста
- Использование UUID вместо Integer Autoincrement Primary Keys с SQLAlchemy и MariaDb
- Подключение к службе на хосте Docker из контейнера Docker
- Использование PyInstaller и Cython для создания исполняемого файла Python
- SQLAlchemy: Использование Cascade Deletes для удаления связанных объектов
- Flask Удовлетворительный запрос API проверка параметров запроса с помощью схем Маршмэллоу