Полное руководство по установке и настройке PostgreSQL в Docker

Зачем нужен Docker

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

Docker упрощает разработку, развертывание и управление приложениями, а также способствует снижению конфликтов окружений. 

Вдобавок к этому, он позволяет разработчикам сосредоточиться на создании качественного ПО и облегчает DevOps-практики для более быстрой и надёжной доставки приложений.

Что такое PostgreSQL 

PostgreSQL (PostgreSQL Database Management System) – это объектно-реляционная система управления базами данных (СУБД) с открытым исходным кодом.

Основные характеристики PostgreSQL:

  • Расширяемость. PostgreSQL предоставляет множество функций и возможностей, а также поддерживает различные расширения, что позволяет разработчикам создавать свои пользовательские типы данных, функции и процедуры.
  • Объектно-реляционная модель. PostgreSQL сочетает в себе функциональность реляционных баз данных и объектно-ориентированных баз данных. Он не только поддерживает таблицы, представления, индексы, триггеры и хранимые процедуры, но и позволяет определять собственные пользовательские типы данных.
  • ACID-транзакции. Данная СУБД обеспечивает целостность данных благодаря поддержке ACID-транзакций. 

ACID – это набор требований, которые обеспечивают сохранность ваших данных. В аббревиатуру входят: Atomicity (Атомарность), Consistency (Согласованность), Isolation (Изоляция) и Durability (Долговечность).

  • Многопоточность и параллелизм. PostgreSQL может эффективно работать с множеством параллельных запросов и потоков, обеспечивая высокую производительность на многопроцессорных системах.
  • JSON-поддержка. PostgreSQL имеет встроенную поддержку для хранения и работы с данными формата JSON.
  • Поддержка множества программных языков. PostgreSQL может использоваться с различными языками программирования. Например, с C/C++, Python, Java, Perl, Ruby и другими, что делает эту систему универсальной и удобной для разработки.
  • Географические и геометрические типы данных. PostgreSQL прекрасно подходит для запуска геопространственных приложений, так как даёт возможность хранить и работать с географическими и геометрическими данными.

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

Зачем использовать PostgreSQL в контейнере

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

Однако это одни из многих причин использовать PostgreSQL в контейнере. Этот способ:

  • обеспечивает изолированную среду для базы данных, что предотвращает конфликты с другими компонентами системы и обеспечивает стабильность работы; 
  • предоставляет возможность запускать PostgreSQL на различных хостах или облачных сервисах без изменения конфигурации;
  • упрощает управление версиями PostgreSQL и позволяет быстро менять образы для обновления или отката БД;
  • упрощает процесс развёртывания и обеспечивает предсказуемость при тестировании, разработке и масштабировании; 
  • способствует применению DevOps-практик и автоматизации процессов разработки и обновления БД;
  • обеспечивает отказоустойчивость и даёт быстро восстановить PostgreSQL из резервной копии при сбоях.

Аренда сервера

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

В таком случае поручите хранение своих данных проверенному партнёру! RU-CENTER предлагает аренду физического сервера, который обеспечит безопасность вашей информации. Мощное устройство в московском дата-центре гарантирует надёжность, а профессиональное обслуживание и поддержка 24/7 обеспечат бесперебойную работу ваших проектов. 

Для тех же, кто ищет идеальное виртуальное решение, RU-CENTER предлагает VPS/VDS хостинг на Linux. Наша команда профессионалов готова обеспечить непрерывную поддержку и круглосуточное обслуживание, чтобы вы могли сосредоточиться на более важных задачах и развитии своего проекта.

Установка PostgreSQL в Docker из образа

Установка PostgreSQL в Docker осуществляется путём создания и запуска контейнера на основе официального Docker-образа PostgreSQL, который предоставляется командой Docker. 

Вот простая инструкция по установке PostgreSQL в Docker из официального образа:

  1. Если у вас ещё нет Docker, убедитесь, что установили его на свой сервер. Вы можете скачать и установить платформу для своей операционной системы, следуя инструкциям на официальном сайте Docker или воспользовавшись нашим руководством.
  2. Откройте командную строку или терминал и выполните команду для поиска официального образа PostgreSQL в Docker Hub:

docker search postgres

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

  1. Загрузите выбранный образ PostgreSQL с помощью команды:

docker pull postgres

Готово! Теперь у вас установлен и работает PostgreSQL в контейнере Docker с именем «doc_postgres». 

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

  1. После того, как образ будет загружен, вы сможете создать контейнер из него. Например, чтобы создать контейнер с именем «doc_postgres», используя образ PostgreSQL, выполните следующую команду:

docker run --name doc_postgres -e POSTGRES_PASSWORD=mypassword -d postgres

Где:

  • «--name dc_postgres» задаст имя контейнера (в данном случае «doc_postgres»);
  • «-e POSTGRES_PASSWORD=mypassword» задаст пароль для пользователя «postgres»;
  • аргумент «-d» означает, что контейнер будет запущен в фоновом режиме.
  1. Чтобы проверить, что контейнер успешно запущен, выполните команду:

docker ps

В выводе вы увидите список всех запущенных контейнеров. Если запуск был произведён корректно, в списке появится контейнер с именем «doc_postgres» со статусом «Up».

Контейнер будет запущен в фоновом режиме, и СУБД PostgreSQL будет доступна для подключения.

Как подключиться к PostgreSQL в контейнере

  1. Если вы хотите подключиться к PostgreSQL внутри контейнера с помощью клиента, например, «psql», можете выполнить следующую команду:

docker exec -it doc_postgres psql -U postgres

После выполнения команды, вы будете подключены к базе данных PostgreSQL в контейнере. Там можно выполнять SQL-запросы и свободно работать с БД.

  1. Когда контейнер вам станет не нужен, остановите его простой командой:

docker stop doc_postgres

или 

Вы также можете остановить и сразу удалить данный контейнер:

docker rm -f doc_postgres

Важно! При удалении контейнера данные внутри него также будут удалены. Если вы хотите сохранить их, настройте тома для хранения этих данных вне контейнера.

Теперь вы знаете, как подключиться к PostgreSQL в контейнере Docker и выполнять запросы к базе данных. 

Если у вас возникли проблемы при подключении, убедитесь, что: 

  • контейнер PostgreSQL запущен; 
  • правильно указаны имя контейнера и имя пользователя для подключения.

Запуск PostgreSQL с помощью docker-compose

Запуск PostgreSQL с помощью Docker Compose – это наиболее удобный способ управления контейнерами. Docker Compose позволяет запускать несколько контейнеров одновременно, а также настраивать их взаимодействие и зависимости. 

Чтобы выполнить запуск PostgreSQL с помощью Docker Compose, выполните несколько шагов, описанных ниже.

Шаг 1. Установка Docker Compose 

Убедитесь, что вы установили Docker Compose на свой компьютер или сервер. Плагин Docker Compose поставляется вместе с Docker для Windows и Mac, но для Linux вы должны установить его отдельно. 

В этом шаге мы рассмотрим загрузку Docker Compose из репозитория.

  1. Обновите пакеты и установите последнюю версию Docker Compose:

Ubuntu/Debian:

 sudo apt-get update

 sudo apt-get install docker-compose-plugin

CentOS:

 sudo yum update

 sudo yum install docker-compose-plugin

  1. Проверьте, корректно ли прошла установка, проверив версию:

 docker compose version

Готово! Вы установили плагин Docker Compose в операционные системы Ubuntu, Debian и CentOS.

Также вы можете ознакомиться с процессом установки вручную в официальной документации Docker.

Шаг 2. Запуск PostgreSQL

  1. Создайте новый файл с именем «docker-compose.yml» и откройте его для редактирования. В этом файле вы определите параметры запуска PostgreSQL.

Содержание «docker-compose.yml» для запуска PostgreSQL должно быть примерно следующим:

yaml

version: '3.8'

services:

postgres:

image: postgres

container_name: my_postgres

environment:

POSTGRES_PASSWORD: mysecretpassword

ports:

- "5432:5432"

volumes:

- postgres_data:/var/lib/postgresql/data

  1. Откройте командную строку или терминал и перейдите в каталог, где находится ваш файл «docker-compose.yml». Затем выполните следующую команду:

docker-compose up -d

Команда «docker-compose up -d» загрузит образ PostgreSQL, создаст и запустит контейнер на основе определения из ранее созданного файла, а аргумент «-d» запустит контейнеры в фоновом режиме.

  1. Чтобы убедиться, что контейнер с PostgreSQL успешно запущен, выполните команду:

docker-compose ps

  1. Если вы захотите отключить данный контейнер, то можете остановить и удалить его командой:

docker-compose down

Важно! Данные внутри контейнера останутся на вашем сервере, только если вы настроили том для PostgreSQL.

Заключение

В этой статье мы рассмотрели установку и настройку PostgreSQL с использованием Docker. 

Контейнеризация делает процесс работы с базами данных более предсказуемым и эффективным, позволяя быстро масштабировать и управлять PostgreSQL в различных сценариях. Этот подход особенно полезен для разработчиков и DevOps-специалистов и обеспечивает удобную среду для работы с PostgreSQL.

Всё ещё остались вопросы?