Re: postgres asp.net core и docker
От: Doom100500 Израиль  
Дата: 23.06.22 06:17
Оценка: 9 (2)
Здравствуйте, 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).
Спасибо за внимание
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.