|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Хочу в Windows создать докер с PostgreSQL+ моя база. Типа демо для юзера. Сохранять данные в базе между запусками докера хотелось бы, но на первом шаге не обязательно. Как ? Есть готовые докеры с постгрес, но как туда добавить свою базу? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 10:45 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Sergej Grischenkow Это хорошо, как сделать свой контейнер из этого + своя демо база? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 11:12 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Вам надо: 1. создать docker volume, там будут храниться данные Код: sql 1.
2. запустить контейнер с подключенным volume из п. 1 в папку PGDATA Код: sql 1.
3. подключиться к контейнеру и ч\з утилиту psql создать бд и все, что Вам надо id_контейнера - первые несколько цифр(3-4) выведенные в п.2 Код: sql 1.
4. остановить контейнер Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 11:40 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Guzya Вам надо: 1. создать docker volume, там будут храниться данные Код: sql 1.
2. запустить контейнер с подключенным volume из п. 1 в папку PGDATA Код: sql 1.
3. подключиться к контейнеру и ч\з утилиту psql создать бд и все, что Вам надо id_контейнера - первые несколько цифр(3-4) выведенные в п.2 Код: sql 1.
4. остановить контейнер Код: sql 1.
Если я отдам контейре юзеру, он должен будет проделывать шаги 2-4 ? Так не проходит. Хотелось бы отдать юзеру контейнер, чтобы он запустил контейнер и там уже была база: т.е. пустил это контейнер, пустил приложение, коннектнулся к базе и мог пробовать ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 11:46 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Тогда так: 1. стартуете контейнер Код: sql 1.
2. подключаетесь к контейнеру Код: sql 1.
3. ч\з psql производите создание, настройку и т.д. БД 4. останавливаете контейнер Код: sql 1.
5. создаете из этого контейнера образ (image) <название_образа> - состоит из названия репозитория где будет храниться образ и тега Код: sql 1.
6. надо положить (push) созданный образ в репозиторий для дальнейшего использования другими После этого можно просто запускать Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 12:01 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
о, это уже больше похоже на то, что мне хотелось бы получить. А если большой скрипт с данными и т.д.? вроде можно как-то так: 1. беру https://hub.docker.com/_/postgres/ с постгресом 12 2. засовываю свой скрипт в существующий контейнер, чтобы он выполнялся всегда на старте 3. сохраняю как новый контейнер. Вот пункт 2 - как сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 12:15 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
В п.2 Вы просто цепляетесь к запущенному контейнеру, т.е. Вас docker подключит к консоли контейнера. Дополнительно посмотреть id_контейнера можно командой Код: sql 1.
Еще одна полезная команда, копирование файлов\папок в запущенный контейнер Код: sql 1.
Скопируйте Ваш скрипт и выполните его. Еще один момент, для сокращения размеров конечного образа, удаляйте не нужные файлы (Ваш скрипт). ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 12:31 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Guzya В п.2 Вы просто цепляетесь к запущенному контейнеру, т.е. Вас docker подключит к консоли контейнера. Дополнительно посмотреть id_контейнера можно командой Код: sql 1.
Еще одна полезная команда, копирование файлов\папок в запущенный контейнер Код: sql 1.
Скопируйте Ваш скрипт и выполните его. Еще один момент, для сокращения размеров конечного образа, удаляйте не нужные файлы (Ваш скрипт). понял, вот смотрите еще момент: В этом контейнере https://hub.docker.com/layers/postgres/library/postgres/12.3-alpine/images/sha256-a9ae8fdf8709010fece3cf27c8bd283c8a9b49c6033e04e3a273a9584c91df6c?context=explore Написано: ADD file ... in / CMD ["/bin/sh"] /bin/sh -c set -eux; addgroup ENV LANG=en_US.utf8 /bin/sh -c mkdir /docker-entrypoint-initdb.d Так вот это /docker-entrypoint-initdb.d Туда можно поместить свой скрипт? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 12:48 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Guzya Тогда так: 1. стартуете контейнер Код: sql 1.
2. подключаетесь к контейнеру Код: sql 1.
3. ч\з psql производите создание, настройку и т.д. БД 4. останавливаете контейнер Код: sql 1.
5. создаете из этого контейнера образ (image) <название_образа> - состоит из названия репозитория где будет храниться образ и тега Код: sql 1.
6. надо положить (push) созданный образ в репозиторий для дальнейшего использования другими После этого можно просто запускать Код: sql 1.
где-то я торможу: все делаю как написано, но сделав пункт 4 не могу сделать коммит, пишет нет такого контейнера, и >docker ps пусто ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 13:14 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Покажите команду запуска, в ней НЕ должно быть --rm . Посмотреть все запущенные\выключенные контейнеры можно Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 13:24 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Guzya Покажите команду запуска, в ней НЕ должно быть --rm . Посмотреть все запущенные\выключенные контейнеры можно Код: sql 1.
Здесь целая туча всяких моих докеров docker ps -a Пускал так: docker run -it --name pgalp --rm -e POSTGRES_PASSWORD=postgres -p5401:5432 postgres:12.3-alpine ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 13:29 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Ролг Хупин, так попробуйте Код: sql 1.
Если у Вас linux, можно так грохнуть все выключенные контейнеры Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 13:33 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Guzya Ролг Хупин, так попробуйте Код: sql 1.
Если у Вас linux, можно так грохнуть все выключенные контейнеры Код: sql 1.
Windows. понял, надо убрать флаг удаления rm. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 13:35 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Попробуйте для удаления всех контейнеров Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 13:38 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Попробуйте так собрать образ: 1. создайте в папке с нужным скриптом файл с названием Dockerfile и содержимым Код: sql 1. 2.
Желательно, что бы в этой папке больше ни чего не было. 2. после этого в терминале в директории с файлом запустите сборку Код: sql 1.
Точка "." в команде обязательна (указание на текущую папку). 3. проверяйте, что образ собран Код: sql 1.
4. пробуйте ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 13:47 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Guzya Попробуйте для удаления всех контейнеров Код: sql 1.
так не прошло, сделал так PowerShell> docker ps -aq | foreach {docker rm $_} ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 13:51 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Guzya Попробуйте так собрать образ: 1. создайте в папке с нужным скриптом файл с названием Dockerfile и содержимым Код: sql 1. 2.
Желательно, что бы в этой папке больше ни чего не было. 2. после этого в терминале в директории с файлом запустите сборку Код: sql 1.
Точка "." в команде обязательна (указание на текущую папку). 3. проверяйте, что образ собран Код: sql 1.
4. пробуйте Уперся в свою же идею Сделал скрипт, который по идее надо бы запустить Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Но после создания базы надо бы в ней создать таблицу, т.е. переключить конекст? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 14:23 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Сделайте где-нибудь бд и слейте pg_dump-ом бэкап, собственно его и подсовывайте. Я провел эксперимент использовав в качестве скрипта Демонстрационная база данных с postgrespro и Dockerfile Код: sql 1. 2.
Работает, но у Вас каждый раз при старте контейнера, будет идти эта долгая процедура инициализации. Если этого не нужно, то уже этот запущенный и проинициализированный контейнер и надо закомитить в образ. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 14:37 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Только из бэкапа удалите команду DROP DATABASE ....; , а то скрипт на ней падает. По поводу переключения контекста Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 14:42 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Guzya Попробуйте так собрать образ: 1. создайте в папке с нужным скриптом файл с названием Dockerfile и содержимым Код: sql 1. 2.
Желательно, что бы в этой папке больше ни чего не было. 2. после этого в терминале в директории с файлом запустите сборку Код: sql 1.
Точка "." в команде обязательна (указание на текущую папку). 3. проверяйте, что образ собран Код: sql 1.
4. пробуйте Прошел всю инструкцию, получил, что хотел. Построил свой образ на основе существующего + мой скрипт, потом запустил новый - новая база с таблицей и данными там есть!!! Спасибо за офигенную помощь. :-) PS. Теперь, конечно, тянет найти решение: чтобы данные юзера осохранялись между стартами этого докера ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 14:46 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Это тот самый docker volume (это по красивому), а еще можно без volume, просто папку монтировать причем ч\з те же ключи. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 14:56 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Guzya Это тот самый docker volume (это по красивому), а еще можно без volume, просто папку монтировать причем ч\з те же ключи. ага, если я правильно понимаю: запускаю докер и указываю мэп той директории в докере, где постгрес держит базу -> на какой-то внешний фолдер на хосте. И когда стартует докер, то все, что будет создаваться в директории в докере будет видно во внешнем фолдере? И рестартуя докер постгрес будет подхватывать те файлы, которые уже есть в мэпнутом фолдере? Получается достаточно мэпнуть директорию с базой и практически - всё сделано? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 15:03 |
|
Docker+PostgreSQL+база
|
|||
---|---|---|---|
#18+
Мап указывается при старте контейнера, например: Ваш текущий образ имеет некую дефолтную бд с дефолтными данными "зашитыми" в образ - при старте просто контейнера без мапа вы получите эти данные, - при старте контейнера с мапом на volume\директорию в нее автоматом запишутся данные из точки монтирования+все новое, что будет писаться в эту директорию. После выключения\уничтожения контейнера информация будет сохранена. - если Вы снова хотите получить дефолтные данные, Вы просто стартуете контейнер без мапа или мапируете другие volume\директорию Например Вы можете написать скрипт, в котором будет проверяться имеется ли на машине некий volume , если нет, то создавать его, а дальше уже запускать контейнер с мапом на этот volume. Просмотр имеющихся volume Код: sql 1.
Информация по конкретному volume Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 15:18 |
|
|
start [/forum/topic.php?fid=53&tid=1994648]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
others: | 239ms |
total: | 398ms |
0 / 0 |