15 KiB
Домашнее задание по занятию "Docker. Часть 2" - Стадник Олег
Задание 1
Напишите ответ в свободной форме, не больше одного абзаца текста.
Установите Docker Compose и опишите, для чего он нужен и как может улучшить лично вашу жизнь.
Решение
Устанавливаем Docker Compose на Debian:
Docker Compose позволяет в одном файле описывать запуск необходимых сервисов (контейнеров), указывать их зависимости друг от друга и запускать эту конфигурацию с помощью команды docker compose up -d. Я использовал Docker Compose в своих старых проектах для удобного разворачивания базы данных, бэкенда и фронтенда. Сейчас использую для разворачивания различных сервисов на домашнем сервере, например облачное хранилище фотографий Immich
Задание 2
Выполните действия и приложите текст конфига на этом этапе.
Создайте файл docker-compose.yml и внесите туда первичные настройки:
- version;
- services;
- volumes;
- networks.
При выполнении задания используйте подсеть 10.5.0.0/16. Ваша подсеть должна называться: <ваши фамилия и инициалы>-my-netology-hw. Все приложения из последующих заданий должны находиться в этой конфигурации.
Решение
Получившийся docker-compose.yaml файл:
version: '3.9'
services:
volumes:
networks:
stadnikoe-my-netology-hw:
driver: bridge
ipam:
driver: default
config:
- subnet: 10.5.0.0/16
gateway: 10.5.0.1
Задание 3
Выполните действия:
- Создайте конфигурацию docker-compose для Prometheus с именем контейнера <ваши фамилия и инициалы>-netology-prometheus.
- Добавьте необходимые тома с данными и конфигурацией (конфигурация лежит в репозитории в директории 6-04/prometheus ).
- Обеспечьте внешний доступ к порту 9090 c докер-сервера.
Решение
Я использовал образ prom/prometheus. Пробросил конфиг из материалов задания в /etc/prometheus/prometheus.yml и для основной папки prometheus сделал том prometheus-data
Получившийся docker-compose.yaml файл:
version: '3.9'
services:
prometheus:
container_name: stadnikoe-netology-prometheus
image: prom/prometheus:latest
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
ports:
- '9090:9090'
volumes:
prometheus-data:
networks:
stadnikoe-my-netology-hw:
driver: bridge
ipam:
driver: default
config:
- subnet: 10.5.0.0/16
gateway: 10.5.0.1
Задание 4
Выполните действия:
- Создайте конфигурацию docker-compose для Pushgateway с именем контейнера <ваши фамилия и инициалы>-netology-pushgateway.
- Обеспечьте внешний доступ к порту 9091 c докер-сервера.
Решение
Использовал образ prom/pushgateway Получившийся docker-compose.yaml файл:
version: '3.9'
services:
prometheus:
container_name: stadnikoe-netology-prometheus
image: prom/prometheus:latest
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
ports:
- '9090:9090'
pushgateway:
container_name: stadnikoe-netology-pushgateway
image: prom/pushgateway:latest
ports:
- '9091:9091'
volumes:
prometheus-data:
networks:
stadnikoe-my-netology-hw:
driver: bridge
ipam:
driver: default
config:
- subnet: 10.5.0.0/16
gateway: 10.5.0.1
Задание 5
Выполните действия:
- Создайте конфигурацию docker-compose для Grafana с именем контейнера <ваши фамилия и инициалы>-netology-grafana.
- Добавьте необходимые тома с данными и конфигурацией (конфигурация лежит в репозитории в директории 6-04/grafana.
- Добавьте переменную окружения с путем до файла с кастомными настройками (должен быть в томе), в самом файле пропишите логин=<ваши фамилия и инициалы> пароль=netology.
- Обеспечьте внешний доступ к порту 3000 c порта 80 докер-сервера.
Решение
Скачал custom.ini, поменял имя пользователя и поместил в директорию grafana рядом с docker-compose.yaml
Использовал образ grafana/grafana. Пробросил файл custom.ini в /etc/grafana/custom.ini и для переменной окружения указал этот проброшенный файл. Для основной папки /var/lib/grafana создал том grafana-data
Получившийся docker-compose.yaml файл:
version: '3.9'
services:
prometheus:
container_name: stadnikoe-netology-prometheus
image: prom/prometheus:latest
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
ports:
- '9090:9090'
pushgateway:
container_name: stadnikoe-netology-pushgateway
image: prom/pushgateway:latest
ports:
- '9091:9091'
grafana:
container_name: stadnikoe-netology-grafana
image: grafana/grafana:latest
volumes:
- ./grafana/custom.ini:/etc/grafana/custom.ini
- grafana-data:/var/lib/grafana
environment:
- GF_PATHS_CONFIG=/etc/grafana/custom.ini
ports:
- '80:3000'
volumes:
prometheus-data:
grafana-data:
networks:
stadnikoe-my-netology-hw:
driver: bridge
ipam:
driver: default
config:
- subnet: 10.5.0.0/16
gateway: 10.5.0.1
Задание 6
Выполните действия.
- Настройте поочередность запуска контейнеров.
- Настройте режимы перезапуска для контейнеров.
- Настройте использование контейнерами одной сети.
- Запустите сценарий в detached режиме.
Решение
Добавил такую очередность запуска контейнеров с помощью depends_on: pushgateway -> prometheus -> grafana Для режимов перезапуска поставил restart: unless-stopped. Контейнеры в таком режиме всегда будут перезапускаться пока я сам их не остановлю. Добавил использование созданной сети для контейнеров с помощью networks.
Получившийся docker-compose.yaml файл:
version: '3.9'
services:
prometheus:
container_name: stadnikoe-netology-prometheus
image: prom/prometheus:latest
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
ports:
- '9090:9090'
depends_on:
- pushgateway
restart: unless-stopped
networks:
- stadnikoe-my-netology-hw
pushgateway:
container_name: stadnikoe-netology-pushgateway
image: prom/pushgateway:latest
ports:
- '9091:9091'
restart: unless-stopped
networks:
- stadnikoe-my-netology-hw
grafana:
container_name: stadnikoe-netology-grafana
image: grafana/grafana:latest
volumes:
- ./grafana/custom.ini:/etc/grafana/custom.ini
- grafana-data:/var/lib/grafana
environment:
- GF_PATHS_CONFIG=/etc/grafana/custom.ini
ports:
- '80:3000'
depends_on:
- prometheus
restart: unless-stopped
networks:
- stadnikoe-my-netology-hw
volumes:
prometheus-data:
grafana-data:
networks:
stadnikoe-my-netology-hw:
driver: bridge
ipam:
driver: default
config:
- subnet: 10.5.0.0/16
gateway: 10.5.0.1
Запускаю конфигурацию в detached режиме:
Проверяем доступность prometheus:
Проверяем работу pushgateway:
Проверяем работу Grafana. Входим в систему:
Открывается дашборд:
Задание 7
Выполните действия.
- Выполните запрос в Pushgateway для помещения метрики <ваши фамилия и инициалы> со значением 5 в Prometheus:
echo "<ваши фамилия и инициалы> 5" | curl --data-binary @- http://localhost:9091/metrics/job/netology. - Залогиньтесь в Grafana с помощью логина и пароля из предыдущего задания.
- Cоздайте Data Source Prometheus (Home -> Connections -> Data sources -> Add data source -> Prometheus -> указать "Prometheus server URL = http://prometheus:9090" -> Save & Test).
- Создайте график на основе добавленной в пункте 5 метрики (Build a dashboard -> Add visualization -> Prometheus -> Select metric -> Metric explorer -> <ваши фамилия и инициалы -> Apply.
В качестве решения приложите:
- docker-compose.yml целиком;
- скриншот команды docker ps после запуске docker-compose.yml;
- скриншот графика, постоенного на основе вашей метрики.
Решение
docker-compose.yaml не менялся с предыдущего задания
График с моей фамилией и инициалами:
Задание 8
Выполните действия:
- Остановите и удалите все контейнеры одной командой.
В качестве решения приложите скриншот консоли с проделанными действиями.
Решение
Задание 9*
Выполните действия:
- Создайте конфигурацию docker-compose для Alertmanager с именем контейнера <ваши фамилия и инициалы>-netology-alertmanager.
- Добавьте необходимые тома с данными и конфигурацией, сеть, режим и очередность запуска.
- Обновите конфигурацию Prometheus (необходимые изменения ищите в презентации или документации) и перезапустите его.
- Обеспечьте внешний доступ к порту 9093 c докер-сервера.
В качестве решения приложите скриншот с событием из Alertmanager.
Решение
Использовал образ prom/alertmanager. Пробросил конфиг из материалов задания в /etc/alertmanager/alertmanager.yml и для основной папки alertmanager сделал том alertmanager-data. Добавил в зависимости prometheus этот контейнер, чтобы он запускался до prometheus вместе с pushgateway.
alertmanager:
container_name: stadnikoe-netology-alertmanager
image: prom/alertmanager:latest
volumes:
- ./alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml
- alertmanager-data:/alertmanager
ports:
- '9093:9093'
restart: unless-stopped
networks:
- stadnikoe-my-netology-hw
Убрал комментарий с alertmanager из конфига prometheus, а также создал файл с тестовым правилом example_rule.yml, который пробросил в контейнер prometheus по пути /etc/prometheus/example_rule.yml
Содержимое файла example_rule.yml:
Событие в Alertmanager:
Задание 10*
Запустите свой сценарий на чистом железе без предзагруженных образов.
Ответьте на вопросы в свободной форме:
- Опишите выполненный вами процесс развертывания сценария.
- Как вы думаете зачем может понадобиться такой способ развертывания?
Решение
1.
Устанавливаю docker на новой машине:
Переношу конфигурацию с прошлой машины:
Запуск конфигурации:
Проверка Grafana на новой машине:
2.
Это позволяет воспроизводить сервисы на другой хост в несколько команд, нужно только установить docker. А дальше Docker сам установит нужные зависимости и запустит контейнеры, которые ничем не отличаются от прошлого хоста.
















