Введение
PostgreSQL — это система реляционных баз данных корпоративного класса с открытым исходным кодом и поддержкой запросов SQL и JSON. PostgreSQL пользуется поддержкой сообщества на протяжении более 20 лет. Это обеспечивает высочайший уровень целостности, производительности и отказоустойчивости. Наиболее распространенным применением PostgreSQL является хранилище данных для мобильных, веб-приложений и аналитических приложений. PostgreSQL поставляется с рядом функций, таких как асинхронная репликация, онлайновое/горячее резервное копирование, вложенные транзакции и многие другие функции.
Самый распространенный способ установки сервера базы данных PostgreSQL — из репозиториев пакетов операционной системы. Пакет .deb для систем на базе Debian и пакет .rpm для систем на базе RHEL. Альтернативный метод запуска PostgreSQL — внутри контейнера. Это обеспечивает чистое состояние системы и высочайший уровень переносимости. В этом сообщении блога мы сосредоточимся на установке и запуске сервера базы данных PostgreSQL в контейнере Docker.
Установка Docker Container 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
.
psql -V
psql (PostgreSQL) 11.22 (Debian 11.22-1.pgdg120+1)
Отсюда вы можете запустить psql
интерфейсную часть PostgreSQL на основе терминала.
su - postgres
psql (11.22 (Debian 11.22-1.pgdg120+1))
Type "help" for help.
postgres=#
Мы можем создать тестового пользователя и базу данных;
- Пользователь базы данных: 1 ноября
- Имя базы данных: мой сайт
- Пароль: Str0ngPassw0rd
CREATE USER nov1 WITH PASSWORD 'Str0ngPassw0rd';
CREATE ROLE
CREATE DATABASE mywebsite WITH OWNER = 'nov1';
CREATE DATABASE
Чтобы выйти из PostgreSQL и оболочки контейнера, используйте команду exit
три раза.
exit
logout
Данные базы данных будут храниться в ./pgdata, как определено в файле композиции.
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 в контейнере, вы оцените эффективность ее администрирования. Другие преимущества контейнеризации варьируются от переносимости до изоляции и масштабируемости. Вы можете поднять образ контейнера с данными и запустить его на отдельном хосте за считанные секунды. Решение о том, использовать ли контейнерную базу данных, зависит от ваших предпочтений в использовании.