4.6 KiB
Для выполнения второй лабораторной работы по созданию распределённого приложения с использованием Docker и Docker Compose, давайте разберем все этапы, шаг за шагом. Я предлагаю реализовать вариант программы 1 и программу 2 следующим образом:
1. Вариант программы 1
Программа будет искать в каталоге /var/data
файл с наибольшим количеством строк и перекладывать его в /var/result/data.txt
.
2. Вариант программы 2
Программа будет искать наименьшее число из файла /var/data/data.txt
и сохранять его третью степень в файл /var/result/result.txt
.
Структура проекта
moiseev-vv-lab_2/worker-1
: Программа для нахождения файла с наибольшим количеством строк.moiseev-vv-lab_2/worker-2
: Программа для нахождения минимального числа в файле и записи его третьей степени.
Шаги реализации:
1. Реализация программы 1
#### 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
-
Скопировать файлы для
worker-1
иworker-2
в соответствующие папки. -
Создать файл
docker-compose.yml
. -
Запустить приложение с помощью команды:
docker-compose up --build
-
Проверить вывод, результаты должны быть в директориях
./data
и./result
.
Заключение
Это пример, как можно реализовать простейшее распределённое приложение с использованием Docker. Первое приложение генерирует данные для второго, который обрабатывает их и записывает результат в файл. Docker и Docker Compose позволяют легко управлять и изолировать каждое приложение.ker Compose для запуска двух программ, обрабатывающих данные в контейнерах.