PostgreSQL — это система реляционных баз данных корпоративного класса с открытым исходным кодом с поддержкой запросов SQL и JSON. PostgreSQL поддерживается более чем 20-летним опытом разработки сообществом. Это гарантирует высочайший уровень целостности, производительности и отказоустойчивости. Наиболее распространенным применением PostgreSQL является хранилище данных для мобильных, веб-приложений и приложений аналитики. PostgreSQL поставляется с набором функций, таких как асинхронная репликация, оперативное / горячее резервное копирование, вложенные транзакции, среди многих других функций.
Наиболее распространенный способ установки сервера базы данных PostgreSQL — из репозиториев пакетов операционной системы. Пакет .deb для систем на базе Debian и пакет .rpm для систем на базе RHEL. Альтернативный способ запуска PostgreSQL — внутри контейнера. Это обеспечивает чистое состояние системы и высочайший уровень переносимости. В этом сообщении в блоге мы сосредоточимся на установке и запуске сервера базы данных PostgreSQL в контейнере Docker.
Установка Docker Engine
Следуйте инструкциям, приведенным в нашей статье ниже, чтобы настроить среду Docker в вашей системе Linux. Пользователи Windows и macOS могут использовать инструменты на основе графического интерфейса, такие как Docker Desktop и Portainer.
После установки подтвердите, проверив выпуск версии.
$ docker --version
Docker version 25.0.3, build 4debf41
Создать файл Compose для PostgreSQL
Создать каталог данных для базы данных PostgreSQL
mkdir ~/postgresql && cd ~/postgresql
Создайте файл Compose, который определит, как должен быть создан контейнер.
vim docker-compose.yml
Далее мы определяем содержимое файла YAM. Контейнер образ в Docker Hub — это то, что мы используем для создания работающего экземпляра PostgreSQL сервера. Данные базы данных будут храниться в локальном каталоге ./pgdata.
Мы также создаем контейнер, в котором работает веб-инструмент управления Admirer PostgreSQL.
- PostgreSQL 16
services:
db:
image: postgres:16-bookworm
restart: always
environment:
POSTGRES_PASSWORD: StrongPassword01
volumes:
- ./pgdata:/var/lib/postgresql/data
adminer:
image: adminer
restart: always
ports:
- 8080:8080
- PostgreSQL 15
services:
db:
image: postgres:15-bookworm
restart: always
environment:
POSTGRES_PASSWORD: StrongPassword01
volumes:
- ./pgdata:/var/lib/postgresql/data
adminer:
image: adminer
restart: always
ports:
- 8080:8080
- PostgreSQL 14
services:
db:
image: postgres:14-bookworm
restart: always
environment:
POSTGRES_PASSWORD: StrongPassword01
volumes:
- ./pgdata:/var/lib/postgresql/data
adminer:
image: adminer
restart: always
ports:
- 8080:8080
- PostgreSQL 13
services:
db:
image: postgres:13-bookworm
restart: always
environment:
POSTGRES_PASSWORD: StrongPassword01
volumes:
- ./pgdata:/var/lib/postgresql/data
adminer:
image: adminer
restart: always
ports:
- 8080:8080
- PostgreSQL 12
services:
db:
image: postgres:12-bookworm
restart: always
environment:
POSTGRES_PASSWORD: StrongPassword01
volumes:
- ./pgdata:/var/lib/postgresql/data
adminer:
image: adminer
restart: always
ports:
- 8080:8080
- PostgreSQL 11
services:
db:
image: postgres:11-bookworm
restart: always
environment:
POSTGRES_PASSWORD: StrongPassword01
volumes:
- ./pgdata:/var/lib/postgresql/data
adminer:
image: adminer
restart: always
ports:
- 8080:8080
Запуск сервера PostgreSQL в контейнере
Далее мы запускаем контейнер, выполняя команды создания. Опция -d
позволяет запускать его в автономном режиме (фоновом режиме) без активного интерактивного сеанса.
$ docker compose up -d
[+] Running 22/22
✔ adminer 7 layers [⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 11.0s
✔ 09e2bc8a597c Pull complete 0.9s
✔ 092a59d5d649 Pull complete 0.7s
✔ e4dca1b56763 Pull complete 0.4s
✔ 378feffe5197 Pull complete 0.8s
✔ 3bd4de3ac847 Pull complete 1.1s
✔ 44d5566ceca7 Pull complete 1.1s
✔ 3dafa7b9d4fc Pull complete 1.3s
✔ db 13 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 13.5s
✔ 1f7ce2fa46ab Pull complete 1.8s
✔ e75b44f17b07 Pull complete 1.6s
✔ d601ea737a84 Pull complete 2.9s
✔ 0f4fcee3f93d Pull complete 2.1s
✔ 428f7aff61bc Pull complete 2.6s
✔ 7787ed5ab4f3 Pull complete 3.0s
✔ 3d2b66cffddc Pull complete 3.3s
✔ e7dee0dd847b Pull complete 3.3s
✔ a24060178bac Pull complete 5.8s
✔ 0eb290c85bd2 Pull complete 4.2s
✔ 88b80c4fe471 Pull complete 3.9s
✔ eac33d14a11e Pull complete 4.4s
✔ d40b681a9814 Pull complete 4.9s
[+] Running 2/3
⠋ Network postgresql_default Created 1.0s
✔ Container postgresql-adminer-1 Started 0.8s
✔ Container postgresql-db-1 Started 0.7s
Подтвердите состояние контейнера, выполнив команду docker compose с ps
флагом.
$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
postgresql-adminer-1 adminer "entrypoint.sh php -…" adminer 5 minutes ago Up 5 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
postgresql-db-1 postgres:11-bookworm "docker-entrypoint.s…" db 5 minutes ago Up 5 minutes 5432/tcp
Чтобы войти в оболочку контейнера, выполните;
$ docker exec -ti postgresql-db-1 bash
root@a79ad82fd433:/#
Версию PostgreSQL сервера можно проверить с помощью psql -V
команды.
root@a79ad82fd433:/# psql -V
psql (PostgreSQL) 11.22 (Debian 11.22-1.pgdg120+1)
Оттуда вы можете запустить psql
который представляет собой интерфейс PostgreSQL на основе терминала.
root@a79ad82fd433:/# su - postgres
postgres@a79ad82fd433:~$ psql
psql (11.22 (Debian 11.22-1.pgdg120+1))
Type "help" for help.
postgres=#
Мы можем создать тестового пользователя и базу данных;
- Пользователь базы данных: computingforgeeks
- Имя базы данных: mywebsite
- Пароль: Str0ngPassw0rd
postgres=# CREATE USER computingforgeeks WITH PASSWORD 'Str0ngPassw0rd';
CREATE ROLE
postgres=# CREATE DATABASE mywebsite WITH OWNER = 'computingforgeeks';
CREATE DATABASE
Чтобы выйти из PostgreSQL и оболочки контейнера, используйте exit
команду три раза.
postgres=# exit
postgres@a79ad82fd433:~$ exit
logout
root@a79ad82fd433:/# exit
exit
[root@rocky8 postgresql]#
Данные базы данных будут храниться в ./pgdata, как определено в файле compose.
$ ls -1 pgdata/
base
global
pg_commit_ts
pg_dynshmem
pg_hba.conf
pg_ident.conf
pg_logical
pg_multixact
pg_notify
pg_replslot
pg_serial
pg_snapshots
pg_stat
pg_stat_tmp
pg_subtrans
pg_tblspc
pg_twophase
PG_VERSION
pg_wal
pg_xact
postgresql.auto.conf
postgresql.conf
postmaster.opts
postmaster.pid
Доступ к панели управления Admirer
Откройте ваш веб-браузер на http://ServerIP:8080.
Войдите в систему как пользователь, база данных и с паролем.
Вы получите панель мониторинга, аналогичную показанной ниже. Отсюда вы можете управлять своей базой данных – создавать таблицы, функции, представления, импортировать данные и т.д.
Заключение
Запуская базу данных PostgreSQL в контейнере, вы получаете удовольствие от эффективности ее администрирования. Другие преимущества контейнеризации варьируются от переносимости, изоляции до масштабируемости. Вы можете поднять образ контейнера с данными и запустить его на отдельном хосте в течение нескольких секунд. Решение о том, использовать ли контейнерную базу данных, зависит от ваших предпочтений в использовании.