# Лабораторная работа №1 - Знакомство с docker и docker-compose **Цель**: изучение современных технологий контейнеризации. **Задачи**: 1. Установить средство контейнеризации docker. 2. Изучить применение и принципы docker. 3. Изучить утилиту docker-compose и структуру файла docker-compose.yml. 4. Развернуть не менее 3х различных сервисов при помощи docker-compose. 5. Оформить отчёт в формате Markdown и создать Pull Request в git-репозитории. ## Установка docker Для систем с графическим дисплеем рекомендуется устанавливать Docker Desktop, т.к. это средство позволяет максимально легко установить docker с графическим управлением в ОС. Если же установка Docker Desktop для Вашей системы не применима, можно установить отдельно docker engine и, например, расширение Docker для Visual Studio Code. ## Принципы docker 1. Переменные окружения для запуска приложений. 2. Монтирование директорий в linux и других подобный ОС. 3. Отличие контейнера от виртуальной машины. 4. Что такое образ (image) в docker, и в чём отличие от контейнера (container). 5. Что такое Docker Hub. 6. Что такое раздел/том (volume), и как это помогает обмениваться файлами между контейнерами или с хостом (host). 7. Зачем нужно отображение портов из контейнера в хост. ## Изучение docker-compose В рамках этого пункта необходимо понять, что такое docker-compose и конфигурационный файл _docker-compose.yml_. Также в этом разделе изучите формат записи YAML, т.к. это **сильно** поможет в будущем. ## Разворачивание сервисов Предлагается развернуть не менее 3х сервисов через docker-compose из списка ниже: 1. **mediawiki** Движок вики. 2. **redmine** Система учёта багов, т.е. баг-трекер. 3. **wordpress** Популярная система управления контентом. 4. **drupal** Ещё одна популярная система управления контентом. 5. **moodle** Система для обучения, на которой построена . 6. **gitea** Сервис для хранения репозиториев git, на котором работает этот репозиторий. > Можно вбить в поисковый движок фразу "%service_name% docker-compose", и вы удивитесь, что, скорее всего, найдёте ответ. Требования и docker-compose: * Несколько контейнеров. * Хотя бы один volume. * Хотя бы один порт, проброшенный на хост. При этом разворачивание системы должно пройти до конца. Например, должен быть создан администратор и система должна корректно функционировать. Это необходимо будет предоставить в отчёте, поэтому не забывайте делать скриншоты. ## Оформление отчёта Существует множество форматов для разметки текста. Например, HTML или TeX. Наряду с ними существует формат **Markdown**, который используется достаточно часто, особенно в репозиториях git, чтобы его изучить. Необходимо написать отчёт с примерами содержимого _docker-compose.yml_ и скриншотами по каждому выбранному сервису. После содержимого _docker-compose.yml_ в тексте отчёта необходимо написать, что за что там отвечает. Например, _«определяется volume «db», который затем монтируется в директорию «/var/database» контейнера «database». Контейнер «database» запускается из образа «postgresql:latest» из Docker Hub»_ и т.д. Можно также оставлять комментарии прямиком в yml-файле через `#`. Для оформления отчёта необходимо форкнуть (fork) к себе в профиль этот репозиторий. После клонирования созданного репозитория к себе на рабочий ПК необходимо создать и переключиться на ветку в формате `фамилия-инициалы-lab-номер`, например, `moiseev-vv-lab-1`. После этого отчёт и скриншоты необходимо положить в специальную папку в формате `/tasks/фамилия-инициалы/lab_номер`, например, `/tasks/moiseev-vv/lab_1`. Пример уже есть в этом репозитории. После отправки вашей ветки в git-репозиторий (`git push`) необходимо оформить **Pull Request** из вашей ветки в main основного репозитория для того, что ваши изменения прошли ревью и были приняты. Лабораторная работа считается выполненной, если ваш PR будет влит в основную ветвь основного репозитория. Следите за вашим Pull Request! Преподаватель может оставлять комментарии-замечания, которые необходимо будет исправлять.