Здравствуйте, vaa, Вы писали:
vaa>насколько сложнее postgres чем sqlserver в использовании ef core, администрировании(бэкап/рестор), есть ли аналог filestream?
vaa>какие подводные камни использования докера вместо обычного виндос сервера.
vaa>по докеру я так понял принята такая схема
vaa>один контейнер это апп,
vaa>второй постгрес и отдельный том где хранится база.
По EF Code не скажу, но база (любая) в докере годится только для разработки. Всё из-за того, что база расчитывает, что она пишет и читает данные на реальный диск, и у неё на этот счёт есть различные оптимизации, и иногда гарантии (например танзакция считается завершённой, когда данные гарантированно записаны на диск, а не отправлены в кэш). А в докере фаиловая система — это эмуляция со своим кешем, тормозами и т.д., и только потом подмонированная директория и реальный диск.
В прод базу надо выносить на отдельную машину и подключаться к ней хоть из контейнера, хоть из натива.
vaa>тут я понимаю должны быть стандартные настройки, чтобы база подхватилась если контейнер будет удален(возможно с системными базами).
Да. Вот ниже мой docker-compose.yaml для запуска keycloak с postgres
для локальной разработки:
volumes:
pgdata: # определяем volume
services:
postgres:
image: postgres
restart: always
ports:
- 5432:5432
environment:
POSTGRES_PASSWORD: keycloak
POSTGRES_USER: keycloak
POSTGRES_DB: keycloak
volumes:
- pgdata:/var/lib/postgresql/data # Монтируем pgdata в контенере к определённомы выше диску
keycloak:
image: quay.io/keycloak/keycloak
ports:
- 8080:8080
environment:
KC_HOSTNAME: localhost:8080
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://postgres:5432/keycloak # Подключаемся к базе хостом является имя контейнера postres
KC_DB_USERNAME: keycloak
KC_DB_PASSWORD: keycloak
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
Теперь
docker-compose up — создаст volume и запустит все контейнеры.
docker-compose down — остановит контейнеры но не удалит volume, тогда проследующем docker-compose up данные будут на месте.
docker-compose down -v — остановит контейнеры и удалит диски — следующий запуск бует с нуля.
Если запускать контейнер с постгресом через
docker run ... , то новый volume будет создаваться каждый запуск, и каждый запуск будет с чистого нуля, и, заодно засрётся место на компе.
Тут надо рулить в сторону
docker volume create, и в
docker run, через аргументы командной строки монтировать его. Можно монтировать и к локальной директории, но что-то у меня это не очень работало- не помню точно почему (по моему мне не понравилось, что в директории проекта создаются фаилы посгтреса, от юзера docker).