Развертывание PostgreSQL и pgAdmin с Docker и Docker Compose | Полное руководство

31 марта 2025
Развертывание PostgreSQL и pgAdmin с Docker и Docker Compose | Полное руководство

В современной разработке программного обеспечения контейнеризация стала стандартом де-факто. Docker и Docker Compose позволяют быстро развертывать сложные системы, включая базы данных, с минимальными затратами времени и ресурсов. В этой статье мы подробно рассмотрим, как развернуть PostgreSQL и pgAdmin с помощью этих инструментов.

Хотите развернуть PostgreSQL в облаке? Используйте высокопроизводительные облачные серверы от Reg.ru с нашим эксклюзивным промокодом: 1524-DDFE-97B0-04A1 для получения скидки!

Что такое Docker и Docker Compose?

Docker — это платформа для разработки, доставки и запуска приложений в контейнерах. Контейнеры позволяют упаковать приложение со всеми его зависимостями в стандартизированный блок, который может работать на любой системе с Docker.

Docker Compose — это инструмент для определения и запуска многоконтейнерных приложений Docker. С помощью YAML-файла вы можете настроить все сервисы вашего приложения и запустить их одной командой.

Преимущества использования Docker для PostgreSQL

  • Быстрое развертывание: Запуск PostgreSQL в контейнере занимает секунды
  • Изоляция: База данных работает в собственном окружении, не влияя на хост-систему
  • Переносимость: Контейнер можно запустить на любой системе с Docker
  • Масштабируемость: Легко добавить реплики или кластер
  • Управление версиями: Можно быстро переключаться между разными версиями PostgreSQL

Установка Docker и Docker Compose

Перед началом работы убедитесь, что на вашей системе установлены Docker и Docker Compose.

Установка на Linux (Ubuntu/Debian)

# Обновляем пакеты
sudo apt update

# Устанавливаем необходимые зависимости
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

# Добавляем официальный GPG-ключ Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Добавляем репозиторий Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Устанавливаем Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

# Проверяем установку
sudo docker --version

# Устанавливаем Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

# Добавляем текущего пользователя в группу docker
sudo usermod -aG docker $USER
newgrp docker

Установка на Windows/macOS

Для Windows и macOS рекомендуется установить Docker Desktop, который включает в себя и Docker, и Docker Compose.

Примечание: Для работы Docker на Windows требуется включенная виртуализация и Windows 10/11 Pro или Enterprise. На macOS Docker работает на всех современных версиях.

Развертывание PostgreSQL с помощью Docker

Самый простой способ запустить PostgreSQL в Docker — использовать официальный образ с Docker Hub.

Запуск PostgreSQL одной командой

docker run --name my-postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-e POSTGRES_USER=myuser \
-e POSTGRES_DB=mydatabase \
-p 5432:5432 \
-d postgres:15

Разберем параметры:

  • --name my-postgres — имя контейнера
  • -e POSTGRES_PASSWORD=... — пароль для суперпользователя
  • -e POSTGRES_USER=... — имя пользователя (если не указать, будет использоваться postgres)
  • -e POSTGRES_DB=... — имя базы данных (если не указать, будет создана база с именем пользователя)
  • -p 5432:5432 — проброс порта (хост:контейнер)
  • -d — запуск в фоновом режиме
  • postgres:15 — имя образа и версия PostgreSQL

Проверка работы PostgreSQL

Убедимся, что контейнер запущен:

docker ps

Подключимся к контейнеру и проверим базу данных:

docker exec -it my-postgres psql -U myuser -d mydatabase

В интерактивной консоли PostgreSQL можно выполнить:

\l   -- список баз данных
\dt  -- список таблиц
\q   -- выход

Развертывание pgAdmin с помощью Docker

pgAdmin — это популярная веб-админстративная панель для PostgreSQL. Запустим её также в Docker:

docker run --name my-pgadmin \
-e PGADMIN_DEFAULT_EMAIL=admin@example.com \
-e PGADMIN_DEFAULT_PASSWORD=secret \
-p 8080:80 \
-d dpage/pgadmin4

Параметры:

  • PGADMIN_DEFAULT_EMAIL — email для входа
  • PGADMIN_DEFAULT_PASSWORD — пароль
  • -p 8080:80 — проброс порта (на хосте 8080, в контейнере 80)

После запуска pgAdmin будет доступен по адресу http://localhost:8080.

Использование Docker Compose для совместного развертывания

Для управления несколькими контейнерами удобнее использовать Docker Compose. Создадим файл docker-compose.yml:

version: '3.8'

services:
  postgres:
    image: postgres:15
    container_name: my-postgres
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mysecretpassword
      POSTGRES_DB: mydatabase
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - postgres-network
    restart: unless-stopped

  pgadmin:
    image: dpage/pgadmin4
    container_name: my-pgadmin
    environment:
      PGADMIN_DEFAULT_EMAIL: admin@example.com
      PGADMIN_DEFAULT_PASSWORD: secret
    ports:
      - "8080:80"
    networks:
      - postgres-network
    restart: unless-stopped
    depends_on:
      - postgres

volumes:
  postgres_data:

networks:
  postgres-network:
    driver: bridge

Разберем ключевые моменты:

  • volumes — создает постоянное хранилище для данных PostgreSQL
  • networks — создает сеть, в которой контейнеры могут общаться друг с другом
  • restart: unless-stopped — автоматический перезапуск при падении
  • depends_on — pgAdmin запустится только после PostgreSQL

Запуск и управление

Для запуска всех сервисов выполните:

docker-compose up -d

Для остановки:

docker-compose down

Если вы хотите сохранить данные PostgreSQL, используйте:

docker-compose down --volumes

Настройка pgAdmin для работы с PostgreSQL

После запуска контейнеров:

  1. Откройте pgAdmin по адресу http://localhost:8080
  2. Войдите с email и паролем, указанными в docker-compose.yml
  3. Щелкните правой кнопкой на "Servers" → "Register" → "Server"
  4. Введите имя сервера (например, "My PostgreSQL")
  5. На вкладке "Connection" укажите:
    • Host name/address: postgres (имя сервиса из docker-compose)
    • Port: 5432
    • Maintenance database: mydatabase
    • Username: myuser
    • Password: mysecretpassword
  6. Нажмите "Save"

Важно: В поле "Host name/address" мы указываем postgres, а не localhost, потому что pgAdmin подключается к PostgreSQL внутри Docker-сети, где контейнер с PostgreSQL доступен по имени сервиса.

Перенос проекта на облачный сервер

Когда ваше приложение готово к развертыванию в production, вы можете перенести его на облачный сервер. Облачные серверы Reg.ru — отличное решение для хостинга ваших Docker-приложений.

Почему стоит выбрать Reg.ru?

  • Высокая производительность SSD-дисков
  • Гибкая система тарификации
  • Простое управление через веб-интерфейс
  • Быстрое развертывание серверов
  • Техническая поддержка 24/7

Специальное предложение! Используйте промокод 1524-DDFE-97B0-04A1 при заказе облачного сервера на Reg.ru и получите скидку!

Развертывание на облачном сервере

После заказа сервера выполните следующие шаги:

  1. Подключитесь к серверу по SSH
  2. Установите Docker и Docker Compose (инструкции выше)
  3. Скопируйте ваш docker-compose.yml на сервер
  4. Запустите сервисы командой docker-compose up -d
  5. Настройте фаерволл (если нужно):
    sudo ufw allow 5432/tcp  # PostgreSQL
    sudo ufw allow 8080/tcp  # pgAdmin
    sudo ufw enable

Резервное копирование и восстановление данных

При работе с Docker важно правильно организовать резервное копирование данных PostgreSQL.

Создание резервной копии

docker exec -t my-postgres pg_dump -U myuser -d mydatabase > backup.sql

Восстановление из резервной копии

cat backup.sql | docker exec -i my-postgres psql -U myuser -d mydatabase

Автоматическое резервное копирование

Можно настроить cron-задачу для регулярного создания резервных копий:

0 3 * * * docker exec -t my-postgres pg_dump -U myuser -d mydatabase > /backups/mydatabase_$(date +\%Y-\%m-\%d).sql

Оптимизация производительности

Для production-среды рекомендуется настроить параметры PostgreSQL:

services:
  postgres:
    ...
    environment:
      ...
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mysecretpassword
      POSTGRES_DB: mydatabase
      POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=C --lc-collate=C"
      PGDATA: /var/lib/postgresql/data/pgdata
      POSTGRES_HOST_AUTH_METHOD: md5
    command: >
      postgres -c shared_buffers=256MB
               -c max_connections=100
               -c effective_cache_size=768MB
               -c work_mem=6553kB
               -c maintenance_work_mem=64MB
    ...

Безопасность

При развертывании в production учитывайте следующие меры безопасности:

  • Используйте сложные пароли
  • Не открывайте порт 5432 для внешнего мира без необходимости
  • Ограничьте доступ к pgAdmin по IP или используйте VPN
  • Регулярно обновляйте образы Docker
  • Настройте бэкапы

Заключение

Docker и Docker Compose предоставляют мощные инструменты для быстрого развертывания PostgreSQL и pgAdmin. Этот подход особенно полезен для разработки, тестирования и даже production-сред, когда важны скорость развертывания и воспроизводимость окружения.

Для production-развертывания рассмотрите возможность использования облачных серверов, таких как облачные решения Reg.ru, которые обеспечивают высокую доступность и производительность.

Не забудьте промокод! 1524-DDFE-97B0-04A1 — ваш ключ к выгодным условиям на облачные серверы Reg.ru.

Полезные ссылки:

Написать комментарий