УДК 004.65

СОЗДАНИЕ DOCKER-ОБРАЗА POSTGRESQL

Феофантов Константин Владимирович1, Власов Александр Васильевич2, Афанасьев Геннадий Иванович3
1Санкт-Петербургский политехнический университет Петра Великого, бакалавр «Системы и технологии управления», технический директор компании “EXON LV”
2Московский Государственный Технический Университет им. Н.Э. Баумана, специалист «Робототехника и комплексная автоматизация», операционный директор “EXON LV”
3Московский Государственный Технический Университет им. Н.Э. Баумана, кафедра «Системы обработки информации и управления», к.т.н., доцент

Аннотация
Описаны ключевые возможности Docker. Приведено краткое описание Docker. Приведен пример процесс создания образа для Docker. Приведена инструкция запуска образа. Обозначена возможность сохранения данных после остановки контейнера.

Ключевые слова: база данных, докер, докер образ, докерфайл, контейнер, постргрескюл, система управления базами данных


CREATING POSTGRESQL DOCKER IMAGE

Feofantov Konstantin Vladimirovich1, Vlasov Alexander Vasilevich2, Afanasiev Gennady Ivanovich3
1Peter the Great St.Petersburg Polytechnic University, bachelor of “Control Systems and Technologies Department”, chief information officer of the “EXON LV” company
2Bauman Moscow State Technical University, specialist of “Robotics and complex automation”, Chief Operating Officer “EXON LV”
3Bauman Moscow State Technical University, department “System of Information Processing and Management”, PhD in Technological Sciences, associate professor

Abstract
Key features of Docker are described. The short description of Docker is provided. The example process of creation of an image for Docker is given. The instruction of start of an image is provided. The possibility of saving data after a container stop is designated.

Keywords: container, data base, database management system, docker, docker image, dockerfile, PostgreSQL


Рубрика: 05.00.00 ТЕХНИЧЕСКИЕ НАУКИ

Библиографическая ссылка на статью:
Феофантов К.В., Власов А.В., Афанасьев Г.И. Создание Docker-образа PostgreSQL // Современные научные исследования и инновации. 2017. № 2 [Электронный ресурс]. URL: http://web.snauka.ru/issues/2017/02/78288 (дата обращения: 29.04.2017).

Введение

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

Официальные образы для PostgreSQL уже существует и доступны для скачивания из docker hub. Данная статья нацелена на то, чтобы показать пошаговое создание собственного образа и некоторые особенности Docker.

В качестве ОС для исследования использовалась Ubuntu Linux с установленным Docker. Для того, чтобы запустить Docker на отличной от Linux ОС, можно использовать boot2docker.

Dockerfile

Для создания образа необходимо создать текстовый файл Dockerfile и использовать доступные команды и синтаксис, описывающие процесс сборки образа. В начале файла необходимо указать базовый образ, который будет использоваться и контактные данные создателя:

В нашем случае в качестве базового образа используется Ubuntu 14.04. После этого необходимо добавить репозиторий пакетов PostgreSQL и открытый ключ GnuPG:

затем необходимо обновить пакеты, имеющиеся в Ubuntu и установить PostgreSQL:

Устанавливаем версию 9.3 PostgreSQL, инструкция будет очень похожа на установку любой другой версии базы данных.

Чтобы команды apt-get update и apt-get install находились в одной строке RUN, иначе они будут рассмотрены Docker, как два различных слоя. В этом случае при появлении обновленного пакета, его установка во время повторной сборки образа не сможет быть выполнена.

Далее необходимо переключиться на пользователя postgres, чтобы создать нового пользователя и создать новую базу данных:

Следующим пунктом необходимо разрешить подключение к базе данных из сети. Для этого необходимо переключиться на пользователя root и выполнить функции добавления строк в конфигурацию:

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

Объявляем, какие данные и общие папки будут использоваться в дальнейшем:

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

Сборка Docker-образа

Когда Dockerfile готов необходимо собрать образ перед запуском его в контейнер. При настройке тэга имени, необходимо использовать имя собственного docker.io hub-аккаунта (заменить kfeofantov):

После выполнения сборки, образ загрузиться на docker.io hub и станет доступным для использования.

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

Для запуска контейнера после сборки образа необходимо использовать следующую команду:


Проверка работы PostgreSQL

Проверить запуск контейнера можно с помощью любого клиента. Самым простым является подключение через командную строку:

При получении запроса на ввод пароля, необходимо ввести следующую команду: pguser.
Использование localhost возможно только при запуске Docker на локальной машине под Linux. Пользователям OSX необходимо узнать правильный IP с помощью: boot2docker ip.

Сохранение данных

Особенностью Docker является то, что после остановки контейнера происходит потеря некоторых данных, которые ранее записывались в БД. Это происходит потому, что по умолчанию существование Docker контейнеров ограничено во времени. Данную проблему можно решить с помощью контейнера данных. Рекомендуется не делать это вручную, а для организации работы использовать специальный инструмент – fig.

Fig является инструментом, организующим работу контейнеров, его функции переписаны на языке Go и интегрированы в Docker. Инструкции по установке можно найти на веб-сайте Fig (кратко: пользователи Ubuntu должны использовать pip install fig, пользователи OSX должны использовать brew install fig).


Необходимо сохранить этот файл как fig.yml в той же папке где храниться Dockerfile и выполнить в терминале команду fig up:

Теперь, после записи некоторых данных в базу данных, последующей остановки (CTRL + C) работающих контейнеров и затем повторного их запуска, данные все еще находятся на прежнем месте.

Заключение

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

Некоторую сложность создания образов вызывают ситуации, при которых приходится запускать несколько сервисов (например, веб-приложение Django с использованием PostgreSQL, RabbitMQ, MongoDB и т.д …), соединять их воедино и организовывать полноценное решение. Для этого необходимо использовать другие функции Docker, о которых будет рассказано в следующих статьях.


Библиографический список
  1. Документация Docker. URL: https://docs.docker.com (дата обращения: 21.01.2017).
  2. Документация PostgreSQL. URL: https://www.postgresql.org/docs/ (дата обращения: 21.01.2017).
  3. Jeff Nickoloff. Docker in Action. USA, Manning 2016, 304 p.
  4. Jeff Nickoloff. Docker in Action. USA, Manning 2016, 304 p.


Все статьи автора «Феофантов Константин Владимирович»


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

Связь с автором (комментарии/рецензии к статье)

Оставить комментарий

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

Если Вы еще не зарегистрированы на сайте, то Вам необходимо зарегистрироваться:
  • Регистрация