Files
2026-08-16 14:29:05 +03:00

15 KiB
Raw Permalink Blame History

Домашнее задание по занятию "Docker. Часть 2" - Стадник Олег

Итоговая конфигурация

Задание 1

Напишите ответ в свободной форме, не больше одного абзаца текста.

Установите Docker Compose и опишите, для чего он нужен и как может улучшить лично вашу жизнь.


Решение

Устанавливаем Docker Compose на Debian:

Установка Docker Compose

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

Выполните действия:

  1. Создайте конфигурацию docker-compose для Prometheus с именем контейнера <ваши фамилия и инициалы>-netology-prometheus.
  2. Добавьте необходимые тома с данными и конфигурацией (конфигурация лежит в репозитории в директории 6-04/prometheus ).
  3. Обеспечьте внешний доступ к порту 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

Выполните действия:

  1. Создайте конфигурацию docker-compose для Pushgateway с именем контейнера <ваши фамилия и инициалы>-netology-pushgateway.
  2. Обеспечьте внешний доступ к порту 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

Выполните действия:

  1. Создайте конфигурацию docker-compose для Grafana с именем контейнера <ваши фамилия и инициалы>-netology-grafana.
  2. Добавьте необходимые тома с данными и конфигурацией (конфигурация лежит в репозитории в директории 6-04/grafana.
  3. Добавьте переменную окружения с путем до файла с кастомными настройками (должен быть в томе), в самом файле пропишите логин=<ваши фамилия и инициалы> пароль=netology.
  4. Обеспечьте внешний доступ к порту 3000 c порта 80 докер-сервера.

Решение

Скачал custom.ini, поменял имя пользователя и поместил в директорию grafana рядом с docker-compose.yaml

custom.ini

Использовал образ 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

Выполните действия.

  1. Настройте поочередность запуска контейнеров.
  2. Настройте режимы перезапуска для контейнеров.
  3. Настройте использование контейнерами одной сети.
  4. Запустите сценарий в 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 режиме:

docker compose up -d

Проверяем доступность prometheus:

Установка Docker Compose

Проверяем работу pushgateway:

Pushgateway

Проверяем работу Grafana. Входим в систему:

Логин в Grafana

Открывается дашборд:

Grafana


Задание 7

Выполните действия.

  1. Выполните запрос в Pushgateway для помещения метрики <ваши фамилия и инициалы> со значением 5 в Prometheus: echo "<ваши фамилия и инициалы> 5" | curl --data-binary @- http://localhost:9091/metrics/job/netology.
  2. Залогиньтесь в Grafana с помощью логина и пароля из предыдущего задания.
  3. Cоздайте Data Source Prometheus (Home -> Connections -> Data sources -> Add data source -> Prometheus -> указать "Prometheus server URL = http://prometheus:9090" -> Save & Test).
  4. Создайте график на основе добавленной в пункте 5 метрики (Build a dashboard -> Add visualization -> Prometheus -> Select metric -> Metric explorer -> <ваши фамилия и инициалы -> Apply.

В качестве решения приложите:

  • docker-compose.yml целиком;
  • скриншот команды docker ps после запуске docker-compose.yml;
  • скриншот графика, постоенного на основе вашей метрики.

Решение

docker-compose.yaml не менялся с предыдущего задания

Результат docker ps: docker ps

График с моей фамилией и инициалами:

Grafana Dashboard


Задание 8

Выполните действия:

  1. Остановите и удалите все контейнеры одной командой.

В качестве решения приложите скриншот консоли с проделанными действиями.


Решение

docker compose down


Задание 9*

Выполните действия:

  1. Создайте конфигурацию docker-compose для Alertmanager с именем контейнера <ваши фамилия и инициалы>-netology-alertmanager.
  2. Добавьте необходимые тома с данными и конфигурацией, сеть, режим и очередность запуска.
  3. Обновите конфигурацию Prometheus (необходимые изменения ищите в презентации или документации) и перезапустите его.
  4. Обеспечьте внешний доступ к порту 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

prometheus config

Содержимое файла example_rule.yml:

example_rule.yaml

Событие в Alertmanager:

Alertmanager


Задание 10*

Запустите свой сценарий на чистом железе без предзагруженных образов.

Ответьте на вопросы в свободной форме:

  1. Опишите выполненный вами процесс развертывания сценария.
  2. Как вы думаете зачем может понадобиться такой способ развертывания?

Решение

1.

Устанавливаю docker на новой машине:

Установка docker

Переношу конфигурацию с прошлой машины:

Перенос конфигурации

Запуск конфигурации:

docker compose up -d

Проверка Grafana на новой машине:

Grafana

2.

Это позволяет воспроизводить сервисы на другой хост в несколько команд, нужно только установить docker. А дальше Docker сам установит нужные зависимости и запустит контейнеры, которые ничем не отличаются от прошлого хоста.