{"id":23585651,"url":"https://github.com/space27/docker_lab","last_synced_at":"2026-04-04T20:33:19.341Z","repository":{"id":267161587,"uuid":"899706135","full_name":"Space27/docker_lab","owner":"Space27","description":"Лабораторная работа по  дисциплине \"Сети и Телекоммуникации\". Тема: Docker: докеризация приложения","archived":false,"fork":false,"pushed_at":"2024-12-10T17:51:00.000Z","size":10,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-29T16:34:23.085Z","etag":null,"topics":["docker","docker-compose","dockerfile","java","liquibase","postgresql","spring"],"latest_commit_sha":null,"homepage":"https://github.com/Space27/JavaBackendSpring","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Space27.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-06T20:46:15.000Z","updated_at":"2024-12-10T17:51:04.000Z","dependencies_parsed_at":"2024-12-08T19:34:26.516Z","dependency_job_id":"e3c235df-0a8f-469e-a7d6-54d3963149e6","html_url":"https://github.com/Space27/docker_lab","commit_stats":null,"previous_names":["space27/docker_lab"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Space27/docker_lab","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Space27%2Fdocker_lab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Space27%2Fdocker_lab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Space27%2Fdocker_lab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Space27%2Fdocker_lab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Space27","download_url":"https://codeload.github.com/Space27/docker_lab/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Space27%2Fdocker_lab/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31413269,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T20:09:54.854Z","status":"ssl_error","status_checked_at":"2026-04-04T20:09:44.350Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-compose","dockerfile","java","liquibase","postgresql","spring"],"created_at":"2024-12-27T03:16:14.330Z","updated_at":"2026-04-04T20:33:18.997Z","avatar_url":"https://github.com/Space27.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Docker: докеризация приложения\n\n* Дисциплина: Сети и Телекоммуникации\n* Тема: Docker: докеризация приложения\n* Группа: 2300\n* Студент: Локосов Даниил\n\n## Описание проекта\n\nВ качестве проекта, использующего базу данных, выбран [личный проект](https://github.com/Space27/JavaBackendSpring),\nнаписанный на `Java` с использованием фреймворка `Spring`. Он представляет собою два сервиса: Telegram бот и сервис,\nотслеживающий изменения по ссылкам. То есть bot зависит от scrapper, а scrapper независим.  \nscrapper в качестве СУБД использует `PostgreSQL`.  \nСервисы общаются по HTTP, а также по `Kafka`, поэтому есть опциональная зависимость от `Kafka`. Также у сервисов\nотслеживаются метрики, поэтому есть опциональная зависимость от `Prometheus` и `Grafana`.\n\n## Подготовка сервисов к докеризации\n\nНеобходимо обернуть сервисы bot и scrapper в docker-образы таким образом, чтобы они начинали работу непосредственно при\nстарте контейнера и чтобы у них сохранилась возможность общаться как между собой, так и между БД, очередью сообщений.  \nДля решения проблемы общения модифицированы конфигурационные файлы сервисов путём добавления нового профиля *docker*,\nкоторый изменяет хосты с `localhost` на `host.docker.internal`, который является тем же хостом, но доступным из\nконтейнера.  \nКонфигурации сервисов наполнены переменными окружения для возможности настройки Telegram-токена бота, использования\nочереди, режима retry, способа доступа к БД, а также параметры БД.\n\n## Докеризация приложения\n\nДля каждого из сервисов написан отдельный Dockerfile: [bot.Dockerfile](bot.Dockerfile)\nи [scrapper.Dockerfile](scrapper.Dockerfile).\n\n### Особенности Dockerfile'ов:\n\n* Применена *multi-staged* сборка, применение которой позволило уменьшить размер образов с 300Мб до 150Мб. Она состоит из\n  2-х этапов:\n    * извлечение всех нужных файлов и зависимости через образ `eclipse-temurin:21-jdk-alpine`\n    * копирование нужных для запуска файлов и запуск приложения через легковесный образ `alpine`\n* Использование легковесного `alpine` образа в качестве основного\n* Работа в контейнере ведется от непривилегированного пользователя, что увеличивает безопасность\n* Образы объявляют значения переменных окружения по умолчанию\n* Объявлены порты, на которых работают образы\n* Образ `scrapper` дополнительно несет файлы миграции и конфигурации `Prometheus` для возможности скачки данных файлов, имея\n  только образ\n\n### Сборка приложения\n\nДля сборки применен `docker compose`, который можно кратко описать следующим образом:\n\n* `bot` зависит от `scrapper`\n* `scrapper` зависит от БД и миграций\n* миграции зависят от БД, поэтому перезапускаются до успеха (`restart: on-failure`), поскольку они могут начаться до\n  полного запуска БД\n* files выгружает файлы, необходимые для запуска миграций и отслеживания метрик\n\nТаким образом, для полного запуска приложения необходим лишь один [compose.yml](compose.yml) файл.  \nТакже стоит отметить, что для миграции БД используется система `liquibase`, которая позволяет запуск внутри `Spring`, но\nэто является плохой практикой, поэтому миграции вынесены отдельно от самого приложения, но запускаются автоматически при\nкорректном запуске compose-файла через docker-образ liquibase.\n\n### Выкатка образов\n\nДля публикации образов в `Github Packages` для возможности установки собранных образов прописан `Github Workflow`,\nкоторый позволил автоматически собирать образы при запуске `Build` приложений.  \nОпубликованные образы см. [здесь](https://github.com/Space27?tab=packages\u0026repo_name=JavaBackendSpring).\n\n## Запуск приложения\n\nПолное описание\nсм. [здесь](https://github.com/Space27/JavaBackendSpring/tree/master#%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0)\n\n1. Установить [compose.yml](compose.yml)\n2. `docker compose run -d --rm files` для установки файлов миграций\n3. `docker compose up -d scrapper` для запуска scrapper с миграциями и БД. Если есть telegram-token для проверки, то\n   можно ввести его для переменных окружения bot и запустить `docker compose up -d bot`\n4. Для проверки работоспособности перейти на [localhost:8080/swagger-ui](http://localhost:8080/swagger-ui/index.html)\n5. Завершить приложение `docker compose down`\n\n## Приложение\n\n* Dockerfile's:\n    * [bot.Dockerfile](bot.Dockerfile)\n    * [scrapper.Dockerfile](scrapper.Dockerfile)\n* [compose.yml](compose.yml)\n* [Исходники проекта](https://github.com/Space27/JavaBackendSpring)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspace27%2Fdocker_lab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspace27%2Fdocker_lab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspace27%2Fdocker_lab/lists"}