powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вопрос знатокам Docker
13 сообщений из 13, страница 1 из 1
Вопрос знатокам Docker
    #39812011
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую образ отсюда https://hub.docker.com/_/postgres

Беру версию 11.3

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
mayton@mayton-ryzen:~$ docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
mayton@mayton-ryzen:~$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
postgres            11.3                587aa1d0e586        31 hours ago        312MB
postgres            latest              587aa1d0e586        31 hours ago        312MB
kibana              7.0.0               7f92ab934206        5 weeks ago         661MB
elasticsearch       7.0.0               8f46db60ddd6        5 weeks ago         811MB
probe-docker-boot   latest              5efb040137be        5 weeks ago         511MB
openjdk             12-jdk-oracle       b1fc416d936f        6 weeks ago         470MB
openjdk             8-jdk-stretch       b8d3f94869bb        6 weeks ago         625MB
hello-world         latest              fce289e99eb9        4 months ago        1.84kB


Поднимаю инстанс. Подключаюсь из тогоже докера psql и создаю 1 базу.

Поработал с базой.

После stop - и повторного start - все мои изменения потеряны.

Почитал про docker commit.

Применил. Всё равно изменнения потеряны.

Я где-то делаю систематическую ошибку. Знатоки - прошу подскажите в какой части.
Все логи не могу приаттачить. Будет много флуда. И там сложно отделить главное от второстепенного.

Но могу точечно показать статусы того что надо.
...
Рейтинг: 0 / 0
Вопрос знатокам Docker
    #39812015
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выборочно.

Вот здесь поднимаю БД.
Код: sql
1.
docker run --name pg1 -d -p 5555:5432 -e POSTGRES_PASSWORD=pwd123 postgres:11.3


Подключаюсь к консоли
Код: sql
1.
docker run -it --rm --link pg1:postgres postgres:11.3 psql -l postgres -U postgres


Какие-то активности
Код: sql
1.
# CREATE DATABASE maytondb;



Коммит
Код: sql
1.
docker commit 12345..... ;


Stop
Код: sql
1.
docker stop 12345..... ;
...
Рейтинг: 0 / 0
Вопрос знатокам Docker
    #39812016
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonПосле stop - и повторного start - все мои изменения потеряны.


Почему должно быть как-то по-другому?
...
Рейтинг: 0 / 0
Вопрос знатокам Docker
    #39812020
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton...прошу подскажите....


ну вот смотрите...
постгря запускается в контейнере. его изменения будут скинуты после остановки контейнера. если Вам надо сохранять эти измененя, то Вы должны:

1) смапировать файловую систему - место где будут ваши файлы бд внутри контейнера на внешний мир. По Вашей ссылке, что дали инфа есть - немного ниже. Прочитайте обязательно всё... У вас получиться типо такого параметра при вызове...
-v pgdata:/var/lib/postgresql/data

2) внутри контейнера всё работает от юзера postgres . И это является мАленького недопонимания обычно, что же надо ещё этому контейнеру. ситуация описана по Вашей ссылке так-же... Заковыка в следующем...Пользователь postgres, но это символьное имя. Этому символьному имени соответствует свой ID из файла passwrd этого образа. Посему любая попытка записи смапированных файлов бд на внешний мир тащат за собой и разрешение доступа самого докера по ID из внутренней оси на внешнюю оси, где запущен сам докер. Один из вариантов разрешения этого - завести точно такого-же юзера на хосте где работает докер. и при запуске контейнера смапировать ещё и passwrd файл с ID пользователя postgres из внешнего хоста. параметр при вызове типо такого:
-v /etc/passwd:/etc/passwd:ro

TODO:
- можно ещё прописать явно проброс порта для внешнего тук-тук из пэгэадмина...
- можно создать свой контейнер, внутри которого пропишите инит sql файл для инициализации своих бд

с уважением
(круглый)
...
Рейтинг: 0 / 0
Вопрос знатокам Docker
    #39812041
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok01) смапировать файловую систему - место где будут ваши файлы бд внутри контейнера на внешний мир. По Вашей ссылке, что дали инфа есть - немного ниже. Прочитайте обязательно всё... У вас получиться типо такого параметра при вызове...
-v pgdata:/var/lib/postgresql/data

Я думаю это мой вариант. А откуда берётся символическое имя pgdata?
...
Рейтинг: 0 / 0
Вопрос знатокам Docker
    #39812043
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это из билд-файла берется?

https://github.com/docker-library/postgres/blob/cf9b6cdd64f8a81b1abf9e487886f47e4971abe2/11/Dockerfile
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
.....................
RUN mkdir -p /var/run/postgresql && chown -R postgres:postgres /var/run/postgresql && chmod 2777 /var/run/postgresql

ENV PATH $PATH:/usr/lib/postgresql/$PG_MAJOR/bin
ENV PGDATA /var/lib/postgresql/data
# this 777 will be replaced by 700 at runtime (allows semi-arbitrary "--user" values)
RUN mkdir -p "$PGDATA" && chown -R postgres:postgres "$PGDATA" && chmod 777 "$PGDATA"
VOLUME /var/lib/postgresql/data

COPY docker-entrypoint.sh /usr/local/bin/
RUN ln -s usr/local/bin/docker-entrypoint.sh / # backwards compat
ENTRYPOINT ["docker-entrypoint.sh"]

EXPOSE 5432
CMD ["postgres"]
...
Рейтинг: 0 / 0
Вопрос знатокам Docker
    #39812085
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стартовал вот так

Код: sql
1.
docker run -d -e POSTGRES_PASSWORD=cyberman123 --volume PGDATA:/nosql postgres:11.3



/nosql - это реально существующий фолдер. И привилегии для пользователя из под которого работате докер - есть.

Создал какую-то материальную табличку. Наполнил. Но дата-файлов пока не вижу.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
postgres=# create table test(v varchar(4000));
CREATE TABLE
postgres=# CREATE EXTENSION "uuid-ossp";
CREATE EXTENSION
postgres=# SELECT uuid_generate_v4();
           uuid_generate_v4           
--------------------------------------
 c4aa0a56-29de-45ea-8516-c2dc0ae49f77
(1 row)

postgres=# SELECT uuid_generate_v4()::text;
           uuid_generate_v4           
--------------------------------------
 579b0d17-af99-48c9-9d7b-88edf2b2e615
(1 row)

postgres=# insert into test(v) values(uuid_generate_v4()::text);
INSERT 0 1
postgres=# select * from test;
                  v                   
--------------------------------------
 7703df39-3905-4984-b49c-85254d69d258
(1 row)

postgres=# insert into test select * from test;
INSERT 0 1
postgres=# insert into test select * from test;
.....
postgres=# insert into test select * from test;
INSERT 0 262144
postgres=# commit;
WARNING:  there is no transaction in progress
COMMIT



Постгрещщики! Где вы?
...
Рейтинг: 0 / 0
Вопрос знатокам Docker
    #39812117
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

ИMXO постгрес тут не причем.
Для удобства работы с докером нужно поставить докер- компосе.
Там все настройки делаются через файлы конфигурации.
Ну и в документации почитать, где хранятся файлы БД.
...
Рейтинг: 0 / 0
Вопрос знатокам Docker
    #39812118
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
И еще. Если у вас что-то на красной шапке, то там есть дополнительнне настройки безопасности.
Которые надо применить к каталогу.
Завязано на ce линукс
...
Рейтинг: 0 / 0
Вопрос знатокам Docker
    #39812129
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton...А откуда берётся символическое имя pgdata?

если опять пройти по Вашей ссылке (откуда я скопировал эту строку, из описания - прямо на этой странице.) то видно такую комбинэйшен..

initialize the target directory separately from the final runtime (with a chown in between):

$ docker volume create pgdata
$ docker run -it --rm -v pgdata:/var/lib/postgresql/data postgres
The files belonging to this database system will be owned by user "postgres".

т.е. это каталог который Вы создаёте на хосте, где запущен докер.

Первым делом создаёте пользователя. далее каталог. даёте ему права на этот каталог. далее запускаете контейнер с маппингом на каталог и на ваш внешний passwrd. при запуске в каталоге должны создаться файлы постгресса. если нет - то повторяете всё с очистки, вчитываясь в страничку ссылку на которую Вы дали в самом начале и т.д.. Если файлы создались - только тогда можете двигаться далее - коннект админом и т.п.. Для понимания что происходит внутри контейнера Вы можете его запускать с параметрами в командной строке и тогда они будут выполняться прямо в контейнере. как то так... двигайтесь по шагам. всё сразу не пытайтесь - слишком много переменных...

(круглый)
...
Рейтинг: 0 / 0
Вопрос знатокам Docker
    #39812133
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0$ docker volume create pgdata
$ docker run -it --rm -v pgdata:/var/lib/postgresql/data postgres
The files belonging to this database system will be owned by user "postgres".

т.е. это каталог который Вы создаёте на хосте, где запущен докер.

Первым делом создаёте пользователя. далее каталог. даёте ему права на этот каталог. далее запускаете контейнер с маппингом на каталог и на ваш внешний passwrd. при запуске в каталоге должны создаться файлы постгресса. если нет - то повторяете всё с очистки, вчитываясь в страничку ссылку на которую Вы дали в самом начале и т.д.. Если файлы создались - только тогда можете двигаться далее - коннект админом и т.п.. Для понимания что происходит внутри контейнера Вы можете его запускать с параметрами в командной строке и тогда они будут выполняться прямо в контейнере. как то так... двигайтесь по шагам. всё сразу не пытайтесь - слишком много переменных...

(круглый)
Смотрите. Я может быть иногда бываю нетерпелив. Есть за мной такой грех. Но вопрос с Постргресом возник
из рабочих моментов. Делаю рабочую конфигурацию. Для разраба. Она должна летать на Windows10 на рабочих
станциях девов. И на Centos. Дома я тестирую на Ubuntu LTS. (Сейчас в данный момент). На всех конфигурациях
будет стоять докер. Нужно обеспечить работу PG. Но с поддержкой сохранения состояния. Тоесть на всех
конфигурациях я (и все разработчики) должны знать и понимать где лежит state этой системы чтобы иметь
возможность на этот state влиять.

Как бывш. Ораклисту мне всё понятно в части датафайлов и табличных пространств. Но у меня возникают вопросы
не из серии ЧТО это. А из серии где это лежит и как это ПРИНЯТО делать в лучших домах Европы. Грубо говоря
- традиции. ГДЕ традиционно принято хранить состояние докера с постресом?

- image docker?
- volume docker?

Документация на этот счет весьма сухая. Она не говорить как правильно. Как правильно шатдаунить постргес?
Мне моё чутье подсказывает что надо зайти аттачем в контейнер и сказать pg_ctl stop. Но где это чьорт возьми
делается перед докер коммитом? И все подобные такие мелочи.

Вобщем много таких вот вопросов. Простите моё ворчание.
...
Рейтинг: 0 / 0
Вопрос знатокам Docker
    #39812155
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Вы не так все делаете. В концепции докера в контейнере (и образе) данных быть не должно, собственно поэтому в самом дескрипторе /var/lib/postgresql/data объявлена как VOLUME - оно вне зависимости о чего-либо будет использовать хостовую фс, а не бутерброд unionfs, соответственно эти данные и в коммите участвовать не должны. Более того, БД в докере крутить - дурной тон, если вы хотите чтобы любой разработчик мог в любой момент времени раскатать себе образ с актуальной структурой БД, то вам нужно при запуске контейнера бутстрапить базу, т.е. Оно должно откуда-то выкачивать (или в образ класть, но так себе) дамп/бэкап/скрипты и накатывать их на голую базу.
...
Рейтинг: 0 / 0
Вопрос знатокам Docker
    #39812193
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфиловmayton,

Вы не так все делаете. В концепции докера в контейнере (и образе) данных быть не должно, собственно поэтому в самом дескрипторе /var/lib/postgresql/data объявлена как VOLUME - оно вне зависимости о чего-либо будет использовать хостовую фс, а не бутерброд unionfs
Спасибо Андрей. Именно это я и хотел услышать в топике.

Вобщем мой вопрос можно закрывать.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вопрос знатокам Docker
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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