Описание задачи

Вам необходимо создать конфигурацию для Docker Compose, которая позволит запустить конфигурацию из лекции по созданию Docker-контейнеров.

В конфигурации должны присутствовать:

  • Контейнер для запуска NodeJS-приложения.
  • Контейнер для запуска первичного Redis-сервера.
  • Два контейнера для запуска реплик Redis-сервера.
  • Контейнер для сбора журнала работы всех четырёх предыдущих серверов.

Требования к реализации:

  • Все контейнеры должны общаться между собой через приватную Docker-сеть.
  • Только контейнер с NodeJS-приложением должен публиковать свой порт для внешнего доступа.
  • Контейнеры должны хранить свои записи в Docker-хранилище, управление которым осуществляет Docker Compose.

В качестве базы для создания флота контейнеров необходимо использовать пример с NodeJS из 6 главы книги DockerBook.

Предложение по реализации

  1. Скачайте каталог примера к себе на компьютер.
  2. В корне каталога создайте файл docker-compose.yml.
  3. Сначала сформируйте запуск Docker-контейнеров Redis.
    1. Добавьте описание службы redis-primary на основании Dockerfile из каталога redis-base.

      Параметры запуска службы надо взять из Dockerfile из каталога redis_primary. Их необходимо описать в поле command службы.

      Хранилища должны быть сконфигурированы на уровне всей конфигурации и затем подключены к службам:

      services:
      web:
        image: nginx:alpine
        volumes:
          - type: volume
            source: mydata
            target: /data
            volume:
              nocopy: true
      
      volumes:
        mydata:
        dbdata:
      

      У вас должно быть 2 хранилища:

      • Для данных Redis-серверов.
      • Для хранения журналов сервисов.

      Проверьте, что служба запустилась и работает.

    2. Используйте собранный образ для первой службы для формирования служб redis-replica-one и redis-replica-two.

      Для связи образов redis-primary и данных служб используйте следующий синтаксис docker-compose:

      services:
        redis-primary:
          build: redis_base/
          image: redis_base/1.0.0
      
        redis-replica-one:
          image: redis_base/1.0.0
      

      Параметры запуска служб необходимо взять из Dockerfile из каталога redis_replica.

      Проверьте журналы работы запущенных служб. Они должны содержать информацию об успешном подключении к главному серверу.

  4. Добавьте описание NodeJS-службы. Данная служба должна использовать Dockerfile из каталога nodejs. Подключите данную службу к хранилищу журналов.

    Удостоверьтесь, что после изменения конфигурации все службы запустились. Это будет означать, что NodeJS-приложение успешно подключается к Redis-хранилищу.

  5. Добавьте описание LogStash-службы. Данная служба должна использовать Dockerfile из каталога logstash. Подключите данную службу к хранилищу журналов.

    Удостоверьтесь, что после перезапуска служб LogStash успешно агрегируют журналы.

В результате создания окружения с помощью Docker Compose у вас должны появиться следующие артефакты:

  • Образ для запуска базы данных Redis.
  • Образ для запуска NodeJS-приложения.
  • Образ для запуска Logstash-приложения.
  • Хранилище для данных журналов работы приложений.
  • Хранилище для данных базы данных Redis.