Запуск PostgreSQL в Docker: Полное руководство для начинающих.

Если вы ищете легкий способ установить и запустить базу данных PostgreSQL, то использование Docker — отличный выбор.

Мы ранее уже устанавливали Docker, если у вас он еще не установлен, вам помогут наши статьи по установке на Windows и Linux соответственно.

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

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

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

Почему запускать PostgreSQL в Docker удобно?

  • Облегченная установка — не нужно вручную настраивать окружение и устанавливать базу данных.
  • Изоляция — контейнер работает независимо от остальной системы.
  • Легкое восстановление и перенос — все настройки и данные можно легко скопировать или восстановить.
  • Быстрый запуск — запуск и остановка базы данных занимает считанные секунды.

Пошаговая инструкция: как запустить PostgreSQL в Docker

Чтобы запустить PostgreSQL нам нужно скачать его образ, создать и запустить из него контейнер:

1. Загрузка образа PostgreSQL

Docker использует образы — шаблоны для создания контейнеров. Как найти нужный образ мы рассматривали в отдельной статье. Для PostgreSQL официальный образ — postgres.

Выполним команду docker pull:

[root@waky ~]# docker pull postgres
Using default tag: latest
latest: Pulling from library/postgres
0e4bc2bd6656: Pull complete
1a50b0db5bde: Pull complete
02119e61144b: Pull complete
3221278be714: Pull complete
fed2b3560f55: Pull complete
c6aa08a3c711: Pull complete
24fdbfae116d: Pull complete
cc81fb737f8b: Pull complete
889840ade1ab: Pull complete
d75755489c86: Pull complete
cbf222e9e3b9: Pull complete
5a19de04632f: Pull complete
57871086ddd6: Pull complete
Digest: sha256:5ec39c188013123927f30a006987c6b0e20f3ef2b54b140dfa96dac6844d883f
Status: Downloaded newer image for postgres:latest
docker.io/library/postgres:latest
[root@waky ~]#

Так как мы не указали конкретную версию образа, Docker скачал самую свежую стабильную версию PostgreSQL с Docker Hub.

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

Теперь создадим контейнер и запустим базу данных командой docker run:

[root@waky ~]# docker run -d --name my_postgres -e POSTGRES_PASSWORD=your_password -p 5432:5432 -v ./postgresql_files:/var/lib/pgsql/ postgres
703958b47ea7899887342aacca5a06a732fd94c7762e10b2ef3d39bd0b6060b5
[root@waky ~]#

В качестве вывода мы получили ID контейнера. Его можно использовать для обращения к контейнеру, наряду с именем.

Использованные параметры:

-d — запуск в фоновом режиме
–name my_postgres — имя контейнера (можете выбрать любое)
-e POSTGRES_PASSWORD=your_password — задаем пароль для пользователя postgres (замените your_password на свой пароль)
-p 5432:5432 — проброс портов, чтобы подключаться к базе через этот порт
-v ./postgresql_files: /var/lib/pgsql/ postgres – монтирование директории контейнера с файлами базы в локальную директорию (./postgresql_files – заранее создайте пустую директорию)
postgres — имя образа, из которого создаем контейнер

Теперь у нас работает контейнер с PostgreSQL внутри. Можем увидеть его выведя список работающих контейнеров с помощью docker ps:

[root@waky ~]# docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED              STATUS              PORTS                                         NAMES
703958b47ea7   postgres   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:5432->5432/tcp, [::]:5432->5432/tcp   my_postgres
[root@waky ~]#

3. Проверка работы

Подключение к базе данных можно сделать через любой (установленный у вас) клиент PostgreSQL, например, psql .

Для подключения нужно указать хост(-h), порт(-p) и имя пользователя(-U), которые будут использованы для подключения:

[root@waky ~]# psql -h localhost -p 5432 -U postgres
Пароль пользователя postgres:
psql (13.20, сервер 18.1 (Debian 18.1-1.pgdg13+2))
postgres=# exit
[root@waky ~]#

После ввода пароля, который мы задали при запуске контейнера, мы попадаем в консоль PostgreSQL. База данных готова к работе.

Как управлять контейнером PostgreSQL

Чтобы остановить контейнер используйте docker stop:

[root@waky ~]# docker stop my_postgres
my_postgres
[root@waky ~]#

Чтобы запустить заново docker start:

[root@waky ~]# docker start my_postgres
my_postgres
[root@waky ~]# 

Удалить контейнер можно с помощью docker rm, однако нельзя удалить работающий контейнер. Нужно либо его сначала остановить либо использовать дополнительный параметр -f:

[root@waky ~]# docker rm my_postgres
Error response from daemon: cannot remove container "my_postgres": container is running: stop the container before removing or force remove
[root@waky ~]# docker rm -f my_postgres
my_postgres
[root@waky ~]#

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

Заключение

Мы буквально за пару минут получили рабочую базу данных PostgreSQL. Главное преимущество в том, что этот способ работает для любого окружения, лишь бы там был Docker.

Это быстро, удобно и безопасно. Следуя простым шагам, вы легко создадите свое окружение для разработки, тестирования или обучения.