Coder Social home page Coder Social logo

javatech-docker's Introduction

Лабораторная по теме Docker

В данном репозитории представлен макет приложения с трехуровневой архитектурой. Каждый уровень (сервис) вынесен отдельный подкаталог.

В реальном мире сервисы работают на разных серверах и ими занимаются разные команды. При этом, для удобства разработки, они упакованы в контейнеры, чтобы можно было все запустить локально и отладить. Также в корне репозитория лежат скрипты для сборки, запуска и остановки контейнеров.

Текущее взаимодействие показано на рисунке черными стрелками.

Схема сервисов

У текущей схемы есть проблемы

  • сервису фронтенда приходится брать на себя проксирование запросов к апи.
  • сервис бэкенда может работать только в одном экземпляре, так как текущее проксирование фронтендом не подразумевает балансировки нагрузки

Задача - настроить в макете обратный прокси с балансировкой нагрузки и запустить как минимум 2 копии бэкенда.

Примечание: здесь мы для наглядности используем не встроенный в docker-compose механизм масштабирования, а просто запуск двух одинаковых контейнеров.

Решение:

  1. Изучите docker-compose.yml. Что делает каждая из директив? Чем отличаются 3 варианта использования volumes?

  2. Изучите Dockerfile в каждом из сервисов. Что делает каждая из директив? Что означает повторение директивы FROM? Чем RUN отличается от CMD?

  3. Изучите скрипты сборки, запуска и остановки. За что отвечает каждый из параметров команды docker-compose?

  4. Запустите все контейнеры и убедитесь что приложение работает. Выведите на экран логи каждого контейнера.

    Для проверки работы вам нужно обратиться к сервису frontend, он доступен по ссылке http://localhost:22002/

    Обратите внимание на строку Backend-Container которая показывает какой контейнер обслуживает API. Сейчас она не меняется при перезагрузке страницы, потому что сервис один.

    Обратите внимание на строки Frontend-Proxy: None - запросы в фронтенд не проксируются, Backend-Proxy: Node.js - запросы в бэкенд проксируются через фронтенд.

    Также для проверки работы отдельно бэкенда можно обратиться по урлу http://localhost:22003/api/info

    Тут можно увидеть что в строке Backend-Container всегда значение backend1 из конфига.

    Для проверки работы отдельно базы данных можно подключиться утилитой pgadmin по адресу localhost:22001

  5. Напишите Dockerfile для сервиса nginx. Добавьте сервис в docker-compose.yml.

    Конфигурация для nginx уже написана, достаточно собрать файлы в контейнер.

    При добавлении контейнера примонтируйте файл nginx-data/upstreams.conf рядом с default.conf. В нем содержатся ссылки на серверы для проксирования и настройки балансировки.

  6. Запустите сервис nginx. Проверьте что он отвечает по ссылке http://localhost:22000/

    Обратите внимание, что строки Frontend-Proxy и Backend-Proxy изменились. Какие стрелки на схеме теперь работают, а какие нет?

  7. Добавьте сервис backend2 в docker-compose.yml. Запустите его.

    Проверьте его работу по урлу http://localhost:22004/api/info

    Тут можно увидеть что в строке Backend-Container всегда значение backend2 из конфига.

  8. Настройте балансировку в конфиге upstreams.conf и перезапустите контейнер nginx.

    Проверьте что он отвечает по ссылке http://localhost:22000/

    Если все сделано правильно, то теперь при перезагрузке страницы меняется значение в строке Backend-Container. Это означает, что попеременно используются контейнеры backend1 и backend2.

javatech-docker's People

Contributors

drxaos avatar barkas074 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.