Доброго времени суток! Сегодня я продемонстрирую вам, как быстро и эффективно настроить PostgreSQL с помощью Docker Compose. Этот процесс займет всего несколько минут, но в результате вы получите полноценную базу данных PostgreSQL, работающую в изолированном Docker контейнере. Важные компоненты, такие как базы данных, таблицы и индексы, будут сохранены на вашей локальной машине благодаря использованию томов (volumes), что обеспечит надежность и доступность данных.

Подготовка

Прежде чем приступить к развертыванию PostgreSQL на вашем локальном компьютере или VPS сервере, необходимо установить Docker и Docker Compose.

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

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

Если вы новичок в использовании Docker, рекомендуется начать с установки Docker Desktop на вашем локальном компьютере. Это приложение автоматически установит Docker и Docker Compose, облегчив первоначальное знакомство с контейнеризацией.

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

Шаг 1: Создание Docker Compose файла

Создаем пустую дирректоию и переходим в нее. В созданной дирректории создадим файл docker-compose.yml, который опишет наш сервис PostgreSQL. Вот пример моего файла:

version: '3.9'

services:
  postgres:
    image: postgres:latest
    container_name: postgres_container
    environment:
      POSTGRES_USER: postgres_user
      POSTGRES_PASSWORD: postgres_password
      POSTGRES_DB: postgres_db
      PGDATA: /var/lib/postgresql/data/pgdata
    ports:
      - "5430:5432"
    volumes:
      - ./pgdata:/var/lib/postgresql/data/pgdata
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 256M
    command: >
      postgres -c max_connections=1000
               -c shared_buffers=256MB
               -c effective_cache_size=768MB
               -c maintenance_work_mem=64MB
               -c checkpoint_completion_target=0.7
               -c wal_buffers=16MB
               -c default_statistics_target=100
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -U postgres_user -d postgres_db" ]
      interval: 30s
      timeout: 10s
      retries: 5
    restart: unless-stopped
    tty: true
    stdin_open: true

volumes:
  pgdata:
    driver: local

Краткий обзор Docker Compose файла

  1. services/postgres:

    • image: используемая Docker-образ PostgreSQL, в данном случае postgres:latest.

    • container_name: имя контейнера, в котором будет запущен PostgreSQL.

    • environment: переменные окружения для настройки PostgreSQL (пользователь, пароль, имя базы данных - не забудьте указать свои).

    • ports: проброс портов, где "5430:5432" означает, что порт PostgreSQL внутри контейнера (5432) проброшен на порт хоста (5430). Это значит что для подключения к постгрес нужно будет прописывать порт 5430.

    • volumes: монтируем локальный каталог ./pgdata внутрь контейнера для сохранения данных PostgreSQL.

    • deploy: определяет ресурсы и стратегию развертывания для Docker Swarm (необязательно для стандартного использования Docker Compose).

    • command: дополнительные параметры командной строки PostgreSQL для настройки параметров производительности.

    • healthcheck: проверка состояния PostgreSQL с использованием pg_isready.

    • restart, tty, stdin_open: настройки перезапуска контейнера и взаимодействия с ним через терминал.

  2. volumes/pgdata:

    • Определяет том pgdata, который используется для постоянного хранения данных PostgreSQL.

Запуск PostgreSQL

Чтобы развернуть PostgreSQL с помощью этого файла Docker Compose, выполните следующую команду в каталоге с файлом docker-compose.yml (будет одинаково работать, как на VPS, так и на вашей локальной машине):

docker-compose up -d

Эта команда запустит контейнер PostgreSQL в фоновом режиме (-d) на основе настроек, указанных в файле docker-compose.yml.

Если контейнер был развернут на локальной машине, то в качестве хоста можно использовать "localhost". В ином случае используйте ip адрес VPS сервера.

Заключение

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

Если эта информация была вам полезной - сообщите об этом через лайк, комментарий или подписку.

Благодарю за внимание.

Комментарии (12)


  1. OlegTar
    24.06.2024 08:05

    Можно сразу pgadmin рядом запустить через тот же compose.


    1. GennPen
      24.06.2024 08:05
      +2

      Зачем, если есть DBeaver.


      1. efi
        24.06.2024 08:05

        А есть приличная бесплатная альтернатива dbeavear'у? DataGrip очень удобный, но он недешёвый. HeidiSQL тоже хорош, но нет под linux


        1. GennPen
          24.06.2024 08:05
          +1

          А есть приличная бесплатная альтернатива dbeavear'у?

          Есть, DBeaver Community


      1. OlegTar
        24.06.2024 08:05

        а у него есть веб-версия?


        1. GennPen
          24.06.2024 08:05

          Нет, нету.

          Не вижу смысла в веб версиях, т.к. они как правило заточены только на один продукт (как тот же pgadmin для PostgreSQL). А если ставить на базы только с локальным доступом (только для localhost), так у DBeaver есть соединение через SSH.

          Hidden text


  1. Johan_Palych
    24.06.2024 08:05
    +2

    1. yakvenalex Автор
      24.06.2024 08:05

      Вы прочитали статью. После пошли в гугл. Собрали там 3 ссылки и решили их опубликовать к статье в комментариях с посылом "нафиг это написано". Подскажите, с вами все в порядке?


      1. Johan_Palych
        24.06.2024 08:05
        +2

        А с вами все в порядке? Если это уровень Хабра, то... Писать на хабре про docker+postgresql в такой тривиальной форме(Captain Obvious)?
        Несколько ссылок с хабра(docker+postgresql) у меня давно в закладках - ибо толково
        А с кармой и рейтингом некоторые ведут себя как дети малые.


        1. yakvenalex Автор
          24.06.2024 08:05

          Что значит в "тривиальной форме"? Нужно делать вид что докер какая то страшная и трудная технология? Данная форма подчеркивает обратное. Я, в целом, своими публикациями хочу показать что программировать может каждый. А тот кому нужны более глубокие знания и так их найдут.

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

          По факту разложите что в моем подходе не так, не корректно, не правильно.


          1. Johan_Palych
            24.06.2024 08:05
            +1

            За доброту и сподвижничество знаний в массы:

            #вариант
            sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
            sudo chmod +x /usr/local/bin/docker-compose
            #или
            sudo curl -s https://api.github.com/repos/docker/compose/releases/latest \
              | grep browser_download_url \
              | grep docker-compose-linux-x86_64 \
              | cut -d '"' -f 4 \
              | wget -qi -
            sudo mv docker-compose-linux-x86_64 /usr/bin/docker-compose && sudo chmod +x /usr/bin/docker-compose


            1. yakvenalex Автор
              24.06.2024 08:05

              Ну другой разговор же) Благодарю.