{"id":19411609,"url":"https://github.com/levvolkov/dockerpostgresql","last_synced_at":"2026-05-09T06:32:21.584Z","repository":{"id":231875538,"uuid":"782926712","full_name":"levvolkov/DockerPostgreSQL","owner":"levvolkov","description":"7 «Docker PostgreSQL»","archived":false,"fork":false,"pushed_at":"2024-04-06T14:02:09.000Z","size":39123,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-07T15:21:31.438Z","etag":null,"topics":["automated-testing","docker","postgresql","postman"],"latest_commit_sha":null,"homepage":"","language":null,"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/levvolkov.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-04-06T12:48:04.000Z","updated_at":"2024-08-02T20:15:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"5edfdaee-77c0-4118-b17b-596952b7857d","html_url":"https://github.com/levvolkov/DockerPostgreSQL","commit_stats":null,"previous_names":["levvolkov/dockerpostgresql"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2FDockerPostgreSQL","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2FDockerPostgreSQL/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2FDockerPostgreSQL/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2FDockerPostgreSQL/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/levvolkov","download_url":"https://codeload.github.com/levvolkov/DockerPostgreSQL/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240589038,"owners_count":19825285,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["automated-testing","docker","postgresql","postman"],"created_at":"2024-11-10T12:22:17.659Z","updated_at":"2026-05-09T06:32:16.554Z","avatar_url":"https://github.com/levvolkov.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg width=\"722\" alt=\"postman_docker\" src=\"https://github.com/LevVolkov/DockerPostgreSQL/assets/88002142/c8708483-7e0f-476f-9c5d-b2484fea9594\"\u003e\n\u003c/p\u003e\n\n\u003c/br\u003e\n\n\u003ch1 align=\"center\"\u003e 7. \u0026nbsp; Домашнее задание к занятию «3.1. Docker» \u003c/h1\u003e\n\n**Важно**: прежде чем приступать, обязательно прочитайте [руководство по установке Docker](https://github.com/netology-code/aqa-homeworks/blob/master/docker/installation.md).\n\nВ качестве результата пришлите ссылки на ваши GitHub-проекты в личном кабинете студента на сайте [netology.ru](https://netology.ru).\n\nВсе задачи этого занятия нужно делать **в разных репозиториях**.\n\n**Важно**: если у вас что-то не получилось, то оформляйте issue [по установленным правилам](https://github.com/netology-code/aqa-homeworks/blob/master/report-requirements.md).\n\n**Важно**: не делайте ДЗ всех занятий в одном репозитории. Иначе вам потом придётся достаточно сложно подключать системы Continuous integration.\n\n## Как сдавать задачи\n\n1. Инициализируйте на своём компьютере пустой Git-репозиторий.\n1. Добавьте в него готовый файл [.gitignore](https://github.com/netology-code/aqa-homeworks/blob/master/.gitignore).\n1. Добавьте в этот же каталог код, требуемый в ДЗ. Создать и отредактировать конфигурационные файлы вы можете в любом текстовом редакторе или IntelliJ IDEA. Если вы используете IntelliJ IDEA, то рекомендуется использовать тип проекта Empty Project.     \n1. Сделайте необходимые коммиты.\n1. Создайте публичный репозиторий на GitHub и свяжите свой локальный репозиторий с удалённым.\n1. Сделайте пуш — удостоверьтесь, что ваш код появился на GitHub.\n1. Ссылку на ваш проект отправьте в личном кабинете на сайте [netology.ru](https://netology.ru).\n1. Задачи, отмеченные как необязательные, можно не сдавать, это не повлияет на получение зачёта.\n\n**Важно**: задачи этого занятия не предполагают подключения к CI.\n\n### Plugin IDEA\n\nЭтот раздел не является частью ДЗ и не обязателен для выполнения, но он позволяет вам облегчить себе взаимодействие с Docker и Docker compose на первое время, воспользовавшись графическим интерфейсом.\n\nОткройте IntelliJ IDEA, перейдите в раздел настроек:\n* Windows/Linux: File -\u003e Settings\n* MacOS: IntelliJ IDEA -\u003e Preferences\n\nНайдите в поиске раздел Plugins:\n\n![](https://github.com/netology-code/aqa-homeworks/blob/master/docker/pic/plugins.png)\n\nНажмите на кнопку `Install`, после установки перезапустите IDEA.\n\nТеперь при открытии файлов `Dockerfile`, `docker-compose.yml` IDEA будет предлагать автодополнение и возможность запуска прямо из окна редактора:\n\n![](https://github.com/netology-code/aqa-homeworks/blob/master/docker/pic/editor.png)\n\n![](https://github.com/netology-code/aqa-homeworks/blob/master/docker/pic/run.png)\n\nПосле запуска откроется окно `Services`, где вы можете посмотреть образы, контейнеры и запущенные с помощью Docker compose сервисы:\n\n![](https://github.com/netology-code/aqa-homeworks/blob/master/docker/pic/services.png)\n\n## Задача №1: PostgreSQL\n\nВам необходимо подготовить приложение к тестированию на СУБД PostgreSQL. Используйте образ 13-alpine, если он недоступен, то берите последний опубликованный на Docker Hub. Возьмите собранный JAR-файл `db-api.jar`, аналогично примеру на лекции положите рядом файл `application.properties`, но в строке:\n`jdbc:mysql://...` поменяйте `mysql` на `postgresql`.\n\nВам нужно дописать остальные настройки: хост, порт, БД, имя пользователя и пароль.         \n\nКроме того, вам нужно подготовить файл `docker-compose.yml`, в котором прописать настройки для запуска контейнера PostgreSQL. Всю информацию о его запуске вы найдёте на официальной странице [образа на Docker Hub](https://hub.docker.com/_/postgres). Рекомендуем также изучить документацию по [СУБД PostgreSQL](https://www.postgresql.org/docs/12/index.html) для получения информации о данном продукте. \n\nЗапустите сначала `docker-compose up` и только после того, как БД запустится, запустите целевое приложение: `java -jar db-api.jar`. Если нужно поменять порт запуска, по умолчанию он 9999, то добавьте в файл `application.properties` строку `server.port=\u003cнужный номер порта\u003e`.\n\nЕсли вы сделали всё правильно, то приложение запустится и на `GET http://localhost:9999/api/cards` выдаст вам JSON с картами:\n```json\n[ \n   { \n      \"id\":1,\n      \"name\":\"Альфа-Карта Premium\",\n      \"description\":\"Альфа-Карта вернёт ваши деньги\",\n      \"imageUrl\":\"/alfa-card-premium.png\"\n   },\n   { \n      \"id\":2,\n      \"name\":\"Alfa Travel Premium\",\n      \"description\":\"Самая выгодная карта для путешествий\",\n      \"imageUrl\":\"/alfa-card-travel.png\"\n   },\n   { \n      \"id\":3,\n      \"name\":\"CashBack Premium\",\n      \"description\":\"Заправь свою карту. Кешбэк на АЗС, в кафе и ресторанах\",\n      \"imageUrl\":\"/alfa-card-cashback.png\"\n   }\n]\n```\n\nВ результате выполнения этой задачи вы должны положить в репозиторий следующие три файла (других файлов не должно быть):\n* .gitignore\n* db-api.jar,\n* application.properties,\n* docker-compose.yml,\n* README.md со скриншотом ответа приложения.\n\n**Важно**: для удаления всех данных и начала с чистого листа сделайте следующее:\n* `docker-compose down` в каталоге с файлом `docker-compose.yml`,\n* удалите каталог для хранения данных `data`,\n* запустите заново `docker-compose up`, после того как всё исправите.\n\nВажно: команда `docker-compose rm` в каталоге с файлом `docker-compose.yml` удаляет сам контейнер.\n\n## Задача №2: докеризация приложения (необязательная)\n\nПриложение можно упаковать в Docker-образ, чтобы затем запускать из него контейнеры.\n\nСделать это, в принципе, несложно: достаточно создать файл `Dockerfile`, в котором описать правила сборки образа.   \n\nДля лучшего пониманию процесса докеризации приведем небольшой пример с использованием учебного приложения для Node.js.   \n\n**Важно:** Для решения домашнего задания надо будет выполнить докеризацию другого учебного приложения.\n\nПоскольку наше приложение для Node.js написано на языке JavaScript, то со слов разработчиков:\n```\nКомпилировать ничего не надо.\nНужна только установленная Node.js версии не ниже 12.\nВ командной строке нужно выполнить: npm install для установки зависимостей.\nДля запуска приложения нужно выполнить: npm start.\nПриложение запустится на порту 9999.\n```\n\nИтак, начнём по порядку. Мы, конечно, можем с нуля собрать образ, но так почти никто не делает. Мы можем взять уже готовый образ, в котором установлена платформа Node.js.\n\nПоскольку мы рассматриваем простейший сценарий, то сборка образа сведётся к следующим инструкциям:\n* `FROM` — выбираем готовый образ для старта, на базе которого мы будем создавать свой;\n* `WORKDIR` — установим рабочий каталог внутри образа;\n* `COPY` — копируем файлы из текущего каталога в файловую систему образа;\n* `RUN` — выполняем дополнительные действия, например, установку зависимостей;\n* `CMD` — описываем команду запуска;\n* `EXPOSE` — описываем, какие порты будет слушать контейнер.\n\n[Полное описание синтаксиса Dockerfile](https://docs.docker.com/engine/reference/builder/).\n\nИдём на Docker Hub и ищем Node.js:\n\n![](https://github.com/netology-code/aqa-homeworks/blob/master/docker/pic/node.png)\n\nНачинаем писать наш `Dockerfile`:\n```\nFROM node:erbium-alpine3.12\n```\n\n[Apline Linux](https://wiki.alpinelinux.org/wiki/Docker) — минималистичный образ, который часто используется в качества базового благодаря своим небольшим размерам — около 5 мегабайт. \n\nУстанавливаем рабочий каталог и пишем команду копирования всех файлов из текущего каталога нашего проекта в образ:\n```\nFROM node:erbium-alpine3.12\nWORKDIR /opt/app\nCOPY . .\n```\n\nЗапускаем команду установки зависимостей из инструкции разработчиков:\n```\nFROM node:erbium-alpine3.12\nWORKDIR /opt/app\nCOPY . .\nRUN npm install\n```\n\nПримечание: здесь есть нюансы, связанные с послойной организацией файловой системы образов Docker, но мы для простоты изложения проигнорируем их.\n\nПрописываем команду старта:\n```\nFROM node:erbium-alpine3.12\nWORKDIR /opt/app\nCOPY . .\nRUN npm install\nCMD [\"npm\", \"start\"]\n```\n\nДа, CMD пишется достаточно странно, но это связано с особенностями обработки. Текущая форма называется `exec form` и представляет из себя JSON-массив в формате: `[\"executable\",\"param1\",\"param2\"]`. О деталях вы можете почитать [на странице описания Dockerfile](https://docs.docker.com/engine/reference/builder/#cmd).\n\nПоследнее, что осталось, — указать нужные порты. Это просто информация для того, кто будет запускать контейнер:\n\n```\nFROM node:erbium-alpine3.12\nWORKDIR /opt/app\nCOPY . .\nRUN npm install\nCMD [\"npm\", \"start\"]\nEXPOSE 9999\n```\n\nСобираем командой:\n`docker image build -t node-app:1.0 .`, где `-t` — это задание тега образу.\n\nЕсли всё соберётся успешно, то вы можете стандартными средствами посмотреть, что теперь ваш образ есть на вашем компьютере:\n`docker image ls`.\n\nА также запустить из него контейнер, в том числе с использованием Docker compose.\n\nМожно собрать всё приложение и запустить, сразу используя следующую конфигурацию Docker compose:\n```yml\nversion: '3.7'\nservices:\n  node-app:\n    build: .\n    image: node-app:1.0\n    ports:\n      - '9999:9999'\n```\n\n`build: .` означает, что мы собираем образ из `Dockerfile`, находящемся в текущем каталоге.\n\nИ запускайте `docker-compose up --build`. Уберите флаг `--build`, чтобы образ не пересобирался каждый раз.\n\nГотовый проект вы можете найти в каталоге `node` вместе с файлом `docker-compose.yml`.\n\n**Важно:** После изучения примера, можно перейти к выполнению домашнего задания.   \n\nТеперь ваша задача — взять готовое приложение для контейнеризации `db-api-for-docker.jar` (оно без зависимостей, никакая СУБД ему не нужна) и упаковать в образ, то есть создать `Dockerfile` и `docker-compose.yml`.\n\nОбщие условия:\n* приложению для работы нужна Java 8, используйте в качестве базового образа openjdk:8-slim;\n* никаких внешних файлов, кроме самого JAR-ника не требуется;\n* JAR-ник запускается командой `java -jar db-api-for-docker.jar` и поднимает сервер на порту 9999. Для теста сделайте `GET http://localhost:9999/api/cards`.\n\nВ результате выполнения этой задачи вы должны положить в репозиторий следующие файлы:\n* .gitignore\n* db-api-for-docker.jar,\n* Dockerfile,\n* docker-compose.yml,\n* README.md со скриншотом ответа приложения.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flevvolkov%2Fdockerpostgresql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flevvolkov%2Fdockerpostgresql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flevvolkov%2Fdockerpostgresql/lists"}