From b38e755299dfa5e4010cb961f5605c8d1d74767f Mon Sep 17 00:00:00 2001 From: marimo Date: Mon, 9 Dec 2024 21:03:02 +0400 Subject: [PATCH 1/7] alkin_ivan_lab_1 --- alkin_ivan_lab_1/README.md | 161 ++++++++++++++++++++++++++++ alkin_ivan_lab_1/docker-compose.yml | 68 ++++++++++++ 2 files changed, 229 insertions(+) create mode 100644 alkin_ivan_lab_1/README.md create mode 100644 alkin_ivan_lab_1/docker-compose.yml diff --git a/alkin_ivan_lab_1/README.md b/alkin_ivan_lab_1/README.md new file mode 100644 index 0000000..145600c --- /dev/null +++ b/alkin_ivan_lab_1/README.md @@ -0,0 +1,161 @@ +Вот перефразированный текст: + +--- + +# Лабораторная работа №1 — Ознакомление с Docker и Docker Compose + +**Цель**: освоение технологий контейнеризации. + +**Задачи**: +1. Установить Docker — систему для контейнеризации. +2. Изучить основы работы и принципы Docker. +3. Изучить утилиту Docker Compose и формат файла docker-compose.yml. +4. Развернуть как минимум три различных сервиса с использованием Docker Compose. +5. Оформить отчет в формате Markdown и создать Pull Request в git-репозитории. + +## Развертывание сервисов + +Необходимо развернуть не менее трёх сервисов с помощью Docker Compose из предложенного списка: + +1. **MediaWiki** — движок для вики-сайтов. +2. **Redmine** — система управления задачами (баг-трекер). +3. **WordPress** — популярная система управления контентом. +4. **Drupal** — другая известная система управления контентом. +5. **Moodle** — платформа для онлайн-обучения, например, используется на . +6. **Gitea** — сервис для хранения git-репозиториев, на котором размещен этот репозиторий. + +Требования к конфигурации Docker Compose: + +- Использование нескольких контейнеров. +- Наличие хотя бы одного volume. +- Проброс хотя бы одного порта на хост-систему. + +Развертывание должно завершиться успешно. Например, должен быть создан администратор, и система должна функционировать корректно. Это будет проверяться в отчете, поэтому не забывайте делать скриншоты. + +## Ход работы + +1. Установил Docker Desktop на своей операционной системе (Windows). +2. Проверил корректность установки, выполнив команду `docker --version`. +3. Запустил тестовый контейнер с помощью команды `docker run hello-world`. (Скриншот Image_1) +4. Опыт с базовыми командами Docker. (Скриншот Image_2) +5. Проверил версию Docker Compose командой `docker-compose --version`. (Скриншот Image_3) +6. Развернул требуемые сервисы (описано ниже). + +## Пояснение работы кода: + +### WordPress: + +1. Указан образ для сборки: + ```yaml + image: wordpress:latest + ``` + Используется последний официальный образ WordPress. + +2. Задание имени контейнера: + ```yaml + container_name: wordpress + ``` + Контейнер получает имя `wordpress`. + +3. Проброс портов: + ```yaml + ports: + - "8080:80" + ``` + Порт 80 контейнера пробрасывается на порт 8080 хоста. + +4. Том для хранения данных: + ```yaml + volumes: + - wordpress_data:/var/www/html + ``` + Создается том `wordpress_data`, монтируемый в каталог `/var/www/html` контейнера для хранения данных WordPress. + +5. Переменные окружения для подключения к базе данных: + ```yaml + environment: + WORDPRESS_DB_HOST: db + WORDPRESS_DB_USER: example_user + WORDPRESS_DB_PASSWORD: example_password + WORDPRESS_DB_NAME: example_db + ``` + +6. Зависимость от базы данных: + ```yaml + depends_on: db + ``` + WordPress зависит от контейнера с именем `db`, который должен быть запущен первым. + +### Redmine: + +1. Образ для сборки: + ```yaml + image: redmine:latest + ``` + Используется последний официальный образ Redmine. + +2. Имя контейнера: + ```yaml + container_name: redmine + ``` + Контейнер получает имя `redmine`. + +3. Проброс портов: + ```yaml + ports: + - "8081:3000" + ``` + Порт 3000 контейнера пробрасывается на порт 8081 хоста. + +4. Переменные окружения для базы данных: + ```yaml + environment: + REDMINE_DB_MYSQL: redmine_db + REDMINE_DB_USERNAME: redmine_user + REDMINE_DB_PASSWORD: redmine_password + ``` + +5. Зависимость от базы данных: + ```yaml + depends_on: + - redmine_db + ``` + +### Gitea: + +1. Образ для сборки: + ```yaml + image: gitea/gitea:latest + ``` + Используется последний официальный образ Gitea. + +2. Имя контейнера: + ```yaml + container_name: gitea + ``` + Контейнер получает имя `gitea`. + +3. Проброс портов: + ```yaml + ports: + - "8082:3000" + ``` + Порт 3000 контейнера пробрасывается на порт 8082 хоста. + +4. Том для хранения данных: + ```yaml + volumes: + - gitea_data:/data + ``` + Создается том `gitea_data` для хранения данных Gitea. + +5. Переменные окружения для Gitea: + ```yaml + environment: + - USER_UID=1000 + - USER_GID=1000 + ``` + +## Видео по ссылке: + +https://vkvideo.ru/video150882239_456240340https://vkvideo.ru/video150882239_456240340 \ No newline at end of file diff --git a/alkin_ivan_lab_1/docker-compose.yml b/alkin_ivan_lab_1/docker-compose.yml new file mode 100644 index 0000000..932b043 --- /dev/null +++ b/alkin_ivan_lab_1/docker-compose.yml @@ -0,0 +1,68 @@ +version: '3' + +services: + wordpress: + image: wordpress:latest + container_name: wordpress + ports: + - "8080:80" + environment: + WORDPRESS_DB_HOST: db + WORDPRESS_DB_USER: example_user + WORDPRESS_DB_PASSWORD: example_password + WORDPRESS_DB_NAME: example_db + volumes: + - wordpress_data:/var/www/html + depends_on: + - db + + db: + image: mysql:5.7 + container_name: wordpress_db + environment: + MYSQL_DATABASE: example_db + MYSQL_USER: example_user + MYSQL_PASSWORD: example_password + MYSQL_ROOT_PASSWORD: root_password + volumes: + - db_data:/var/lib/mysql + + redmine: + image: redmine:latest + container_name: redmine + ports: + - "8081:3000" + environment: + REDMINE_DB_MYSQL: redmine_db + REDMINE_DB_USERNAME: redmine_user + REDMINE_DB_PASSWORD: redmine_password + depends_on: + - redmine_db + + redmine_db: + image: mysql:5.7 + container_name: redmine_db + environment: + MYSQL_DATABASE: redmine + MYSQL_USER: redmine_user + MYSQL_PASSWORD: redmine_password + MYSQL_ROOT_PASSWORD: root_password + volumes: + - redmine_db_data:/var/lib/mysql + + gitea: + image: gitea/gitea:latest + container_name: gitea + ports: + - "8082:3000" + environment: + - USER_UID=1000 + - USER_GID=1000 + volumes: + - gitea_data:/data + +volumes: + wordpress_data: + db_data: + redmine_db_data: + gitea_data: -- 2.25.1 From 63854633e13f488217065263cb038d7141e7bfd5 Mon Sep 17 00:00:00 2001 From: marimo Date: Mon, 9 Dec 2024 21:05:04 +0400 Subject: [PATCH 2/7] alkin_ivan_lab_1 --- alkin_ivan_lab_1/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/alkin_ivan_lab_1/README.md b/alkin_ivan_lab_1/README.md index 145600c..51a096d 100644 --- a/alkin_ivan_lab_1/README.md +++ b/alkin_ivan_lab_1/README.md @@ -156,6 +156,6 @@ - USER_GID=1000 ``` -## Видео по ссылке: +## Видео по ссылке находится тут: https://vkvideo.ru/video150882239_456240340https://vkvideo.ru/video150882239_456240340 \ No newline at end of file -- 2.25.1 From ee80d0ffdd01ff8c1c7c2682d809493db630cbb3 Mon Sep 17 00:00:00 2001 From: marimo Date: Mon, 9 Dec 2024 21:24:17 +0400 Subject: [PATCH 3/7] alkin_ivan_lab_1 --- alkin_ivan_lab_1/README.md | 2 +- alkin_ivan_lab_1/docker-compose.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/alkin_ivan_lab_1/README.md b/alkin_ivan_lab_1/README.md index 51a096d..a39dc2f 100644 --- a/alkin_ivan_lab_1/README.md +++ b/alkin_ivan_lab_1/README.md @@ -156,6 +156,6 @@ - USER_GID=1000 ``` -## Видео по ссылке находится тут: +## Видео по ссылке находится тут): https://vkvideo.ru/video150882239_456240340https://vkvideo.ru/video150882239_456240340 \ No newline at end of file diff --git a/alkin_ivan_lab_1/docker-compose.yml b/alkin_ivan_lab_1/docker-compose.yml index 932b043..1e921e1 100644 --- a/alkin_ivan_lab_1/docker-compose.yml +++ b/alkin_ivan_lab_1/docker-compose.yml @@ -1,5 +1,6 @@ version: '3' + services: wordpress: image: wordpress:latest -- 2.25.1 From 8c5f33678ed9aa492c9c4a796fab8817a9d3acce Mon Sep 17 00:00:00 2001 From: marimo Date: Mon, 9 Dec 2024 23:49:29 +0400 Subject: [PATCH 4/7] alkin_ivan_lab_2 --- alkin_ivan_lab_2/.gitignore | 10 +++ alkin_ivan_lab_2/README.md | 89 +++++++++++++++++++ alkin_ivan_lab_2/data_generator/Dockerfile | 7 ++ .../data_generator/generate_data.py | 29 ++++++ alkin_ivan_lab_2/docker-compose.yml | 18 ++++ alkin_ivan_lab_2/worker-1/Dockerfile | 14 +++ alkin_ivan_lab_2/worker-1/main.py | 35 ++++++++ alkin_ivan_lab_2/worker-2/Dockerfile | 14 +++ alkin_ivan_lab_2/worker-2/main.py | 23 +++++ 9 files changed, 239 insertions(+) create mode 100644 alkin_ivan_lab_2/.gitignore create mode 100644 alkin_ivan_lab_2/README.md create mode 100644 alkin_ivan_lab_2/data_generator/Dockerfile create mode 100644 alkin_ivan_lab_2/data_generator/generate_data.py create mode 100644 alkin_ivan_lab_2/docker-compose.yml create mode 100644 alkin_ivan_lab_2/worker-1/Dockerfile create mode 100644 alkin_ivan_lab_2/worker-1/main.py create mode 100644 alkin_ivan_lab_2/worker-2/Dockerfile create mode 100644 alkin_ivan_lab_2/worker-2/main.py diff --git a/alkin_ivan_lab_2/.gitignore b/alkin_ivan_lab_2/.gitignore new file mode 100644 index 0000000..a96dde0 --- /dev/null +++ b/alkin_ivan_lab_2/.gitignore @@ -0,0 +1,10 @@ +# .gitignore +__pycache__/ +*.pyc +*.pyo +*.pyd +*.db +*.log +*.bak +*.swp +*.swo diff --git a/alkin_ivan_lab_2/README.md b/alkin_ivan_lab_2/README.md new file mode 100644 index 0000000..7ec720f --- /dev/null +++ b/alkin_ivan_lab_2/README.md @@ -0,0 +1,89 @@ +Для выполнения второй лабораторной работы по созданию распределённого приложения с использованием 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 \ No newline at end of file diff --git a/alkin_ivan_lab_2/data_generator/Dockerfile b/alkin_ivan_lab_2/data_generator/Dockerfile new file mode 100644 index 0000000..b98495c --- /dev/null +++ b/alkin_ivan_lab_2/data_generator/Dockerfile @@ -0,0 +1,7 @@ +FROM python:3.9-slim + +WORKDIR /app + +COPY . /app + +CMD ["python", "generate_data.py"] diff --git a/alkin_ivan_lab_2/data_generator/generate_data.py b/alkin_ivan_lab_2/data_generator/generate_data.py new file mode 100644 index 0000000..e8f2db5 --- /dev/null +++ b/alkin_ivan_lab_2/data_generator/generate_data.py @@ -0,0 +1,29 @@ +import os +import random + + +def generate_random_files(directory, num_files, num_lines_per_file, min_value, max_value): + os.makedirs(directory, exist_ok=True) + + for i in range(num_files): + file_path = os.path.join(directory, f"file_{i + 1}.txt") + with open(file_path, 'w') as f: + for _ in range(num_lines_per_file): + random_number = random.randint(min_value, max_value) + f.write(f"{random_number}\n") + print(f"Generated file: {file_path}") + + +def main(): + data_directory = '/var/data' + num_files = 10 + num_lines_per_file = 12 + min_value = 1 + max_value = 100 + + generate_random_files(data_directory, num_files, num_lines_per_file, min_value, max_value) + print(f"Generated {num_files} files in {data_directory}") + + +if __name__ == "__main__": + main() diff --git a/alkin_ivan_lab_2/docker-compose.yml b/alkin_ivan_lab_2/docker-compose.yml new file mode 100644 index 0000000..9fedd96 --- /dev/null +++ b/alkin_ivan_lab_2/docker-compose.yml @@ -0,0 +1,18 @@ +# docker-compose.yml + +services: + worker-1: + build: + context: ./worker-1 + volumes: + - ./data:/var/data + - ./result:/var/result + depends_on: + - worker-2 + + worker-2: + build: + context: ./worker-2 + volumes: + - ./data:/var/data + - ./result:/var/result diff --git a/alkin_ivan_lab_2/worker-1/Dockerfile b/alkin_ivan_lab_2/worker-1/Dockerfile new file mode 100644 index 0000000..d542d79 --- /dev/null +++ b/alkin_ivan_lab_2/worker-1/Dockerfile @@ -0,0 +1,14 @@ +# worker-1/Dockerfile +# Stage 1: Build the application +FROM python:3.10-slim as builder + +WORKDIR /app +COPY ./main.py . + +# Stage 2: Set up the runtime environment +FROM python:3.10-slim + +WORKDIR /app +COPY --from=builder /app/main.py . + +CMD ["python", "main.py"] diff --git a/alkin_ivan_lab_2/worker-1/main.py b/alkin_ivan_lab_2/worker-1/main.py new file mode 100644 index 0000000..d97a463 --- /dev/null +++ b/alkin_ivan_lab_2/worker-1/main.py @@ -0,0 +1,35 @@ +# worker-1/main.py +import os + + +def find_file_with_most_lines(directory): + files = os.listdir(directory) + max_lines = 0 + target_file = None + for filename in files: + filepath = os.path.join(directory, filename) + if os.path.isfile(filepath): + with open(filepath, 'r') as file: + lines = file.readlines() + if len(lines) > max_lines: + max_lines = len(lines) + target_file = filepath + return target_file + + +def main(): + source_directory = '/var/data' + result_file = '/var/result/data.txt' + + file_to_copy = find_file_with_most_lines(source_directory) + + if file_to_copy: + with open(file_to_copy, 'r') as source, open(result_file, 'w') as dest: + dest.writelines(source.readlines()) + print(f"File with the most lines: {file_to_copy} copied to {result_file}") + else: + print("No files found in the source directory.") + + +if __name__ == "__main__": + main() diff --git a/alkin_ivan_lab_2/worker-2/Dockerfile b/alkin_ivan_lab_2/worker-2/Dockerfile new file mode 100644 index 0000000..d542d79 --- /dev/null +++ b/alkin_ivan_lab_2/worker-2/Dockerfile @@ -0,0 +1,14 @@ +# worker-1/Dockerfile +# Stage 1: Build the application +FROM python:3.10-slim as builder + +WORKDIR /app +COPY ./main.py . + +# Stage 2: Set up the runtime environment +FROM python:3.10-slim + +WORKDIR /app +COPY --from=builder /app/main.py . + +CMD ["python", "main.py"] diff --git a/alkin_ivan_lab_2/worker-2/main.py b/alkin_ivan_lab_2/worker-2/main.py new file mode 100644 index 0000000..acb7ed8 --- /dev/null +++ b/alkin_ivan_lab_2/worker-2/main.py @@ -0,0 +1,23 @@ +# worker-2/main.py +def find_min_number(filename): + with open(filename, 'r') as file: + numbers = [int(line.strip()) for line in file.readlines()] + min_number = min(numbers) + return min_number + + +def main(): + input_file = '/var/data/data.txt' + output_file = '/var/result/result.txt' + + min_number = find_min_number(input_file) + result = min_number ** 3 # Cube of the minimum number + + with open(output_file, 'w') as file: + file.write(str(result)) + + print(f"Minimum number's cube: {result} written to {output_file}") + + +if __name__ == "__main__": + main() -- 2.25.1 From 3df2cc1a48a7ce6b5572fffd397037c385c0050b Mon Sep 17 00:00:00 2001 From: marimo Date: Mon, 9 Dec 2024 23:56:12 +0400 Subject: [PATCH 5/7] alkin_ivan_lab_2 --- alkin_ivan_lab_2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/alkin_ivan_lab_2/README.md b/alkin_ivan_lab_2/README.md index 7ec720f..e86d616 100644 --- a/alkin_ivan_lab_2/README.md +++ b/alkin_ivan_lab_2/README.md @@ -86,4 +86,4 @@ __pycache__/ ## Видео ВК -https://vk.com/video64471408_456239205?list=ln-nzLhpgninZdZBOzarw \ No newline at end of file +https://vkvideo.ru/video150882239_456240341 \ No newline at end of file -- 2.25.1 From 753e2f6593874e6a0844902f9788162a683f5119 Mon Sep 17 00:00:00 2001 From: marimo Date: Thu, 12 Dec 2024 22:12:41 +0400 Subject: [PATCH 6/7] Revert "alkin_ivan_lab_1" This reverts commit ee80d0ffdd01ff8c1c7c2682d809493db630cbb3. --- alkin_ivan_lab_1/README.md | 2 +- alkin_ivan_lab_1/docker-compose.yml | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/alkin_ivan_lab_1/README.md b/alkin_ivan_lab_1/README.md index a39dc2f..51a096d 100644 --- a/alkin_ivan_lab_1/README.md +++ b/alkin_ivan_lab_1/README.md @@ -156,6 +156,6 @@ - USER_GID=1000 ``` -## Видео по ссылке находится тут): +## Видео по ссылке находится тут: https://vkvideo.ru/video150882239_456240340https://vkvideo.ru/video150882239_456240340 \ No newline at end of file diff --git a/alkin_ivan_lab_1/docker-compose.yml b/alkin_ivan_lab_1/docker-compose.yml index 1e921e1..932b043 100644 --- a/alkin_ivan_lab_1/docker-compose.yml +++ b/alkin_ivan_lab_1/docker-compose.yml @@ -1,6 +1,5 @@ version: '3' - services: wordpress: image: wordpress:latest -- 2.25.1 From 7e69d49c4dbd630203dcda87aaff9cf14f77fe5b Mon Sep 17 00:00:00 2001 From: marimo Date: Thu, 12 Dec 2024 22:16:56 +0400 Subject: [PATCH 7/7] Revert "alkin_ivan_lab_1" This reverts commit b38e7552 --- alkin_ivan_lab_1/README.md | 161 ---------------------------- alkin_ivan_lab_1/docker-compose.yml | 68 ------------ 2 files changed, 229 deletions(-) delete mode 100644 alkin_ivan_lab_1/README.md delete mode 100644 alkin_ivan_lab_1/docker-compose.yml diff --git a/alkin_ivan_lab_1/README.md b/alkin_ivan_lab_1/README.md deleted file mode 100644 index 51a096d..0000000 --- a/alkin_ivan_lab_1/README.md +++ /dev/null @@ -1,161 +0,0 @@ -Вот перефразированный текст: - ---- - -# Лабораторная работа №1 — Ознакомление с Docker и Docker Compose - -**Цель**: освоение технологий контейнеризации. - -**Задачи**: -1. Установить Docker — систему для контейнеризации. -2. Изучить основы работы и принципы Docker. -3. Изучить утилиту Docker Compose и формат файла docker-compose.yml. -4. Развернуть как минимум три различных сервиса с использованием Docker Compose. -5. Оформить отчет в формате Markdown и создать Pull Request в git-репозитории. - -## Развертывание сервисов - -Необходимо развернуть не менее трёх сервисов с помощью Docker Compose из предложенного списка: - -1. **MediaWiki** — движок для вики-сайтов. -2. **Redmine** — система управления задачами (баг-трекер). -3. **WordPress** — популярная система управления контентом. -4. **Drupal** — другая известная система управления контентом. -5. **Moodle** — платформа для онлайн-обучения, например, используется на . -6. **Gitea** — сервис для хранения git-репозиториев, на котором размещен этот репозиторий. - -Требования к конфигурации Docker Compose: - -- Использование нескольких контейнеров. -- Наличие хотя бы одного volume. -- Проброс хотя бы одного порта на хост-систему. - -Развертывание должно завершиться успешно. Например, должен быть создан администратор, и система должна функционировать корректно. Это будет проверяться в отчете, поэтому не забывайте делать скриншоты. - -## Ход работы - -1. Установил Docker Desktop на своей операционной системе (Windows). -2. Проверил корректность установки, выполнив команду `docker --version`. -3. Запустил тестовый контейнер с помощью команды `docker run hello-world`. (Скриншот Image_1) -4. Опыт с базовыми командами Docker. (Скриншот Image_2) -5. Проверил версию Docker Compose командой `docker-compose --version`. (Скриншот Image_3) -6. Развернул требуемые сервисы (описано ниже). - -## Пояснение работы кода: - -### WordPress: - -1. Указан образ для сборки: - ```yaml - image: wordpress:latest - ``` - Используется последний официальный образ WordPress. - -2. Задание имени контейнера: - ```yaml - container_name: wordpress - ``` - Контейнер получает имя `wordpress`. - -3. Проброс портов: - ```yaml - ports: - - "8080:80" - ``` - Порт 80 контейнера пробрасывается на порт 8080 хоста. - -4. Том для хранения данных: - ```yaml - volumes: - - wordpress_data:/var/www/html - ``` - Создается том `wordpress_data`, монтируемый в каталог `/var/www/html` контейнера для хранения данных WordPress. - -5. Переменные окружения для подключения к базе данных: - ```yaml - environment: - WORDPRESS_DB_HOST: db - WORDPRESS_DB_USER: example_user - WORDPRESS_DB_PASSWORD: example_password - WORDPRESS_DB_NAME: example_db - ``` - -6. Зависимость от базы данных: - ```yaml - depends_on: db - ``` - WordPress зависит от контейнера с именем `db`, который должен быть запущен первым. - -### Redmine: - -1. Образ для сборки: - ```yaml - image: redmine:latest - ``` - Используется последний официальный образ Redmine. - -2. Имя контейнера: - ```yaml - container_name: redmine - ``` - Контейнер получает имя `redmine`. - -3. Проброс портов: - ```yaml - ports: - - "8081:3000" - ``` - Порт 3000 контейнера пробрасывается на порт 8081 хоста. - -4. Переменные окружения для базы данных: - ```yaml - environment: - REDMINE_DB_MYSQL: redmine_db - REDMINE_DB_USERNAME: redmine_user - REDMINE_DB_PASSWORD: redmine_password - ``` - -5. Зависимость от базы данных: - ```yaml - depends_on: - - redmine_db - ``` - -### Gitea: - -1. Образ для сборки: - ```yaml - image: gitea/gitea:latest - ``` - Используется последний официальный образ Gitea. - -2. Имя контейнера: - ```yaml - container_name: gitea - ``` - Контейнер получает имя `gitea`. - -3. Проброс портов: - ```yaml - ports: - - "8082:3000" - ``` - Порт 3000 контейнера пробрасывается на порт 8082 хоста. - -4. Том для хранения данных: - ```yaml - volumes: - - gitea_data:/data - ``` - Создается том `gitea_data` для хранения данных Gitea. - -5. Переменные окружения для Gitea: - ```yaml - environment: - - USER_UID=1000 - - USER_GID=1000 - ``` - -## Видео по ссылке находится тут: - -https://vkvideo.ru/video150882239_456240340https://vkvideo.ru/video150882239_456240340 \ No newline at end of file diff --git a/alkin_ivan_lab_1/docker-compose.yml b/alkin_ivan_lab_1/docker-compose.yml deleted file mode 100644 index 932b043..0000000 --- a/alkin_ivan_lab_1/docker-compose.yml +++ /dev/null @@ -1,68 +0,0 @@ -version: '3' - -services: - wordpress: - image: wordpress:latest - container_name: wordpress - ports: - - "8080:80" - environment: - WORDPRESS_DB_HOST: db - WORDPRESS_DB_USER: example_user - WORDPRESS_DB_PASSWORD: example_password - WORDPRESS_DB_NAME: example_db - volumes: - - wordpress_data:/var/www/html - depends_on: - - db - - db: - image: mysql:5.7 - container_name: wordpress_db - environment: - MYSQL_DATABASE: example_db - MYSQL_USER: example_user - MYSQL_PASSWORD: example_password - MYSQL_ROOT_PASSWORD: root_password - volumes: - - db_data:/var/lib/mysql - - redmine: - image: redmine:latest - container_name: redmine - ports: - - "8081:3000" - environment: - REDMINE_DB_MYSQL: redmine_db - REDMINE_DB_USERNAME: redmine_user - REDMINE_DB_PASSWORD: redmine_password - depends_on: - - redmine_db - - redmine_db: - image: mysql:5.7 - container_name: redmine_db - environment: - MYSQL_DATABASE: redmine - MYSQL_USER: redmine_user - MYSQL_PASSWORD: redmine_password - MYSQL_ROOT_PASSWORD: root_password - volumes: - - redmine_db_data:/var/lib/mysql - - gitea: - image: gitea/gitea:latest - container_name: gitea - ports: - - "8082:3000" - environment: - - USER_UID=1000 - - USER_GID=1000 - volumes: - - gitea_data:/data - -volumes: - wordpress_data: - db_data: - redmine_db_data: - gitea_data: -- 2.25.1