Практика. Создание 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 между текущей версией и предыдущей