Перейти к содержимому
Главная страница » Запуск PostgreSQL в Docker

Запуск PostgreSQL в Docker

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *