powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Docker+PostgreSQL+база
25 сообщений из 60, страница 1 из 3
Docker+PostgreSQL+база
    #39966997
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу в Windows создать докер с PostgreSQL+ моя база. Типа демо для юзера.
Сохранять данные в базе между запусками докера хотелось бы, но на первом шаге не обязательно.
Как ?
Есть готовые докеры с постгрес, но как туда добавить свою базу?
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967002
Sergej Grischenkow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967004
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergej Grischenkow


Это хорошо, как сделать свой контейнер из этого + своя демо база?
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967008
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вам надо:
1. создать docker volume, там будут храниться данные
Код: sql
1.
docker volume create <pg_volume>



2. запустить контейнер с подключенным volume из п. 1 в папку PGDATA
Код: sql
1.
docker run -d --rm  -p 5432:5432 -v pg_volume:/var/lib/postgresql/data   postgres



3. подключиться к контейнеру и ч\з утилиту psql создать бд и все, что Вам надо
id_контейнера - первые несколько цифр(3-4) выведенные в п.2

Код: sql
1.
docker exec -it <id_контейнера> /bin/bash



4. остановить контейнер
Код: sql
1.
docker stop <id_контейнера>
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967009
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guzya
Вам надо:
1. создать docker volume, там будут храниться данные
Код: sql
1.
docker volume create <pg_volume>



2. запустить контейнер с подключенным volume из п. 1 в папку PGDATA
Код: sql
1.
docker run -d --rm  -p 5432:5432 -v pg_volume:/var/lib/postgresql/data   postgres



3. подключиться к контейнеру и ч\з утилиту psql создать бд и все, что Вам надо
id_контейнера - первые несколько цифр(3-4) выведенные в п.2

Код: sql
1.
docker exec -it <id_контейнера> /bin/bash



4. остановить контейнер
Код: sql
1.
docker stop <id_контейнера>




Если я отдам контейре юзеру, он должен будет проделывать шаги 2-4 ? Так не проходит.
Хотелось бы отдать юзеру контейнер, чтобы он запустил контейнер и там уже была база: т.е. пустил это контейнер, пустил приложение, коннектнулся к базе и мог пробовать
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967012
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда так:

1. стартуете контейнер
Код: sql
1.
docker run -d postgres



2. подключаетесь к контейнеру
Код: sql
1.
docker exec -it <id_контейнера> /bin/bash



3. ч\з psql производите создание, настройку и т.д. БД

4. останавливаете контейнер
Код: sql
1.
docker stop <id_контейнера>



5. создаете из этого контейнера образ (image)
<название_образа> - состоит из названия репозитория где будет храниться образ и тега
Код: sql
1.
docker commit <id_контейнера> <название_образа>



6. надо положить (push) созданный образ в репозиторий для дальнейшего использования другими

После этого можно просто запускать
Код: sql
1.
docker run -d --rm -p 5432:5432  <название_образа>
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967015
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о, это уже больше похоже на то, что мне хотелось бы получить.

А если большой скрипт с данными и т.д.? вроде можно как-то так:
1. беру https://hub.docker.com/_/postgres/ с постгресом 12
2. засовываю свой скрипт в существующий контейнер, чтобы он выполнялся всегда на старте
3. сохраняю как новый контейнер.

Вот пункт 2 - как сделать?
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967024
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В п.2 Вы просто цепляетесь к запущенному контейнеру, т.е. Вас docker подключит к консоли контейнера.
Дополнительно посмотреть id_контейнера можно командой
Код: sql
1.
docker ps



Еще одна полезная команда, копирование файлов\папок в запущенный контейнер

Код: sql
1.
docker cp /media/guzya/data/Работа_2/PostgresSQL/postgresql-12.1/  <id_контейнера>:/postgres_src/



Скопируйте Ваш скрипт и выполните его.

Еще один момент, для сокращения размеров конечного образа, удаляйте не нужные файлы (Ваш скрипт).
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967032
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guzya
В п.2 Вы просто цепляетесь к запущенному контейнеру, т.е. Вас docker подключит к консоли контейнера.
Дополнительно посмотреть id_контейнера можно командой
Код: sql
1.
docker ps



Еще одна полезная команда, копирование файлов\папок в запущенный контейнер

Код: sql
1.
docker cp /media/guzya/data/Работа_2/PostgresSQL/postgresql-12.1/  <id_контейнера>:/postgres_src/



Скопируйте Ваш скрипт и выполните его.

Еще один момент, для сокращения размеров конечного образа, удаляйте не нужные файлы (Ваш скрипт).


понял, вот смотрите еще момент:

В этом контейнере
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

Туда можно поместить свой скрипт?
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967042
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Видимо оно

Initialization scripts
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967048
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guzya
Тогда так:

1. стартуете контейнер
Код: sql
1.
docker run -d postgres



2. подключаетесь к контейнеру
Код: sql
1.
docker exec -it <id_контейнера> /bin/bash



3. ч\з psql производите создание, настройку и т.д. БД

4. останавливаете контейнер
Код: sql
1.
docker stop <id_контейнера>



5. создаете из этого контейнера образ (image)
<название_образа> - состоит из названия репозитория где будет храниться образ и тега
Код: sql
1.
docker commit <id_контейнера> <название_образа>



6. надо положить (push) созданный образ в репозиторий для дальнейшего использования другими

После этого можно просто запускать
Код: sql
1.
docker run -d --rm -p 5432:5432  <название_образа>





где-то я торможу: все делаю как написано, но сделав пункт 4 не могу сделать коммит, пишет нет такого контейнера, и
>docker ps
пусто
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967050
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Покажите команду запуска, в ней НЕ должно быть --rm .

Посмотреть все запущенные\выключенные контейнеры можно

Код: sql
1.
docker ps -a
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967053
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guzya
Покажите команду запуска, в ней НЕ должно быть --rm .

Посмотреть все запущенные\выключенные контейнеры можно

Код: sql
1.
docker ps -a



Здесь целая туча всяких моих докеров
docker ps -a

Пускал так:
docker run -it --name pgalp --rm -e POSTGRES_PASSWORD=postgres -p5401:5432 postgres:12.3-alpine
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967057
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин, так попробуйте

Код: sql
1.
docker run -it --name pgalp -e POSTGRES_PASSWORD=postgres -p 5401:5432 postgres:12.3-alpine



Если у Вас linux, можно так грохнуть все выключенные контейнеры

Код: sql
1.
docker rm $(docker ps -aq)
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967059
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guzya
Ролг Хупин, так попробуйте

Код: sql
1.
docker run -it --name pgalp -e POSTGRES_PASSWORD=postgres -p 5401:5432 postgres:12.3-alpine



Если у Вас linux, можно так грохнуть все выключенные контейнеры

Код: sql
1.
docker rm $(docker ps -aq)



Windows.
понял, надо убрать флаг удаления rm.
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967061
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте для удаления всех контейнеров

Код: sql
1.
docker ps -aq | docker rm
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967070
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте так собрать образ:

1. создайте в папке с нужным скриптом файл с названием Dockerfile и содержимым
Код: sql
1.
2.
FROM postgres:12.3-alpine
COPY <Ваш_файл> /docker-entrypoint-initdb.d/



Желательно, что бы в этой папке больше ни чего не было.

2. после этого в терминале в директории с файлом запустите сборку
Код: sql
1.
docker build .  -t <название_образа>



Точка "." в команде обязательна (указание на текущую папку).

3. проверяйте, что образ собран
Код: sql
1.
docker image ls



4. пробуйте
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967072
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guzya
Попробуйте для удаления всех контейнеров

Код: sql
1.
docker ps -aq | docker rm



так не прошло, сделал так
PowerShell> docker ps -aq | foreach {docker rm $_}
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967091
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guzya
Попробуйте так собрать образ:

1. создайте в папке с нужным скриптом файл с названием Dockerfile и содержимым
Код: sql
1.
2.
FROM postgres:12.3-alpine
COPY <Ваш_файл> /docker-entrypoint-initdb.d/



Желательно, что бы в этой папке больше ни чего не было.

2. после этого в терминале в директории с файлом запустите сборку
Код: sql
1.
docker build .  -t <название_образа>



Точка "." в команде обязательна (указание на текущую папку).

3. проверяйте, что образ собран
Код: sql
1.
docker image ls



4. пробуйте




Уперся в свою же идею

Сделал скрипт, который по идее надо бы запустить

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create database pm_db;
-- <-----------------------переключиться на созданную базу?
create table params
(
id int not null primary key,
name text
);

insert into params(id, name) values(0, 'value 1');
insert into params(id, name) values(1, 'value 2');



Но после создания базы надо бы в ней создать таблицу, т.е. переключить конекст?
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967094
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделайте где-нибудь бд и слейте pg_dump-ом бэкап, собственно его и подсовывайте.

Я провел эксперимент использовав в качестве скрипта Демонстрационная база данных с postgrespro
и Dockerfile
Код: sql
1.
2.
FROM postgres:12.3-alpine
COPY demo-small-20170815.sql /docker-entrypoint-initdb.d/



Работает, но у Вас каждый раз при старте контейнера, будет идти эта долгая процедура инициализации.
Если этого не нужно, то уже этот запущенный и проинициализированный контейнер и надо закомитить в образ.
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967096
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только из бэкапа удалите команду DROP DATABASE ....; , а то скрипт на ней падает.

По поводу переключения контекста

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
--
-- PostgreSQL database dump
--

...................................................
DROP DATABASE demo;  -- надо удалить


CREATE DATABASE demo;

\connect demo

...................................................
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967097
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guzya
Попробуйте так собрать образ:

1. создайте в папке с нужным скриптом файл с названием Dockerfile и содержимым
Код: sql
1.
2.
FROM postgres:12.3-alpine
COPY <Ваш_файл> /docker-entrypoint-initdb.d/



Желательно, что бы в этой папке больше ни чего не было.

2. после этого в терминале в директории с файлом запустите сборку
Код: sql
1.
docker build .  -t <название_образа>



Точка "." в команде обязательна (указание на текущую папку).

3. проверяйте, что образ собран
Код: sql
1.
docker image ls



4. пробуйте


Прошел всю инструкцию, получил, что хотел.
Построил свой образ на основе существующего + мой скрипт, потом запустил новый - новая база с таблицей и данными там есть!!!
Спасибо за офигенную помощь. :-)

PS. Теперь, конечно, тянет найти решение: чтобы данные юзера осохранялись между стартами этого докера
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967100
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это тот самый docker volume (это по красивому), а еще можно без volume, просто папку монтировать причем ч\з те же ключи.
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967102
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guzya
Это тот самый docker volume (это по красивому), а еще можно без volume, просто папку монтировать причем ч\з те же ключи.


ага, если я правильно понимаю:
запускаю докер и указываю мэп той директории в докере, где постгрес держит базу -> на какой-то внешний фолдер на хосте.
И когда стартует докер, то все, что будет создаваться в директории в докере будет видно во внешнем фолдере?
И рестартуя докер постгрес будет подхватывать те файлы, которые уже есть в мэпнутом фолдере?
Получается достаточно мэпнуть директорию с базой и практически - всё сделано?
...
Рейтинг: 0 / 0
Docker+PostgreSQL+база
    #39967105
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мап указывается при старте контейнера, например:
Ваш текущий образ имеет некую дефолтную бд с дефолтными данными "зашитыми" в образ

- при старте просто контейнера без мапа вы получите эти данные,

- при старте контейнера с мапом на volume\директорию в нее автоматом запишутся данные из точки монтирования+все новое, что будет писаться в эту
директорию. После выключения\уничтожения контейнера информация будет сохранена.

- если Вы снова хотите получить дефолтные данные, Вы просто стартуете контейнер без мапа или мапируете другие volume\директорию



Например Вы можете написать скрипт, в котором будет проверяться имеется ли на машине некий volume
, если нет, то создавать его, а дальше уже запускать контейнер с мапом на этот volume.
Просмотр имеющихся volume
Код: sql
1.
docker volume ls


Информация по конкретному volume
Код: sql
1.
docker volume inspect <volume>
...
Рейтинг: 0 / 0
25 сообщений из 60, страница 1 из 3
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Docker+PostgreSQL+база
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]