DAS_2024_1/alkin_ivan_lab_2
2024-12-09 23:56:12 +04:00
..
data_generator alkin_ivan_lab_2 2024-12-09 23:49:29 +04:00
worker-1 alkin_ivan_lab_2 2024-12-09 23:49:29 +04:00
worker-2 alkin_ivan_lab_2 2024-12-09 23:49:29 +04:00
.gitignore alkin_ivan_lab_2 2024-12-09 23:49:29 +04:00
docker-compose.yml alkin_ivan_lab_2 2024-12-09 23:49:29 +04:00
README.md alkin_ivan_lab_2 2024-12-09 23:56:12 +04:00

Для выполнения второй лабораторной работы по созданию распределённого приложения с использованием 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



#### 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
  1. Скопировать файлы для worker-1 и worker-2 в соответствующие папки.

  2. Создать файл docker-compose.yml.

  3. Запустить приложение с помощью команды:

    docker-compose up --build
    
  4. Проверить вывод, результаты должны быть в директориях ./data и ./result.

Заключение

Это пример, как можно реализовать простейшее распределённое приложение с использованием Docker. Первое приложение генерирует данные для второго, который обрабатывает их и записывает результат в файл. Docker и Docker Compose позволяют легко управлять и изолировать каждое приложение.ker Compose для запуска двух программ, обрабатывающих данные в контейнерах.

Видео ВК

https://vkvideo.ru/video150882239_456240341