Основы работы с PostgreSQL в Docker

Kate

Administrator
Команда форума

Введение​

В данной статье рассматриваются некоторые особенности начала работы с СУБД PostgreSQL в Docker, которые могут быть полезны читателю, если он только начинает познавать искусство работы с контейнерами. Написать сие произведение меня побудило отсутствие статей, которые полностью покрывают базовые вещи в начале работы с PostgreSQL в Docker. В этой статье мы не будем подробно рассматривать принципы работы PostgreSQL, однако напишем несколько базовых запросов для того, чтобы протестировать работу контейнера.

Установка Docker​

Для того, чтобы установить Docker на ваш персональный компьютер, вам необходимо зарегистрироваться на официальном сайте. Сам процесс регистрации стандартный и с ним не должно возникнуть никаких проблем. После того, как вы зарегистрировались на сайте, необходимо загрузить приложение Docker Desktop. На данный момент кнопка загрузки выглядит следующим образом:
Кнопка загрузки приложения
Кнопка загрузки приложения
После того как вы скачали файл установщика, запустите его для установки Docker Desktop на ваш компьютер. Процедура установки сравнительно стандартная, поэтому комментировать её подробно я не буду.
Окно успешной установки программы
Окно успешной установки программы
При первом запуске программы вам будет предложено подтвердить соглашение о пользовании, его необходимо подтвердить для того, чтобы начать работу с Docker:
1dc6ff5c953f52f1eec3703d3c195e5c.png

После подтверждения откроется окно Docker Desktop:
fa47074ea5ab7cd67a5801c07e02f447.png

Установка pgAdmin​

pgAdmin - приложение, позволяющее визуализировать работу с базами данных. Её применение не обязательно, но исходя из моего опыта её наличие может сильно облегчить вам жизнь, особенно если вы не привыкли пользоваться консолью на постоянной основе. Скачать установщик данной программы можно либо с официального сайта pgAdmin, либо по этой ссылке. Процедура установки стандартная и при следовании инструкциям установщика проблем быть не должно. При первом запуске pgAdmin вам будет предложено ввести мастер-пароль. Данный пароль необходимо будет запомнить, так как он будет использоваться при подключении к СУБД.

Развёртка контейнера PostgreSQL​

Для того, чтобы запустить контейнер PostgreSQL, нам необходимо получить изображение (image), являющееся базой для создаваемого контейнера. Данное изображение будет содержать основные инструменты СУБД, что позволит нам работать с базами данных без установки PostgreSQL в систему. Это собственно и является одним из плюсов контейнеров. Официальное изображение PostgreSQL можно получить, если выполнить в командной строке следующую команду
docker pull postgres
После того, как команда закончит выполнение, проверьте Docker Desktop. Если изображение было успешно загружено, то вкладка images будет иметь следующий вид:
9353249a4f4e5c55abc216e05c0a4dd2.png

Как вы можете увидеть, теперь там находится изображение postgres.

Запуск и подключение при помощи консоли​

Для того, чтобы создать новый контейнер, нужно ввести в командную строку следующую команду:
docker run -p 5432:5432 -d --name=postgres_cont -e POSTGRES_PASSWORD=1234 -e POSTGRES_USER=postgres postgres
-p - порт подключения, в нашем случае это localhost
-d - опция отсоединения от изображения для того, чтобы контейнер мог работать в фоновом режиме
-e - настройка паролей и пользователя
После выполнения этой команды контейнер появляется в Docker Desktop:
2dba6892411dbfd07339bdafbf3ce26a.png

Для того, чтобы закончить работу с контейнером, можно либо нажать на кнопку stop, либо использовать следующую команду:
docker stop [имя контейнера]

Подключение к базе в pgAdmin​

Для того, чтобы подключиться к базе в pgAdmin, необходимо создать новый сервер. Чтобы это сделать, надо правой кнопкой мыши нажать на строку с надписью Server с левой стороны окна программы, в выпавшем меню выбрать Create -> Server:
8731e7795bb2b09a6ee1ccc9f07402c6.png

Для того, чтобы считывать порт контейнера (5432) перейдём на вкладку Connections и в графе Host/name adress введём "localhost":
8991c1d5ddc223457e955f19ff21d159.png

Также необходимо задать пароль. Сохранённый сервер будет выглядеть следующим образом:
6f8d6f0a459ba08931be519108ef6c7d.png

В качестве теста давайте создадим через консоль базу данных и подключимся к ней. Для этого нам необходимо запустить bash в контейнере, сделать мы это можем при помощи следующей команды:
docker exec -it [имя контейнера] bash
Затем нам нужно запустить консоль PostgreSQL, делается это таким образом:
psql -U postgres
Теперь давайте проверим базы данных, которые сейчас существуют в пространстве контейнера:
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 rows)
Для того, чтобы создать новую пустую базу данных, используем следующую команду:
CREATE DATABASE TEST_BASE;
Команда выполняется прямо в консоли, и в результате её выполнения мы получаем новую базу:
postgres-# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
test_base | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
(4 rows)
Для того, чтобы подключиться к данной базе мы используем команду \c:
postgres-# \c test_base
You are now connected to database "test_base" as user "postgres".
Проверим pgAdmin:
1588f14a7aa1a369c7fab008d5eb2366.png

Тестовая база присутствует в списке баз, что свидетельствует о её успешном создании и подключении. В качестве бонуса скажу, что с помощью команды \d можно просматривать таблицы, находящиеся в базе, к которой вы на данный момент подключены:
test_base=# CREATE TABLE TEST_TABLE (test_1 text, test_2 text, test_3 text);
CREATE TABLE
test_base=# \d
List of relations
Schema | Name | Type | Owner
--------+------------+-------+----------
public | test_table | table | postgres
(1 row)

Не забудьте удалить базу данных после окончания тестирования. Сделать это можно либо в pgAdmin, нажав правой кнопкой мыши на имя базы и выбрав опцию Delete/Drop, либо с помощью этой команды:
DROP DATABASE TEST_TABLE;

Обмен файлами между контейнером и компьютером-хостом​

Для переноса отдельных файлов используется команда cp. В случае переноса файлов в контейнер:
docker cp foo.txt <container_id>:/file/path/within/container/
В случае переноса файла из контейнера:
docker cp <containerId>:/file/path/within/container/foo.txt /host/path/target
Для переноса множества файлов возможно создание общих папок и использование volumes, однако в данной статье мы это рассматривать не будем.

Выполнение SQL сценариев​

Для выполнения psql сценария необходимо иметь файл со сценарием, имеющим расширение .psql и загруженный в файловую систему контейнера. Для выполнения файла нужно выполнить следующую команду в командной строке с открытой консолью psql:
\i path_to_sql_file

 
Сверху