diff --git a/minhasapov_ruslan_lab_1/README.md b/minhasapov_ruslan_lab_1/README.md new file mode 100644 index 0000000..0dd3760 --- /dev/null +++ b/minhasapov_ruslan_lab_1/README.md @@ -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`)*, выполнить первоначальную настройку и создать суперпользователя. + +--- + +**Видеодемонстрация работы:** + +Видео доступно по *[ссылке](https://disk.yandex.ru/i/6Efipp3Gxs9-Jw)* + +--- \ No newline at end of file diff --git a/minhasapov_ruslan_lab_1/docker-compose.yml b/minhasapov_ruslan_lab_1/docker-compose.yml new file mode 100644 index 0000000..b1ce000 --- /dev/null +++ b/minhasapov_ruslan_lab_1/docker-compose.yml @@ -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: