Статьи

Neo4j + Docker + CoreOS, (Нежное) Руководствуясь Введение

Написанный Ником Мэннингом, соучредителем Swig, сообщества любителей алкоголя, основанного на Neo4j, первоначально размещенного в его блоге .

Я хотел бы поделиться со всеми, как круто CoreOS для использования Docker. Мы используем эту настройку для нашего поискового прокси здесь, на Swig . (сообщество энтузиастов напитков для iOS и Android )

Neo4j используется в качестве нашей базы данных и, как говорилось в моем предыдущем посте в блоге , он прекрасно работает как удобная для запуска (читай: гибкая) база данных.

(Что такое поисковый прокси? Это наш термин для службы, которая работает вместе с нашим основным API, который отслеживает поиск напитков в фоновом режиме и удаляет все виды метаданных о напитках, которых у нас еще нет в нашей базе данных.)

В этом примере у меня будет экземпляр базы данных Neo4j, работающий в контейнере Docker. Теперь я использовал Ubuntu для запуска наших контейнеров Docker, но вскоре понял, что CoreOS все упростил. CoreOS — это скудный и подлый вариант linux, который особенно удобен для пользователей Docker, предлагая легкую масштабируемость. Это быстро, и их сайт имеет отличную документацию.

1. Капелька, кто-нибудь?

Я собираюсь использовать
каплю Digitial Ocean за $ 5 для этого примера. Зарегистрируйтесь на их сайте и создайте каплю (экземпляр) с CoreOS в качестве операционной системы (скриншот ниже). Я рекомендую заранее настроить ключ SSH, чтобы использовать его для входа.

2. Мне нравится CoreOS

Войдите в свой аккаунт с помощью
ssh core@<IP of your droplet>(обратите внимание, что я заранее зарегистрировал свой SSH-ключ для своей цифровой учетной записи в океане, поэтому пароль отсутствует).

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

3. Установка Neo4j 70 секунд с докером

Поскольку Docker уже предустановлен с CoreOS, теперь мы будем загружать образ Neo4j Docker, который я создал сам.

docker pull seenickcode/neo4j-community

Это «вытягивает» готовый образ полностью независимо работающего виртуального экземпляра Linux с Java и последней установленной Neo4j Community Edition. Если вам интересно, мой рецепт Docker
здесь .

Пока он загружается ..

Хотите узнать больше о Docker? Вот краткий обзор
здесь . Или же, если вы просто хотите следовать этому уроку, не стесняйтесь читать следующие основные функции Docker, такие как: «images», «ps», «build» и «run»
здесь . Также Джеймс Тернбулл написал действительно
солидную книгу о Докере.

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

4. «Твоя собственная, сырная пицца», например, Neo4j Instance

Теперь беги ..

docker run -d --name neo4j --privileged -p 7474:7474 -p 1337:1337 -v /home/core:/var/lib/neo4j/data seenickcode/neo4j-community  

Это позволяет запустить
seenickcode/neo4j-communityзагруженный образ, присвоить ему случайное имя
neo4j(
--name), открыть некоторые порты для внешнего мира (
-p) и, наконец, сопоставить (
-p) каталог данных Neo4j с вашим домашним путем CoreOS (
/home/core), чтобы вы могли создать его резервную копию. самостоятельно или загрузите свой
graph.dbкаталог.

Теперь, когда мы представили порт 7474 Neo4j, мы должны теперь иметь возможность использовать браузер данных Neo4j по адресу
<yourIP>:7474.

Создайте один или два узла с помощью Neo4j:
CREATE (n:Thing)

теперь, поскольку мы сопоставили том Docker
/home/core/, теперь мы должны увидеть
graph.dbкаталог там, круто.

5. Systemd делает Docker намного проще в использовании

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

В этом примере мы укажем наш собственный сервис systemd для имеющегося у нас контейнера Neo4j. Вот как это выглядит:

[Unit]
Description=Neo4j Community  
//After=example-other-service-of-mine.service
Requires=docker.service

[Service]
TimeoutStartSec=0  
ExecStartPre=-/usr/bin/docker kill neo4j  
ExecStartPre=-/usr/bin/docker rm neo4j  
ExecStart=/usr/bin/docker run -d --name neo4j --privileged -p 7474:7474 -p 1337:1337 -v /home/core:/var/lib/neo4j/data seenickcode/neo4j-community

[Install]
WantedBy=multi-user.target  

Это определяет вызываемую службу,
neo4j.serviceи после ее запуска мы убьём наш работающий Docker-контейнер neo4j, удалим его и запустим снова.

Вы можете создать это так, как
/etc/systemd/system/neo4j.service

вам нужно будет включить, используя
systemctlчерез
sudo systemctl enable neo4j.service

Теперь убедитесь, что Neo4j остановлен (обратите внимание, что
rmсамо изображение не удаляется, только недавно запущенный контейнер) через:

docker kill neo4j  
docker rm neo4j  

Затем, чтобы запустить наш сервис systemd.
sudo systemctl start neo4j.service

Просто чтобы быть уверенным, запустите,
docker psчтобы убедиться, что Neo4j действительно запущен.

Мы можем подключить наш сервис через
journalctl -f -u neo4j.service

6. Заключительные замечания

Обязательно ознакомьтесь с технологиями, предлагаемыми Docker и CoreOS. Я думаю, что они представляют собой сложный, дальновидный подход к управлению сервером / кластером, и имеет смысл потратить время на ознакомление с ними.

Если вы не очень много знаете о Neo4j, вы наверняка захотите познакомиться с ним в следующем году или около того. Это гибкая, сложная база данных NOSQL, которая действительно отлично справляется с сохранением и запросом современных данных. Он становится все менее и менее нишевой «базой данных только для графических данных» и становится более надежным выбором для любых нужд NOSQL.

Вопросов? Комментарии? Свяжитесь со мной в Twitter через
@seenickcode.

Посетите наше новое приложение
Swig для iOS и Android. Это сообщество любителей напитков, которое работает на Neo4j!