Практика. Создание docker-образов
Документация
- Изучаем Docker, часть 3: файлы Dockerfile
- Dockerfile reference
- Best practices for writing Dockerfiles
- Docker development best practices
- docker image build, docker build — описание команды для сборки образа
Задачи
Задача № 1: Создание образа с пакетами из репозитория
Ваша задача: создать новый образ, который будет содержать интерпретатор языка Ruby.
Сначала решите данную задачу с использованием ручного подхода из прошлой практики:
- Создайте контейнер на основе базового образа Debian
- Установите в контейнер Ruby из официального репозитория
- Остановите контейнер
- Создайте новый образ на основании остановленного котейнера
Затем решите поставленную задачу с использованием команды docker image build
:
- Создайте Dockerfile, описывающий необходимые шаги
- Установите интерпретатор
irb
как команду по умолчанию при запуске контейнера - Создайте образ с помощью Dockerfile и команды
docker image build
Сравните образы, полученные в первом и последнем шаге
Задача № 2: Уменьшение объёма образа
При выполнении сборки через Dockerfile для каждого действия создаются отдельные слои. Для уменьшения объёма данных в образе желательно очищать кеш APT: apt-get clean
и rm -rf /var/lib/apt/lists/*
Модифицируйте созданный на предыдущем задании Dockerfile, чтобы решить поставленную задачу.
Способ № 1:
- Добавьте шаг на вызов
apt-get clean
- Добавьте шаг на вызов
rm
Способ № 2:
- Модифицируйте шаг установки так, чтобы обновление кеша apt, установка интерпретатора и очистка кеша происходила в рамках одного шага
Сравните размер образов, полученных в результате выполнения задачи способом № 1 и способом № 2. Сравните историю и детальную информацию данных образов.
Задача № 3: Создание образа с интерпретатором Ruby с использованием ruby-install
Создайте Dockerfile, который будет создавать Docker-образ с установленным интерпретатором ruby последней версии. Установка должна происходить с помощью скриптов ruby-install
.
- Интерпретатор
ruby
не должен быть установлен из репозитория Debian - Точка входа контейнера - bash-интерпретатор с настроенным ruby-интерпретатором, который был поставлен с помощью
ruby-install
Выполните дополнительную очистку образа от временных файлов ruby-install
Задача № 4: Создание параметризованной сборки образа с интерпретатором Ruby
Добавьте к Dockerfile аргумент - версию интерпретатора Ruby, который необходимо поставить внутри контейнера
В зависимости от переданного аргумента должна происходить установка указанной пользователем версии интерпретатора
Задача № 5: Создание образа с Ruby-приложением
Расширьте свой Dockerfile так, чтобы он производил установку интерпретатора Ruby, а также устанавливали ваше веб-приложение. Точкой входа в образ должен быть запуск приложения
Требования к реализации:
- Для работы приложения необходимо создать отдельного пользователя
- Приложение должно предоставлять только динамическую информацию, без раздачи статики
- Приложение должно работать от имени данного пользователя
Задача № 6: Использование официального базового образа Ruby
Измените свой Dockerfile так, чтобы он использовал базовый образ Ruby: https://hub.docker.com/_/ruby
Сравните
- Полученный результат
- Объём Dockerfile между текущей версией и предыдущей