Введение в докер. Разработка простого докер образа для собственного сервера.
- Chapter I
1.1. nginx
1.2. Docker
1.3. Dockle - Chapter II
2.1. Готовый докер
2.2. Операции с контейнером
2.3. Мини веб-сервер
2.4. Свой докер
2.5. Dockle
2.6. Базовый Docker Compose
nginx (произносится как "engine-x") - это обратный прокси-сервер с открытым исходным кодом для протоколов HTTP, HTTPS и т.д. nginx также используется, как балансировщик нагрузки, веб-сервер и для кеширования HTTP. В проекте nginx уделяется особое внимание высокому параллелизму, высокой производительности и низкому использованию памяти.
У nginx есть один главный и несколько рабочих процессов. Основная задача главного процесса — чтение и проверка конфигурации и управление рабочими процессами. Рабочие процессы выполняют фактическую обработку запросов.
Как работают nginx и его модули, определяется в конфигурационном файле. По умолчанию, конфигурационный файл называется nginx.conf
Контейнер – новый "исполняемый файл", включающий в себя все необходимые продукту зависимости.
Главное преимущество контейнеризации – изоляция зависимостей и единая простая точка запуска ПО.
Основные понятия:
- Докер образ – "упаковка" для приложения и зависимостей (в том числе системных).
- Контейнер – экземпляр образа, то есть "оживший" образ.
Docker — это платформа, которая предназначена для разработки, развёртывания и запуска приложений в контейнерах. Docker – «де-факто» стандарт инструмента контейнеризации в индустрии, но он не является первым или последним среди технологий контейнеризации.
Предшественниками контейнеров Docker были виртуальные машины. Виртуальная машина, как и контейнер, изолирует приложение и его зависимости от внешней среды. Однако контейнеры Docker обладают преимуществами перед виртуальными машинами. Так, они потребляют меньше ресурсов, их очень легко переносить, они быстрее запускаются и приходят в работоспособное состояние.
Докер образ состоит из слоев. Каждый слой описывает какое-то изменение, которое должно быть выполнено с данными на запущенном контейнере. Структура связей между слоями — иерархическая. Имеется базовый слой, на который «накладываются» остальные слои. Для создания образа используется Dockerfile. Каждая инструкция в нем создает новый слой.
Dockle — это инструмент для проверки безопасности образов контейнеров, который можно использовать для поиска уязвимостей.
Основные функции и преимущества Dockle:
- поиск уязвимостей в образах,
- помощь в создании правильного Dockerfile,
- простота в использовании, нужно указать только имя образа,
- поддержка CIS Benchmarks.
Docker Compose — это инструментальное средство, которое предназначено для решения задач, связанных с развёртыванием проектов. Docker Compose может пригодиться, если для обеспечения функционирования проекта используется несколько сервисов.
Docker Compose используется для одновременного управления несколькими контейнерами, входящими в состав приложения. Этот инструмент предлагает те же возможности, что и Docker, но позволяет работать с более сложными распределенными приложениями, например микросервисными.
В качестве результата работы по первым двум задачам должен быть предоставлен отчет. В каждой части задания указано, что должно быть помещено в отчёт, после её выполнения. Это могут быть ответы на вопросы, скриншоты и т.д.
В качестве результата работы по третьей задаче должны быть предоставлены исходные файлы для запуска веб-сервера.
В качестве результата работы по четвёртой и пятой задачам должны быть предоставлены докерфайлы.
В качестве результата работы по шестой задаче должен быть предоставлен файл docker-compose.yml и нужные для его запуска докерфайлы (если они не были предоставлены ранее).
- В репозиторий, в папку src, должен быть загружен отчёт с расширением .md.
- В отчёте должны быть выделены все части задания, как заголовки 2-го уровня.
- В рамках одной части задания всё, что помещается в отчёт, должно быть оформлено в виде списка.
- Каждый скриншот в отчёте должен быть кратко подписан (что показано на скриншоте).
- Все скриншоты обрезаны так, чтобы была видна только нужная часть экрана.
- На одном скриншоте допускается отображение сразу нескольких пунктов задания, но они все должны быть описаны в подписи к скриншоту.
- В репозиторий, в папку src/server, должны быть загружены исходные файлы для запуска веб-сервера из третьего задания.
- В репозиторий, в папку src, должны быть загружены итоговые докерфайлы для запуска образов из четвёртого и пятого заданий.
- В репозиторий, в папку src, должен быть загружен docker-compose.yml шестого задания.
- Необходимо быть готовым продемонстрировать решение вживую при необходимости.
В качестве конечной цели своей небольшой практики вы сразу выбрали написание докер образа для собственного веб сервера, а потому в начале вам нужно разобраться с уже готовым докер образом для сервера. Ваш выбор пал на довольно простой nginx.
== Задание ==
По выводу команды определить и поместить в отчёт размер контейнера, список замапленных портов и ip контейнера
- В отчёт поместить скрины:
- вызова и вывода всех использованных в этой части задания команд;
- стартовой страницы nginx по адресу localhost:80 (адрес должен быть виден).
Докер образ и контейнер готовы. Теперь можно покопаться в конфигурации nginx и отобразить статус страницы.
== Задание ==
- В отчёт поместить скрины:
- вызова и вывода всех использованных в этой части задания команд;
- содержимое созданного файла nginx.conf;
- страницы со статусом сервера nginx по адресу localhost:80/status.
Настало время немного оторваться от докера, чтобы подготовиться к последнему этапу. Настало время написать свой сервер.
== Задание ==
Написать мини сервер на C и FastCgi, который будет возвращать простейшую страничку с надписью Hello World!
Теперь всё готово. Можно приступать к написанию докер образа для созданного сервера.
== Задание ==
При написании докер образа избегайте множественных вызовов команд RUN
1) собирает исходники мини сервера на FastCgi из Части 3
nginx можно установить внутрь докера самостоятельно, а можно воспользоваться готовым образом с nginx'ом, как базовым.
Запустить собранный докер образ с маппингом 81 порта на 80 на локальной машине и маппингом папки ./nginx внутрь контейнера по адресу, где лежат конфигурационные файлы nginx'а (см. Часть 2)
Дописать в ./nginx/nginx.conf проксирование странички /status, по которой надо отдавать статус сервера nginx
Если всё сделано верно, то, после сохранения файла и перезапуска контейнера, конфигурационный файл внутри докер образа должен обновиться самостоятельно без лишних действий
После написания образа никогда не будет лишним проверить его на безопасность.
== Задание ==
Вот вы и закончили вашу разминку. А хотя погодите... Почему бы не поэкспериментировать с развёртыванием проекта, состоящего сразу из нескольких докер образов?
== Задание ==