Привет!
Разрабатывается и тестируется в последней Ubuntu LTS.
Если вы работаете windows и есть gmail аккаунт, работу можно протестировать в бесплатных облаках google. https://shell.cloud.google.com/
Нужно установить docker и docker-compose.
Скопировать проект.
В каталоге Rolling-Scopes-School-Nodejs-Course-Task-6-Docker-basics выполнить.
$ docker-compose up --build
Чтобы проверить работу, можно подключиться
^CTRL + C
$ docker-compose rm
Проверка обновления приложения, при изменении файла
Предлагаю, в файле app.ts разкомментировать
// throw Error('Oops! uncaughtException Happened!');
Ожидаемый результат:
Проверка подключения к базе из контейнера с приложением
$ docker exec -it rsschool-app sh
# psql -h postgres -p 5432 -d db -U user -W
Пароль: pass123
postgres=# \l
$ docker scan webmakaka/rsschool-app
✓ Tested 24 dependencies for known vulnerabilities, no vulnerable paths found.
$ docker scan webmakaka/rsschool-postgres
✓ Tested 34 dependencies for known vulnerabilities, no vulnerable paths found.
Запушу контейнеры на dockerhub
$ docker login
$ docker push webmakaka/rsschool-app
$ docker push webmakaka/rsschool-postgres
Результаты:
https://hub.docker.com/repository/docker/webmakaka/rsschool-app
https://hub.docker.com/repository/docker/webmakaka/rsschool-postgres
Детали реализации:
✔️ Наличие в Readme.md секции с инструкцией как запустить приложение +20 баллов
✔️ Используется user-defined bridge +30 баллов
$ docker network ls
Возвращает:
045deffb3d3a rsschool-network bridge local
$ docker network inspect rsschool-network -f "{{json .Containers }}" \
| python -m json.tool
{
"66f19fd9fefa484117fe8410e67a58419926f3e1aa47e340364630e9ffb54d56": {
"EndpointID": "877a84b325d6deaa4e18b4fdd779dfc6a265d154da7ff56c4603dd047d25c544",
"IPv4Address": "172.23.0.3/16",
"IPv6Address": "",
"MacAddress": "02:42:ac:17:00:03",
"Name": "rsschool-app"
},
"7b18581735c29cdc0bd9813ee357ccf1d54caff99d4dafe9ff0375ed19a9cd7c": {
"EndpointID": "253b7e958c8afeff9cbf30f9f4c06ddb6d436be435b1dbff1bdf53382421d95b",
"IPv4Address": "172.23.0.2/16",
"IPv6Address": "",
"MacAddress": "02:42:ac:17:00:02",
"Name": "rsschool-postgres"
}
}
✔️ При возникновении ошибки контейнер должен перезапускается автоматически +30 баллов
В конфиге прописано.
restart: always
При, что включает в себя автоматический перезапуск при ошибке.
✔️ Логи и файлы базы данных хранятся в volumes, а не в контейнере +30 баллов
В конфиге прописаны volumes:
- для приложения это все приложение, включая логи.
- для базы данных каталог PGDATA в корне проекта с данными для базы данных.
Штрафы:
✔️ Внесение изменений в репозиторий после дедлайна не считая коммиты, вносящие изменения только в Readme.md минус 30% от максимального балла за задание (для этого задания 33 балла)
Изменений нет.
✔️ За отсутствие отдельной ветки для разработки -20 баллов
Ветка dev
✔️ За отсутствие Pull Request -20 баллов
Pull Request есть.
✔️ За неполную информацию в описании Pull Request -10 баллов
Полное описание.
✔️ Используется default bridge network driver -20 баллов
Используется созданный bridge, см. выше.
✔️ Конфигурация приложения жестко прописана в docker-compose.yml и Dockerfile -20 баллов
Используются переменные в dcoer-compse.yaml
✔️ При изменении файлов в папке src приложение не перезапускается -20 баллов
Можно внести изменения и проект обновится, см. пример в секции проверок.
✔️ Должен использоваться специфичный образ. (Например postgres и node, а не ububtu с установкой node или postgres) -20 баллов
Используется apline
✔️ Postgress image не указана как зависимость для node image -20 баллов
Указан.