angle-uparrow-clockwisearrow-counterclockwisearrow-down-uparrow-leftatcalendarcard-listchatcheckenvelopefolderhouseinfo-circlepencilpeoplepersonperson-fillperson-plusphoneplusquestion-circlesearchtagtrashx

Тестирование файловых шаблонов Docker .dockerignore

Используйте скрипт для быстрой и простой проверки каталогов и файлов, которые будут включены в ваш Docker image .

22 сентября 2020
В Docker
post main image
https://unsplash.com/@mira09

Это короткая заметка о том, что я хотел сделать давным-давно и для чего я, наконец, нашел некоторое время. На самом деле это был не случай 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

Оставить комментарий

Комментируйте анонимно или войдите в систему, чтобы прокомментировать.

Комментарии

Оставьте ответ

Ответьте анонимно или войдите в систему, чтобы ответить.