Не устанавливайте Postgres. Docker pull Postgres

С момента появления Docker нет необходимости непосредственно устанавливать программное обеспечение для разработки на локальном компьютере. Будь то серверы баз данных (например, Postgres), системы кеширования (например, Redis, Memcache) или системы обмена сообщениями (например, Kafka) - почти всегда можно найти или создать подходящий docker образ для использования во время разработки.

Установить программное обеспечение сложно. И это не имеет ничего общего с вашим опытом в качестве разработчика. Все видели значительную долю столкновений версий, эзотерических сообщений об ошибках сборки и отсутствующих ошибок зависимостей каждый раз, когда приступали к задаче установки нового программного обеспечения для использования. Тратили бесчисленное количество часов, копируя фрагменты кода из Stack Overflow в терминал и выполняли их, надеясь, что один из них волшебным образом решит проблемы установки и заставит программное обеспечение работать. Результатом являются в основном отчаяние, разочарование и потеря производительности.

Docker предоставляет выход из этой путаницы, сводя задачу установки и запуска программного обеспечения всего к двум командам (docker run и docker pull). В этом посте мы увидим этот процесс в действии, шаг за шагом посмотрев, как легко и просто настроить установку Postgres с помощью Docker.

В этом посте предполагается, что у вас есть действующая учетная запись Docker и запущен демон Docker.

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

Чтобы получить образ для последней стабильной версии Postgres, просто запустите

docker pull postgres

Эта команда загрузит последнюю стабильную версию образа Postgres из официального репозитория Postgres Docker Hub. Чтобы получить версию, отличную от последней стабильной версии, мы можем предоставить соответствующее имя тега образа для команды docker pull:

docker pull postgres:[тег]

Создайте каталог, который будет служить точкой монтирования локального хоста для файлов данных Postgres

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

mkdir -p $HOME/docker/volumes/postgres

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

Запуск контейнера Postgres так же прост, как и запуск команды docker run

docker run --rm   --name pg-docker -e POSTGRES_PASSWORD=docker -d -p 5432:5432 -v $HOME/docker/volumes/postgres:/var/lib/postgresql/data  postgres

Мы предоставили несколько опций команде docker run:

  • - rm: автоматически удалять контейнер и связанную с ним файловую систему при выходе. В общем, если мы запускаем много краткосрочных контейнеров, рекомендуется передать флаг rm команде docker run для автоматической очистки и избежать проблем с дисковым пространством. Мы всегда можем использовать опцию v (описанную ниже), чтобы сохранить данные за пределами жизненного цикла контейнера
  • - name: идентифицирующее имя для контейнера. Мы можем выбрать любое имя, какое захотим. Обратите внимание, что два существующих (даже если они остановлены) контейнера не могут иметь одинаковые имена. Чтобы повторно использовать имя, вам нужно либо передать флаг rm команде docker run, либо явно удалить контейнер с помощью команды docker rm [имя контейнера].
  • -e: выставить переменную среды с именем POSTGRES_PASSWORD со значением docker для контейнера. Эта переменная окружения устанавливает пароль суперпользователя для PostgreSQL. Мы можем установить POSTGRES_PASSWORD на что угодно. Я просто выбрал его для демонстрации. Есть дополнительные переменные среды, которые вы можете установить. К ним относятся POSTGRES_USER и POSTGRES_DB. POSTGRES_USER устанавливает имя суперпользователя. Если не указано, имя суперпользователя по умолчанию - postgres. POSTGRES_DB задает имя базы данных по умолчанию для настройки. Если не указан, по умолчанию используется значение POSTGRES_USER.
  • -d: запускает контейнер в отдельном режиме (detached mode) или, другими словами, в фоновом режиме.
  • -p: привязать порт 5432 на локальном хосте к порту 5432 в контейнере. Эта опция позволяет приложениям, работающим вне контейнера, иметь возможность подключения к серверу Postgres, работающему внутри контейнера.
  • -v: Смонтировать $HOME/docker/volumes/postgres на хост-компьютере в путь к тому на стороне контейнера /var/lib/postgresql/data, созданный внутри контейнера. Это гарантирует, что данные postgres сохраняются даже после удаления контейнера.

Подключиться к Postgres

После запуска контейнера подключение к нему из приложения ничем не отличается от подключения к экземпляру Postgres, работающему вне контейнера Docker. Например, для подключения с помощью psql мы можем выполнить

psql -h localhost -U postgres -d postgres

Надеюсь, этот пост продемонстрировал, как легко и просто начать работать с Postgres в docker. Для большинства других приложений процесс такой же простой. Поэтому в следующий раз, когда вам нужно будет установить часть программного обеспечения, подумайте о том, как выполнить docker pull, прежде чем приступить к установке brew, yum install, apt-get install или любой другой команде, которая предназначена для вашего системного менеджера пакетов.

Комментарии

AlexDom написал(а)…
Спасибо. Шикарно. Всё получилось.
Не подскажете, как сделать dockerfile который автоматом делает сонтейнер со всеми параметрами что у вас в командной строке?

Популярные сообщения из этого блога

Язык поисковых запросов в Graylog

Нормальные формы, пример нормализации в базе данных

Хэш-таблица: разрешение коллизий