Арангодб, Фокс и Докер с объемом
Я использую ArangoDB и разрабатываю приложение Foxx. ArangoDB размещается в контейнере Docker с использованием этого изображения https://store.docker.com/images/arangodb. У меня есть еще один контейнер Docker, на котором запущен мой интерфейс приложения.
Я создал том для сохранения данных базы данных и также создал том для сохранения данных приложения Foxx:
- type: volume
source: databasedev
target: /var/lib/arangodb3
- type: volume
source: foxx
target: /var/lib/arangodb3-apps
Наконец, я создал монтирование привязки из исходной папки Foxx к папке приложения Foxx в моем контейнере ArangoDB:
- type: bind
source: C:\\[pathtosource]\\src\\foxx
target: /var/lib/arangodb3-apps/_db/poflow
Примерно 40-50% времени, когда я сочиняю свой исходный код Foxx, удаляется. Я пытался использовать опцию "без копирования" на томе Foxx, но это только ухудшает ситуацию.
После того, как мои контейнеры скомпоновали скрипт узла в моем внешнем контейнере, я попытаюсь установить мой сервис Foxx и установить его в режим разработки. По сути, он архивирует мой источник Foxx на лету и устанавливает его. Но он часто находит мою исходную папку Foxx пустой и дает сбой, и в этот момент я восстанавливаю файлы, а затем создаю, затем делаю резервную копию и пытаюсь снова.
Я иду по этому поводу неправильно? Я что-то упускаю? Кажется, что ArangoDB не сохраняет данные Foxx каждый раз.
2 ответа
Возможно, я нашел решение. Вместо того, чтобы использовать общедоступный образ докера ArangoDB непосредственно в моем файле компоновки, я переключился на создание своего собственного с использованием файла докерства.
До:
database:
image: "arangodb"
После:
database:
image: "arangodb"
build:
context: .
dockerfile: dock-arango-dev.Dockerfile
Тогда мой файл Docker выглядит так:
FROM arangodb
ENV ARANGO_ROOT_PASSWORD supersecurepass
WORKDIR /var/lib
COPY "./src/foxx" "./arangodb3-apps/_db/foxxapp"
EXPOSE 8529
Я думаю, что директива копирования в файле Docker делает то, что нужно. Пока это работает отлично. Я приму этот ответ через несколько дней, если так будет продолжаться.
РЕДАКТИРОВАТЬ: К сожалению, это не на 100% решило проблему, хотя это улучшило ее. Поэтому я не буду отмечать это как ответ, но это был полезный шаг.
РЕДАКТИРОВАТЬ: После использования этого подхода в течение нескольких недель, он только один раз провалился на меня. Так что, возможно, это была случайность. Но этот подход определенно работает лучше, чем моя предыдущая техника. Поэтому я отмечу это как ответ. Если кто-то предоставит лучший рабочий процесс или подход, который будет еще более надежным, я изменю ответ.
Мой предыдущий ответ помог некоторое время, пока проект не стал более сложным и включил больше микро сервисов Foxx. Вместо того, чтобы создавать один большой извилистый ответ, я решил опубликовать отдельный ответ, чтобы сделать вещи более ясными.
После большого тестирования с использованием привязок с Arango кажется, что способ, которым Arango настраивает свой каталог сервисов Foxx, вступает в конфликт с тем, как Docker создает свои привязки. Возможно, если бы у Docker был способ отложить создание привязки до тех пор, пока Arango не загрузится и не настроит свои сервисы Foxx, все может работать. Но кажется, что есть конфликт, и часто привязки Dockers повреждают сервисы Foxx. Во многих случаях исходные файлы из одного сервиса попадают в другой сервис. Очень странно.
Поэтому я решил вообще отказаться от использования привязок для разработки. Вместо этого я создал скрипт, который использует драйвер ArangoJS и библиотеку NPM под названием chokidar. Этот скрипт следит за моим исходным каталогом foxx и каждый раз, когда сохраняется изменение, он заменяет сервис foxx через HTTP с использованием драйвера ArangoJS. Я думал, что это может быть неэффективно, но на самом деле это очень быстро и эффективно, и это обходит все проблемы, которые у меня возникают с Docker.
Я бы хотел, чтобы Arango более полно поддержал Docker в своих сервисах Foxx, но пока что это решение, похоже, очень хорошо подходит для моих нужд.