PostgreSQL в контейнере Docker

DockerРанее стал разбираться с использованием Docker`a: Как установить и использовать Docker в Ubuntu 18.04. А использовать хочется PostgreSQL в этих контейнерах. Это можно сделать, сейчас пока как.

Но, в продолжение той статьи, рекомендую разобраться в основных отличиях образа и контейнера в Docker, а еще (вот это уже по желанию), подробнее почитать про слои и не только в Docker.

Коротко и быстро:

docker pull postgres
docker run --name mypg -e POSTGRES_PASSWORD=postgres -d -p 5432:5432 postgres

Подключение через psql с хостовой машины:

psql -h localhost -p 5432 -U postgres

Подключение к контейнеру:

docker exec -it mypg bash

Внутри него подключение к psql:

psql -U postgres

[свернуть]

Приступим к длинной статье со скриншотами и теми ошибками, которые я словил.

Сначала нужно найти образ с нужной версией PostgreSQL, я использую команду:

docker search postgres

search postgres

Буду использовать верхний (официальный) контейнер, 12 версия. Скачиваю его с помощью команды:

docker pull postgres

postgres pull final

Нужно немного подождать, всё-такие размер образа составляет 314 мегабайт, так что зависит от скорости интернета.

Размер образов можно посмотреть командой:

docker images

docker images

Теперь можно контейнер запускать (в статье по ссылке выше отличие образов от контейнеров есть). Попробую сделать это вот такой командой:

docker run -it postgres

Появляется ошибка (на самом деле, команду выше надо дополнить, тогда всё нормально будет, но на ошибку тоже нужно посмотреть):

postgres run error

Текст ошибки можете сами прочитать. Суть — нужно произвести различные инициализации, указать пароли и так далее, чтобы контейнер правильно сформировался. Я же этого не сделал еще, так что в базу зайти не могу. То есть, нужно правильно команду запуска сформировать.

Наверное, в данном случае лучше зайти на ту страницу, с которой производили скачивание образа postgres — со страницы хранилища контейнеров, dockerhub. В поле поиска вбиваем имя и находим результат:

dockerhub main

Попадаем на страницу с описанием данного контейнера:

dockerhub description

Описание большое, желательно всё прочитать. Я чутка поторопился, поискал в интернете интересующую меня информацию, мне ведь хотелось запустить контейнерный PostgreSQL и подключиться к нему. Поэтому, про официальную страницу помните и изучите её, а я далее покажу, что делал.

ВАЖНО: Возможно, что-то я делаю не правильно. Но я только начал изучать Docker, так что ошибки могут быть. Но код ниже работает 🙂

Итак, сначала предлагаю проверить, доступен ли «запущенный» выше PostgreSQL. Для этого я попробую запустить psql (можно установить с помощью команды apt и нужного пакета, там за версией надо следить) и подключиться к чему-нибудь:

psql -h localhost -p 5432 -U postgres

Появляется ошибка — естественно, ведь PostgreSQL у меня не установлен.

psql connect error

Вот теперь запускаем контейнер с PostgreSQL следующей командой:

docker run --name mypg -e POSTGRES_PASSWORD=postgres -d -p 5432:5432 postgres
  • —name — задаю имя контейнеру (у него всё-равно будет id-шник);
  • POSTGRES_PASSWORD=postgres — устанавливаю пароль для роли postgres;
  • -p — произвожу проброску порта хоста на порт контейнера.

С помощью команды:

docker ps -a

Убедимся, что всё получилось:

docker postgres good

Снова попробуем подключиться к контейнерному PostgreSQL с помощью psql, установленного на хостовой машине:

psql -h localhost -p 5432 -U postgres

Обратите внимание, что нужно ввести тот пароль, который указали в команде run:

psql connect good

Всё получилось! Можно даже таблицу создать:

psql tabletest

Теперь осталось подключиться к PostgreSQL из контейнера. Для этого необходимо выполнить вот такую команду:

docker exec -it mypg bash
  • exec — параметр для подключения к запущенному контейнеру;
  • mypg — имя контейнера (можно подставить Idшинк);
  • bash — указываем, что нужно запустить интерпретатор при входе в контейнер.

Можно походить по директориям. Подключены как пользователь ОС root.

into Docker

Внутри контейнера можно запустить psql и увидеть всё то, что было создано ранее. Для запуска psql достаточно указать роль через параметр -U:

psql -U postgres

psql tabletest inD

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

Напоминаю, что, если удалить контейнер — все пользовательские (созданные нами) данные потеряются!

Например, я сейчас останавливаю мой контейнер, потом его удаляю, создаю заново, подключаюсь и вижу:

docker stop mypg
docker ps -a
docker rm mypg
docker run --name mypg -e POSTGRES_PASSWORD=postgres -d -p 5432:5432 postgres
docker exec -it mypg bash
psql -U postgres

docker rm

Можно свой образ сделать с этими данными, а потом его использовать.

Уф, ну вроде всё! Наверное, я буду контейнер с PostgreSQL использовать для различных тестирований — удобно и быстро, заморачиваться с виртуальной машиной не надо.


Be the first to comment

Leave a Reply

Ваш Mail не будет опубликован.


*