forked from Alexey/DAS_2024_1
Compare commits
1 Commits
zhimolostn
...
minhasapov
| Author | SHA1 | Date | |
|---|---|---|---|
| 4c76a9dea6 |
64
minhasapov_ruslan_lab_1/README.md
Normal file
64
minhasapov_ruslan_lab_1/README.md
Normal file
@@ -0,0 +1,64 @@
|
||||
## Лабораторная работа №1: Знакомство с docker и docker-compose
|
||||
|
||||
---
|
||||
|
||||
**Цель:** изучение современных технологий контейнеризации.
|
||||
|
||||
**Задачи:**
|
||||
|
||||
1. Установить средство контейнеризации docker.
|
||||
2. Изучить применение и принципы docker.
|
||||
3. Изучить утилиту docker-compose и структуру файла docker-compose.yml.
|
||||
4. Развернуть не менее 3х различных сервисов при помощи docker-compose.
|
||||
5. Оформить отчёт в формате Markdown и создать Pull Request в git-репозитории.
|
||||
|
||||
---
|
||||
|
||||
**Сервисы:**
|
||||
|
||||
* **Gitea:** Легковесная и самодостаточная система управления версиями кода с веб-интерфейсом.
|
||||
* **Postgres:** Мощная система управления реляционными базами данных с открытым исходным кодом.
|
||||
* **Redis:** Высокопроизводительное хранилище данных типа "ключ-значение", используемое для кэширования, сессий и других задач.
|
||||
|
||||
---
|
||||
|
||||
**Инструкция по запуску:**
|
||||
|
||||
1. **Установка Docker:** Необходимо убедиться, установлен ли Docker на системе, в ином случае установить его.
|
||||
2. **Навигация:** Перейти в директорию с файлом `docker-compose.yml`.
|
||||
3. **Запуск:** Необходимо выполнить следующую команду в терминале:
|
||||
```bash
|
||||
docker-compose up --build --remove-orphans
|
||||
```
|
||||
Данная команда создаст и запустит все необходимые контейнеры, описанные в `docker-compose.yml`.
|
||||
|
||||
**Проверка:**
|
||||
|
||||
Для проверки успешного запуска нужно выполнить команду:
|
||||
|
||||
```bash
|
||||
docker ps -a
|
||||
```
|
||||
|
||||
В случае успеха мы можем увидеть список запущенных контейнеров (gitea, postgres и redis):
|
||||
```bash
|
||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
6ea2e28126a8 gitea/gitea:1.22.2 "/usr/bin/entrypoint…" About a minute ago Up 9 seconds 0.0.0.0:3000->3000/tcp, 0.0.0.0:222->22/tcp minhasapov_ruslan_lab_1-gitea-1
|
||||
2490f332bc90 postgres:14 "docker-entrypoint.s…" About a minute ago Up 9 seconds 0.0.0.0:5432->5432/tcp minhasapov_ruslan_lab_1-postgres-1
|
||||
c5580d8fe1d7 redis:latest "docker-entrypoint.s…" About a minute ago Up 9 seconds 0.0.0.0:6379->6379/tcp minhasapov_ruslan_lab_1-redis-1
|
||||
```
|
||||
**Примечание:**
|
||||
|
||||
*Файл `docker-compose.yml` содержит подробную информацию о конфигурации каждого сервиса, включая порты, тома и переменные окружения.*
|
||||
|
||||
**Важно:**
|
||||
|
||||
После первого запуска **Gitea**, необходимо зайти на сервис *(по адресу `http://localhost:3000`)*, выполнить первоначальную настройку и создать суперпользователя.
|
||||
|
||||
---
|
||||
|
||||
**Видеодемонстрация работы:**
|
||||
|
||||
Видео доступно по <u>*[ссылке](https://disk.yandex.ru/i/6Efipp3Gxs9-Jw)*</u>
|
||||
|
||||
---
|
||||
45
minhasapov_ruslan_lab_1/docker-compose.yml
Normal file
45
minhasapov_ruslan_lab_1/docker-compose.yml
Normal file
@@ -0,0 +1,45 @@
|
||||
services: # начало объявления сервисов, которые будут запущены
|
||||
postgres: # указываем название сервиса
|
||||
image: postgres:14 # указываем название и/или версии образа Docker для Postgres
|
||||
restart: always # автоматический перезапуск контейнера, если он упал
|
||||
ports:
|
||||
- "5432:5432" # пробрасываем порт 5432 из контейнера на хост-машину
|
||||
# (слева порт хостовой машины, справа порт контейнера)
|
||||
volumes: # указываются монтированные тома, папки, файлы
|
||||
- postgres_data:/var/lib/postgresql/data # монтирует том postgres_data к /var/lib/postgresql/data,
|
||||
# чтобы данные Postgres сохранялись после перезапуска контейнера
|
||||
environment: # задаем переменные окружения для Postgres, такие как:
|
||||
POSTGRES_USER: postgres_user # имя пользователя
|
||||
POSTGRES_PASSWORD: postgres_password # пароль пользователя
|
||||
POSTGRES_DB: postgres_db # имя БД
|
||||
|
||||
gitea:
|
||||
image: gitea/gitea:1.22.2
|
||||
restart: always
|
||||
ports:
|
||||
- "3000:3000" # пробрасывает порты 3000 (HTTP, веб-интерфейс)
|
||||
- "222:22" # и 22 (SSH) из контейнера на хост-машину
|
||||
volumes:
|
||||
- gitea_data:/data
|
||||
environment:
|
||||
GITEA__database__DB_TYPE: postgres
|
||||
GITEA__database__HOST: postgres:5432 # хост бд, название сервиса выступает в роли доменного имени и внутри сети разрешается в ip нужного контейнера
|
||||
GITEA__database__NAME: postgres_db
|
||||
GITEA__database__USER: postgres_user
|
||||
GITEA__database__PASSWD: postgres_password
|
||||
depends_on: # указывается зависимость запуска контейнера от другого сервиса
|
||||
- postgres # Gitea зависит от Postgres, поэтому Postgres будет запущен первым
|
||||
- redis
|
||||
|
||||
redis:
|
||||
image: redis:latest
|
||||
restart: always
|
||||
ports:
|
||||
- "6379:6379"
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
|
||||
volumes: # определяем тома, которые будут использоваться сервисами
|
||||
postgres_data:
|
||||
gitea_data:
|
||||
redis_data:
|
||||
@@ -1,15 +0,0 @@
|
||||
# Moodle
|
||||
MARIADB_USER=moodle_user
|
||||
MARIADB_ROOT_PASSWORD=moodle_root_password
|
||||
MARIADB_PASSWORD=moodle_password
|
||||
MARIADB_DATABASE=moodle_db
|
||||
|
||||
# WordPress
|
||||
MYSQL_ROOT_PASSWORD=wordpress_root_password
|
||||
MYSQL_DATABASE=wordpress_db
|
||||
MYSQL_USER=wordpress_user
|
||||
MYSQL_PASSWORD=wordpress_password
|
||||
|
||||
# Ports
|
||||
MOODLE_PORT=80
|
||||
WORDPRESS_PORT=8081
|
||||
@@ -1,70 +0,0 @@
|
||||
# Отчет по лабораторной работе №1
|
||||
|
||||
## Поставленные задачи
|
||||
|
||||
1. Установить средство контейнеризации **docker**.
|
||||
2. Изучить применение и принципы **docker**.
|
||||
3. Изучить утилиту **docker-compose** и структуру файла `docker-compose.yml`.
|
||||
4. Развернуть не менее 3х различных сервисов при помощи **docker-compose**.
|
||||
5. Оформить отчёт в формате **Markdown** и создать **Pull Request** в git-репозитории.
|
||||
|
||||
## Сервисы
|
||||
|
||||
1. **Moodle** — платформа для дистанционного обучения (LMS).
|
||||
2. **WordPress** — популярная система управления контентом (CMS).
|
||||
3. **MariaDB** — реляционная база данных для хранения данных.
|
||||
|
||||
## Запуск работы
|
||||
|
||||
1. Убедиться, что установлены необходимые технологии:
|
||||
- Docker: Платформа для контейнеризации приложений.
|
||||
- Docker Compose: Инструмент для запуска многоконтейнерных приложений на основе `docker-compose.yaml`. Обычно поставляется вместе с Docker. Чтобы проверить, установлена ли утилита, нужно запустить команду:
|
||||
```bash
|
||||
docker-compose --version
|
||||
```
|
||||
|
||||
2. В директории, где находится файл `docker-compose.yaml`, выполнить следующую команду для запуска всех сервисов:
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
Эта команда запустит контейнеры в фоновом режиме. Для отслеживания процесса можно использовать команду без флага `-d`, чтобы контейнеры запускались в режиме вывода логов.
|
||||
|
||||
3. После успешного запуска можно перейти в браузер и проверить:
|
||||
- Moodle доступен по адресу: [http://localhost:80](http://localhost:80) (или по порту, указанному в переменной `MOODLE_PORT`).
|
||||
- WordPress доступен по адресу: [http://localhost:8081](http://localhost:8081) (или по порту, указанному в переменной `WORDPRESS_PORT`).
|
||||
|
||||
## Другие возможности
|
||||
|
||||
1. Чтобы остановить контейнеры, нужно выполнить команду:
|
||||
```bash
|
||||
docker compose down
|
||||
```
|
||||
Эта команда остановит все контейнеры и удалит их, но сохранит данные в volume-ах.
|
||||
|
||||
2. Чтобы поставить контейнеры на паузу (без их остановки), нужно выполнить команду:
|
||||
```bash
|
||||
docker compose pause
|
||||
```
|
||||
Контейнеры останутся в памяти, но их процессы будут приостановлены.
|
||||
|
||||
3. Чтобы снять паузу, нужно выполнить команду:
|
||||
```bash
|
||||
docker compose unpause
|
||||
```
|
||||
|
||||
## Описание работы
|
||||
|
||||
1. **Сервис mariadb:**
|
||||
Этот сервис поднимает контейнер с MariaDB (образ от Bitnami), который хранит данные для Moodle. Здесь используются переменные окружения для конфигурации имени базы данных, паролей и пользователя. Данные базы хранятся в volume moodle_db_data, чтобы они сохранялись даже после перезапуска контейнера.
|
||||
2. **Сервис wordpress_db:**
|
||||
Аналогично mariadb, этот сервис поднимает контейнер MariaDB для базы данных WordPress. Данные хранятся в отдельном volume wordpress_db_data.
|
||||
3. **Сервис moodle:**
|
||||
Это контейнер с приложением Moodle, который зависит от настроенного контейнера базы данных mariadb. Moodle использует переменные окружения для подключения к своей базе данных. Также используются volumes для хранения файлов Moodle и данных, загружаемых пользователями, что обеспечивает их сохранение между перезапусками.
|
||||
4. **Сервис wordpress:**
|
||||
Этот контейнер поднимает приложение WordPress, которое зависит от сервиса базы данных wordpress_db. Volumes используются для хранения файлов WordPress (включая темы, плагины и медиафайлы), что гарантирует их сохранность между перезапусками.
|
||||
|
||||
Построчное описание docker-compose.yaml выполнено в самом файле.
|
||||
|
||||
## Демонстрационное видео
|
||||
|
||||
Видеозапись доступна по адресу: [https://vk.com/video193898050_456240868?list=ln-FRUcWLBDSsFz3YNUEk](https://vk.com/video193898050_456240868?list=ln-FRUcWLBDSsFz3YNUEk)
|
||||
@@ -1,62 +0,0 @@
|
||||
services:
|
||||
mariadb: # Определение сервиса
|
||||
image: bitnami/mariadb:11.4 # Имя образа docker и его версия (предпочтиельно указывать версию явно, вместо использования latest)
|
||||
container_name: mariadb # Имя контейнера
|
||||
environment: # Переменные окружения
|
||||
- MARIADB_USER=${MARIADB_USER} # Имя пользователя
|
||||
- MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD} # Пароль для пользователя root
|
||||
- MARIADB_PASSWORD=${MARIADB_PASSWORD} # Пароль для пользователя
|
||||
- MARIADB_DATABASE=${MARIADB_DATABASE} # Имя базы данных
|
||||
volumes: # Настройка volumes для хранения данных
|
||||
- moodle_db_data:/bitnami/mariadb # Хранение данных в volume moodle_db_data
|
||||
|
||||
# Далее комментарии идентичны
|
||||
wordpress_db:
|
||||
image: mariadb:11.4
|
||||
container_name: wordpress_db
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
||||
MYSQL_USER: ${MYSQL_USER}
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
||||
volumes:
|
||||
- wordpress_db_data:/var/lib/mysql # Хранение данных в volume wordpress_db_data
|
||||
|
||||
moodle:
|
||||
image: bitnami/moodle:4.4
|
||||
container_name: moodle
|
||||
environment:
|
||||
- MOODLE_DATABASE_HOST=mariadb # Указание хоста базы данных
|
||||
- MOODLE_DATABASE_PORT_NUMBER=3306
|
||||
- MOODLE_DATABASE_NAME=${MARIADB_DATABASE}
|
||||
- MOODLE_DATABASE_USER=${MARIADB_USER}
|
||||
- MOODLE_DATABASE_PASSWORD=${MARIADB_PASSWORD}
|
||||
volumes:
|
||||
- moodle_data:/bitnami/moodle # Хранение данных в volume moodle_data
|
||||
- moodledata_data:/bitnami/moodledata # Хранение данных (moodledata) в отдельном volume
|
||||
depends_on: # Зависимость от сервиса mariadb. Данный сервис не запустится, пока не запустится mariadb
|
||||
- mariadb
|
||||
ports: # Проброс порта для доступа
|
||||
- "${MOODLE_PORT}:8080"
|
||||
|
||||
wordpress:
|
||||
image: wordpress:6
|
||||
container_name: wordpress
|
||||
environment:
|
||||
WORDPRESS_DB_HOST: wordpress_db
|
||||
WORDPRESS_DB_USER: ${MYSQL_USER}
|
||||
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
|
||||
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
|
||||
volumes:
|
||||
- wordpress_data:/var/www/html # Хранение данных в volume wordpress_data
|
||||
depends_on: # Зависимость от сервиса wordpress_db, Данный сервис не запустится, пока не запустится wordpress_db
|
||||
- wordpress_db
|
||||
ports:
|
||||
- "${WORDPRESS_PORT}:80"
|
||||
|
||||
volumes: # Определение volumes для хранения данных
|
||||
moodle_db_data:
|
||||
wordpress_db_data:
|
||||
moodle_data:
|
||||
moodledata_data:
|
||||
wordpress_data:
|
||||
Reference in New Issue
Block a user