23.06.2025

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

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

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

Краткая сводка

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

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

Установка и настройка

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

sudo apt install docker

Скриншот № 1 — Установка

После чего можем запустить dockerd демон и проверить его работоспособность командами, после чего найти нужный образ в репозитории:

systemctl start docker && systemctl status docker
sudo docker search postgres

Скриншот № 2 — Поиск

Обратите внимание, на то что необходимо установить официальный образ контейнера, справа для этого есть пометка. Скачаем найденный образ с сервером базы данных через команду:

docker pull postgres

Скриншот № 3 — Скачивание образа

Это позволит скачать с удаленного в локальный репозиторий, с которым в дальнейшем будет работать docker engine. Проверим наш образ в локальном репозитории командой:

docker ls image

Скриншот № 4 — Список образов

Так как контейнер делит одно ядро ОС вместе с хостовой машиной, то некоторые функции изолированы не будут. К примеру, для создания процесса необходимы права с UID и GID, которые могут совпасть с пользователем хостовой ОС. Поэтому относитесь внимательно, к процессу монтирования папок с основной машины и создании пользователей.

docker run -d \
–name your-container-name \
–restart unless-stopped \
-e POSTGRES_USER=dbuser \
-e POSTGRES_PASSWORD=your-pass \
-e POSTGRES_DB=your-DB \
-p 5432:5432 \
-v name-of-volume:/var/lib/postgresql/data \
postgres && docker ps

Скриншот № 5 — Запуск контейнера

В команду для запуска контейнера, мы передаем переменные среды:

Образ сам создаст пользователя и от его лица запустит сервис с созданной БД. Теперь контейнер или ограниченный процесс является отдельным/изолированным пространством, который принимает сетевые обращения на порте 5432. Соответственно, обратится к серверу можно через сетевое соединение с удаленного устройства, используя IP-адрес хостовой ОС и порт, который ранее был проброшен. Можно проверить его доступность командами:

netstat -tulnp

Скриншот № 6 — Доступность по порту

Или же воспользоваться подключением через docker exec, где запустим клиент psql в самом же контейнере:

docker exec -it name-of-container psql -u dbsuer -D DB

Скриншот № 7 — Подключение к БД

Отлично, подключение произошло! Теперь можем управлять сервером БД, который изолирован от основной среды ОС. Для того, чтобы удалить контейнер выполним команды:

docker stop name-of-container && docker remove name-of-container && docker image remove postgres && docker volume remove name-of-volume

Скриншот № 8 — Удаление контейнера

После чего контейнер с образом и данными хранящимися для него будет удален. При необходимости или желании переустановить образ, команду docker volume remove name-of-volume можно не выполнять для сохранения созданных баз данных.

В данном материале мы рассмотрели пошаговый способ развертывания контейнерной среды с образом базы данных. Такой подход позволяет разграничить пространство между остальным ПО, что повышает целостность и защищает от коллизии разных зависимостей.