Как запустить сервер PostgreSQL в контейнере Docker

27 feb 2024 4 min di lettura
Как запустить сервер PostgreSQL в контейнере Docker
Indice dei contenuti

Введение

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 позволяет ему работать в автономном режиме (в фоновом режиме) без активного интерактивного сеанса.

Ezoico
$ 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 в контейнере, вы оцените эффективность ее администрирования. Другие преимущества контейнеризации варьируются от переносимости до изоляции и масштабируемости. Вы можете поднять образ контейнера с данными и запустить его на отдельном хосте за считанные секунды. Решение о том, использовать ли контейнерную базу данных, зависит от ваших предпочтений в использовании.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.