89 lines
4.6 KiB
Markdown
89 lines
4.6 KiB
Markdown
Для выполнения второй лабораторной работы по созданию распределённого приложения с использованием 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://vkvideo.ru/video150882239_456240341 |