Использование PostgreSQL из под Docker

Posted on Пт. 14 Октябрь 2016 in Docker

Опишу небольшую шпаргалку по использованию PostgreSQL из Docker контейнера.

Использовать будем официальный образ.

Скачивание и запуск контейнера:

docker run --name test-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres

Командой run мы запускаем новый контейнер, с помощью параметра --name указываем имя контейнера в данном случае это test-postgres, параметр -e позволяет задать переменные окружения, для данного образа доступно несколько переменных с помощью которых мы можем указать параметры для базы, более подробно на странице описания образа. И последний параметр -d означает запуск контейнера в фоновом режиме.

По умолчанию будет скачиваться последняя версия СУБД, на данный момент это 9.6, но мы можем указать нужную нам версию:

docker run --name test-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres:9.4

После запуска контейнера в нем будет запущен PostgreSQL с созданной по умолчанию базой с именем postgres.

Далее нам нужно как-то использовать нашу базу, для этого необходимо знать ip адрес, порт, пользователя и пароль.

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' test-postgres

Данной командой мы получаем IP адрес контейнера. Полную информацию по команде inspect можно найти тут.

Порт по умолчанию 5432. Пользователь postgres. Пример настройки базы для django:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'mysecretpassword',
        'HOST': '172.17.0.2',
    }
}

Несколько полезных команд по использованию контейнера.

Остановка контейнера

docker stop test-postgres

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

docker start test-postgres

Создание дампа всех баз данных

docker exec -t test-postgres pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql

Восстановление дампа:

cat your_dump.sql | docker exec -i test-postgres psql -U postgres