Для выполнения второй лабораторной работы по созданию распределённого приложения с использованием Docker и Docker Compose, давайте разберем все этапы, шаг за шагом. Я предлагаю реализовать вариант программы 1 и программу 2 следующим образом: ### 1. Вариант программы 1 Программа будет искать в каталоге `/var/data` файл с наибольшим количеством строк и перекладывать его в `/var/result/data.txt`. ### 2. Вариант программы 2 Программа будет искать наименьшее число из файла `/var/data/data.txt` и сохранять его третью степень в файл `/var/result/result.txt`. ### Структура проекта 1. `moiseev-vv-lab_2/worker-1`: Программа для нахождения файла с наибольшим количеством строк. 2. `moiseev-vv-lab_2/worker-2`: Программа для нахождения минимального числа в файле и записи его третьей степени. ### Шаги реализации: #### 1. Реализация программы 1 ```python #### 2. Реализация программы 2 ```python Для обоих приложений создадим Dockerfile. Вот пример для **worker-1**: Пояснение: - **Stage 1**: Мы используем `python:3.10-slim` как образ для сборки, где копируем файл `main.py` и устанавливаем зависимости, если это необходимо. - **Stage 2**: В этом слое мы копируем скомпилированные файлы из предыдущего этапа и определяем команду для запуска приложения. Аналогичный Dockerfile будет для **worker-2**. ### Docker Compose файл Теперь нужно настроить файл `docker-compose.yml`, который позволит запустить оба приложения: Пояснение: - **services**: Мы объявляем два сервиса — `worker-1` и `worker-2`. - **build**: Указываем контекст сборки для каждого сервиса (директории, где находятся Dockerfile и код). - **volumes**: Монтируем локальные директории `./data` и `./result` в контейнеры, чтобы обмениваться файлами между сервисами. - **depends_on**: Задаем зависимость `worker-2` от `worker-1`, чтобы второй сервис запускался только после первого. ### .gitignore Для предотвращения попадания ненужных файлов в репозиторий, добавляем файл `.gitignore`. Пример для Python проектов: ``` # .gitignore __pycache__/ *.pyc *.pyo *.pyd *.db *.log *.bak *.swp *.swo ``` ### Шаги для сборки и запуска 1. Склонировать репозиторий и перейти в директорию с лабораторной работой: ```bash git clone <репозиторий> cd moiseev-vv-lab_2 ``` 2. Скопировать файлы для `worker-1` и `worker-2` в соответствующие папки. 3. Создать файл `docker-compose.yml`. 4. Запустить приложение с помощью команды: ```bash docker-compose up --build ``` 5. Проверить вывод, результаты должны быть в директориях `./data` и `./result`. ### Заключение Это пример, как можно реализовать простейшее распределённое приложение с использованием Docker. Первое приложение генерирует данные для второго, который обрабатывает их и записывает результат в файл. Docker и Docker Compose позволяют легко управлять и изолировать каждое приложение.ker Compose для запуска двух программ, обрабатывающих данные в контейнерах. ## Видео ВК https://vk.com/video64471408_456239205?list=ln-nzLhpgninZdZBOzarw