yandex
Калькулятор ценТарифыАкцииДокументацияО насКарьера в Cloud.ruНовостиЮридические документыКонтактыРешенияРеферальная программаКейсыПартнерство с Cloud.ruБезопасностьEvolutionAdvancedEvolution StackОблако VMwareВ чем отличия платформ?БлогОбучение и сертификацияМероприятияИсследования Cloud.ruЛичный кабинетВойтиЗарегистрироватьсяОблако для мобильных и веб‑приложенийСайт в облакеАналитика данных в облакеХранение данных в облакеАналитика данных в облакеИнфраструктура для 1С в облакеМиграция IT‑инфраструктуры в облако3D-моделирование и рендерингРазработка и тестирование в облакеEvolution ComputeEvolution Managed KubernetesEvolution Object StorageEvolution Managed PostgreSQL®Evolution Bare MetalEvolution SSH KeysEvolution ImageEvolution DNSEvolution VPCEvolution Load BalancerEvolution Magic RouterEvolution DiskEvolution Container AppsEvolution Artifact RegistryEvolution Managed ArenadataDBEvolution Managed TrinoEvolution Managed SparkEvolution ML InferenceEvolution Distributed TrainEvolution ML FinetuningEvolution NotebooksEvolution TagsEvolution Task HistoryCurator Anti-DDoSCurator Anti‑DDoS+WAFUserGate: виртуальный NGFWStormWall: Anti-DDoSCloud MonitoringCloud LoggingАренда GPUDirect ConnectCDNCloud AdvisorCross-platform connectionAdvanced Object Storage ServiceAdvanced Elastic Cloud ServerAdvanced Relational Database Service for PostgreSQLAdvanced Image Management ServiceAdvanced Auto ScalingAdvanced Enterprise RouterAdvanced Cloud Backup and RecoveryAdvanced Data Warehouse ServiceAdvanced Elastic Volume ServiceAdvanced Cloud Container EngineAdvanced FunctionGraphAdvanced Container Guard ServiceAdvanced Software Repository for ContainerAdvanced Document Database Service with MongoDBAdvanced Relational Database Service for MySQLAdvanced Relational Database Service for SQL ServerAdvanced Server Migration ServiceAdvanced Data Replication ServiceAdvanced API GatewayAdvanced CodeArtsAdvanced Distributed Message Service for KafkaAdvanced Distributed Message Service for RabbitMQAdvanced DataArts InsightAdvanced CloudTableAdvanced MapReduce ServiceAdvanced Cloud Trace ServiceAdvanced Application Performance ManagementAdvanced Identity and Access ManagementAdvanced Enterprise Project Management ServiceVMware: виртуальный ЦОД с GPUVMware: виртуальный ЦОДУдаленные рабочие столы (VDI)VMware: резервное копирование виртуальных машинVMware: резервный ЦОДVMware: резервное копирование в облакоVMware: миграция виртуальных машин
Связаться с нами

Как запустить PostgreSQL в Docker: compose, hub, image, run

PostgreSQL в Docker — это удобно. База данных (БД) со всеми настройками упаковывается в контейнер и одинаково работает где угодно: на вашем компьютере, на тестовом сервере или в облаке. В этой статье разберем, как развернуть и запустить PostgreSQL в Docker.

Инструкции
Иллюстрация для статьи на тему «Как запустить PostgreSQL в Docker: compose, hub, image, run»
Продукты из этой статьи:
Иконка-Evolution Managed PostgreSQL®
Evolution Managed PostgreSQL®

Что такое PostgreSQL

PostgreSQL — это мощная система управления базами данных (СУБД) на открытом коде. Она подходит для работы с большими объемами данных, поддерживает стандарт SQL и расширяет его множеством дополнительных возможностей.

Преимущества PostgreSQL:

  • Свободное распространение — систему можно бесплатно использовать, модифицировать и адаптировать под свои нужды. 

  • Обогащение функциональности — PostgreSQL позволяет добавлять новые типы данных и дополнительные опции благодаря системе расширений. 

  • Кроссплатформенность — проект поддерживается практически всеми операционными системами (ОС). 

  • Защита данных — PostgreSQL располагает инструментами для обеспечения безопасности конфиденциальной информации. 

  • Масштабирование — продукт соответствует требованиям корпоративных систем и может адаптироваться под растущие нагрузки. 

  • Отказоустойчивость — система поддерживает механизмы репликации и кластеризации. 

  • Работа с неструктурированными данными — PostgreSQL поддерживает инструменты работы с информацией разных форматов, которая разрозненно хранится в разных хранилищах. 

Архитектура PostgreSQLАрхитектура PostgreSQL
Дарим до 20 000 бонусов
Дарим до 20 000 бонусов
4 000 бонусов — физическим лицам, 20 000 бонусов — юридическим

PostgreSQL успешно применяется как в небольших проектах, так и в масштабных корпоративных решениях. 

Что такое Docker-контейнеры

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

Контейнеры легко создавать, перемещать и запускать на разных компьютерах. Работать они будут везде одинаково. Такой подход сильно упрощает совместную разработку, тестирование и развертывание приложений. 

Процесс запуска контейнераПроцесс запуска контейнера

Подготовительные шаги к работе с PostgreSQL

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

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

Разберем установку на примере Ubuntu. Актуальный гайд Docker можно найти по адресу: https://docs.docker.com/engine/install/ubuntu/

Сначала обновите систему:

Установите пакеты, которые помогают системе работать с Docker через HTTPS:

Добавьте ключ Docker и репозиторий:

Обновите список пакетов и установите Docker вместе с плагином Compose:

Проверьте, что инструменты работают:

Современная версия Docker включает Compose как плагин, поэтому отдельная установка docker compose (через curl) больше не требуется.

Docker compose Docker compose

Если вы не хотите самостоятельно настраивать контейнеры, тома, резервные копии и мониторинг, обратите внимание на сервис Evolution Managed PostgreSQL от Cloud.ru. Это полностью управляемая база данных PostgreSQL с удобным веб-интерфейсом, автоматическими бэкапами, масштабированием в пару кликов и встроенным мониторингом. Вы получаете готовый кластер без необходимости администрировать Docker-окружение.

Получение образа PostgreSQL

Образ (image) — это шаблон, из которого создаются контейнеры. В нем предустановлено все необходимое — СУБД PostgreSQL, настройки окружения и базовые утилиты.

Получение образа PostgreSQL — процесс загрузки из Docker Hub или другого репозитория. Полученный образ ляжет в основу создания контейнера с базой данных.

Поиск образа на Docker Hub

Образ PostgreSQL ищите в официальном каталоге Docker Hub. В строке поиска введите postgres. Первым в списке результатов будет официальный образ PostgreSQL. Вы без проблем его найдете — он помечен как Official Image. Многие используют именно его, поскольку он поддерживается разработчиками PostgreSQL и регулярно обновляется. Нужную версию образа можно выбрать с помощью тегов. Рекомендуется указывать конкретную версию, например postgres:17 или postgres:16.4. Тег latest лучше не использовать в рабочих проектах.

Что из себя представляет образ PostgreSQL

Образ поддерживает несколько переменных окружения. Они нужны, чтобы настроить базу при запуске контейнера. Главные переменные:

  • POSTGRES_USER — имя пользователя;

  • POSTGRES_PASSWORD — пароль;

  • POSTGRES_DB — имя базы, которая будет создана при старте.

Благодаря переменным можно быстро запустить готовую базу и обойтись без ручных настроек. Пример команды для postgres 17 версии:

Всегда явно указывайте версию PostgreSQL (например, postgres:16.4 или postgres:17). Не используйте тег latest — при перезапуске контейнера может установиться новая мажорная версия, с которой ваше приложение перестанет работать.

Перед развертыванием обязательно проверьте системные требования вашего приложения: какую версию PostgreSQL оно поддерживает, и ставьте именно ее.

Запуск контейнера PostgreSQL

PostgreSQL в Docker можно развернуть двумя способами:

  • из командной строки (CLI) — для быстрых тестов и разработки;

  • через Docker Compose — для воспроизводимых конфигураций, работы с несколькими сервисами и боевых сред.

Далее рассмотрим оба подхода.

Управляйте PostgreSQL со SLA 99,7%
Создавайте и масштабируйте кластер базы данных, увеличивая vCPU, RAM и диск за пару кликов при росте нагрузки
Управляйте PostgreSQL со SLA 99,7%

Базовый запуск контейнера PostgreSQL с минимальной конфигурацией 

Для базового запуска контейнера полезна команда docker run. Главное — установить пароль для суперпользователя postgres через переменную окружения POSTGRES_PASSWORD.

Команда:

Что делает docker run:

  • -d запускает контейнер в фоновом режиме.

  • --name my-postgres дает контейнеру имя.

  • -e POSTGRES_PASSWORD=mysecretpassword — устанавливает пароль для суперпользователя. Для тестирования можно указать пароль прямо в команде. Для боевого окружения лучше вынести учетные данные в отдельный файл (например, .env) и использовать --env-file.

  • postgres указывает, какой образ Docker использовать. 

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

Проброс портов и томов

Чтобы работать с PostgreSQL, необходимо сделать две вещи:

  1. Пробросить порт — открыть доступ к базе данных с вашего компьютера.

  2. Использовать том — примонтировать папку с хостовой файловой системы в контейнер. Это нужно, чтобы данные базы не пропадали при удалении или обновлении контейнера. Вы указываете конкретную директорию на хосте (или именованный том), и PostgreSQL сохраняет туда все файлы.

Для этого в команду docker run добавьте флаги -p (порт) и -v (том):

  • -p 5432:5432 — связывает порт 5432 на вашем компьютере с портом 5432 внутри контейнера;

  • -v pgdata:/var/lib/postgresql/data — создает именованный том pgdata. Данные будут храниться в /var/lib/docker/volumes/pgdata. Если нужна конкретная папка на хосте, укажите абсолютный путь: -v /home/user/pgdata:/var/lib/postgresql/data.

Использование Docker Compose для управления PostgreSQL

Compose позволит определить и запустить PostgreSQL вместе с другими сервисами. 

Конфигурация Docker Compose

Для развертывания PostgreSQL через Docker Compose создайте файл docker-compose.yml, где описан сервис базы данных с постоянным томом для хранения данных, переменными окружения для инициализации и настройками сети. 

Посмотрите на пример ниже, который включает сервис pgAdmin как опцию. Это необязательный элемент — для работы PostgreSQL достаточно только сервиса db. pgAdmin приведен для удобства визуального управления.

Еще пример файла — на скрине. В нем описание не такое подробное. 

Пример docker-compose.ymlПример docker-compose.yml

Какие разделы есть в файле:

Services — главный раздел с описанием каждого контейнера.

1. image — используемый образ Docker, например, postgres:17 или postgres:16.4;

2. build — путь к Dockerfile, который нужен, если образ будет собран локально;

3. ports — проброс портов (например, "8080:80");

4. environment — переменные окружения, например, пароли для базы данных;

5. volumes — в секции services подключает тома к контейнеру, в корневой секции — определяет именованные тома.

Networks — определяет пользовательские сети. Docker Compose автоматически создает общую сеть для всех сервисов, позволяя им обращаться друг к другу по имени.

Файл docker-compose.yml гарантирует, что приложение будет запущено с одинаковой конфигурацией на любой машине — на компьютере разработчика, на тестовом сервере или в продакшене.

В том же каталоге, что и docker-compose.yml, находится файл .env (db.env). В нем задаются переменные окружения для работы контейнеров, запущенных с помощью Docker Compose. Пример файла:

Чтобы избежать путаницы, не дублируйте переменные окружения в секции environment файла docker-compose.yml, если вы используете env_file. Используйте либо тот, либо другой способ — но не оба одновременно для одних и тех же переменных.

Запуск и управление контейнерами с помощью Docker Compose

В таблице — основные команды для управления контейнерами. 

Команда
Применение
docker compose up
Создает (или пересоздает) и запускает все сервисы, которые есть в файле. При этом в терминал выводятся логи всех контейнеров.
docker compose up -d
Делает то же самое, что docker compose up, но запускает контейнеры в фоновом режиме. Это самый распространенный способ запуска/
docker compose down
Останавливает и удаляет контейнеры, сети и (опционально, с флагом -v) тома, созданные с помощью docker compose up
docker compose ps
Показывает текущий статус всех сервисов проекта
docker compose logs
Показывает логи всех запущенных сервисов
docker compose logs -f
Показывает логи в реальном времени
docker compose exec <сервис> <команда>
Выполняет команду внутри запущенного контейнера (например, docker compose exec db psql -U user)
docker compose build
Пересобирает образы для сервисов, у которых указан путь build
docker compose pull
Загружает все образы, указанные в image

Использовать Docker Compose очень удобно, поскольку с помощью одной команды docker compose up -d можно запустить систему, состоящую из множества сервисов.

Альтернатива командной строке: Portainer. Если вы не хотите запоминать команды Docker Compose, установите Portainer — веб-интерфейс для управления контейнерами, образами, томами и сетями. В нем можно развернуть PostgreSQL буквально в несколько кликов, а также мониторить состояние сервисов. Portainer сам запускается как контейнер и работает поверх Docker.

Настройки и конфигурации

Конфигурация PostgreSQL в контейнере Docker осуществляется двумя основными способами — через монтирование конфигурационных файлов для тонкой настройки и через переменные окружения. 

Управление конфигурационными файлами

Это лучший способ, если вам нужно задать много пользовательских параметров (например, max_connections, shared_buffers и т.д.). Стандартные переменные окружения в таких настройках бессильны. 

Создайте на своем компьютере файл с нужными настройками. Например, файл custom.conf с таким содержанием:

Можно использовать флаг -v или секцию volumes в docker-compose.yml, чтобы пробросить ваш файл внутрь контейнера. Так вы указываете PostgreSQL, что нужно применить этот файл. 

Пример работы с помощью docker-compose.yml:

Действие
Описание
Пример команды
Создание файла
Создайте файл custom.conf на хост-машине с нужными настройками (например, max_connections = 200).
Создается локально: /path/to/custom.conf
Монтирование файла
Используйте том (-v) для проброса локального файла в контейнер
-v /path/to/custom.conf:/etc/postgresql/custom.conf
Указание конфигурации
Явно укажите PostgreSQL необходимость использовать монтированный файл с помощью команды запуска
postgres -c config_file=/etc/postgresql/custom.conf

Можно запустить файл с помощью docker run:

Ограничение ресурсов контейнера

Для продакшен-окружения обязательно ограничивайте CPU и память, которые может использовать контейнер с PostgreSQL. Иначе один контейнер может «уронить» хост-машину.

В docker run:

В docker-compose.yml:

Работа с переменными окружения

Переменные окружения (-e) в образе PostgreSQL в основном используются для первичной инициализации базы данных. Они работают только при первом запуске контейнера, когда создается пустая база данных. При последующих запусках переменные игнорируются. 

Основные переменные: 

  • POSTGRES_PASSWORD — устанавливает пароль для пользователя postgres.

  • POSTGRES_USER — меняет имя суперпользователя с postgres на другое по вашему выбору. 

  • POSTGRES_DB — создает базу данных с указанным именем сразу после запуска.

Пример docker run с инициализацией: 

Эта команда создаст пользователя myuser с паролем mypass и сразу подготовит базу mydb. Ее владельцем будет новый пользователь myuser.

Переменные окружения не позволят вам настроить параметры работы сервера. Для более тонких настроек придется создавать пользовательский конфигурационный файл postgresql.conf либо передавать настройки прямо в команде запуска:

Подключение к PostgreSQL в контейнере

Предлагаем методы подключения к запущенному экземпляру PostgreSQL с хоста или из других контейнеров. 

Подключение с хоста

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

При запуске контейнера вы должны с помощью флага -p пробросить порт. Например, -p 5432:5432 связывает порт 5432 вашего компьютера с портом 5432 внутри контейнера.

Параметры подключения:

  • Хост: localhost (или 127.0.0.1)

  • Порт: 5432 (или тот порт, который вы указали первым в команде -p)

  • Пользователь: postgres (или тот, что задан вами в POSTGRES_USER)

  • Пароль: тот, что вы указали в POSTGRES_PASSWORD

Подключение с другого устройства в локальной сети. Если нужно подключиться к PostgreSQL с другого компьютера в той же локальной сети, используйте IP-адрес хостовой машины, на которой запущен контейнер. Например:

  • Хост: 192.168.1.100 (IP вашего сервера с Docker)

  • Порт: 5432 (или проброшенный порт)

Убедитесь, что брандмауэр на хостовой машине разрешает входящие подключения на этот порт.

Подключение из другого контейнера 

Этот способ актуален, если приложение тоже находится в Docker, и ему нужно обнаружить контейнер с базой данных. Главное, чтобы приложение и PostgreSQL находились в одной пользовательской сети Docker и имели имена. 

Создайте сеть:

Запустите PostgreSQL в этой сети. Обязательно укажите имя контейнера (--name) и сеть (--network).

Запустите приложение внутри сети:

Какие параметры подключения вы увидите внутри приложения: 

  • Хост my-postgres-db (имя контейнера PostgreSQL)

  • Порт 5432 (внутренний порт PostgreSQL)

  • Пользователь postgres, для которого можно задать собственное имя

  • Пароль mysecretpassword — секретный пароль

Как выглядит строка:

То же самое в Docker Compose. Сеть создавать не нужно — Compose создает ее автоматически. Достаточно описать оба сервиса в одном файле:

Внутри контейнера app подключение к БД доступно по имени сервиса: db:5432.

Как хранить файлы БД

Контейнеры Docker не сохраняют состояние (stateless). При удалении контейнера данные внутри него теряются, если не использовать тома.

Для продакшен используйте отдельный каталог на хосте, например:

Или:

Это упрощает бэкапы и перенос данных между серверами.

Затем используйте полную команду запуска контейнера с томом:

Проверка, что данные сохраняются:

База demo останется на месте.

Итоги

Из статьи вы узнали:

  • как установить Docker + Compose одной командой;

  • почему не стоит использовать latest и как выбирать версию PostgreSQL;

  • разницу между запуском через docker run и docker compose;

  • как пробрасывать порты и монтировать тома для сохранения данных;

  • как ограничивать CPU и память для контейнера;

  • как подключаться к PostgreSQL с хоста, из локальной сети и из другого контейнера;

  • что такое Portainer как альтернатива командной строке.

Этих знаний достаточно для безопасного и воспроизводимого развертывания PostgreSQL в Docker на любом окружении.

Продукты из этой статьи:
Иконка-Evolution Managed PostgreSQL®
Evolution Managed PostgreSQL®
29 апреля 2026

Нужна помощь с облаком?

Свяжитесь с нашим специалистом
*
*
+7
*
*
*
0/300

Вам может понравиться