рабочий процесс для разработки узла с помощью докера

Я разрабатываю веб-приложение, и мне нужен узел для моей среды разработки.

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

В настоящее время мой файл докеров:

#React development
FROM node:4.1.1-wheezy 
MAINTAINER xxxxx
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get -y install sudo locales apt-utils
RUN locale-gen es_ES.UTF-8
RUN dpkg-reconfigure locales
RUN echo Europe/Madrid | sudo tee /etc/timezone && sudo dpkg-reconfigure --frontend noninteractive tzdata
ADD src/package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir -p /src && cp -a /tmp/node_modules /src/
WORKDIR /src
EXPOSE 3000
VOLUME /src

Мне нужен каталог для размещения всех моих исходных файлов (поделитесь каталогом через том данных). Мне также нужно выполнить установку npm в моем файле докеров, чтобы я получил свой каталог node_modules внутри моего исходного каталога (/src/node_modules).

Однако, когда я монтирую каталог хоста как том данных, поскольку каталог /src уже существует внутри образа контейнера, его содержимое будет заменено содержимым каталога /src на хосте, поэтому у меня нет моего каталога /src/node_modules. больше:

docker run -it  --volumes-from data-container --name node-dev user/dev-node /bin/bash

В моем хост-каталоге нет каталога node_modules, потому что я получаю его через github и не синхронизирую, потому что это довольно тяжелый каталог.


person user2670996    schedule 28.09.2015    source источник
comment
Не могли бы вы уточнить вопрос? Я думаю, что у меня была похожая проблема, но немного сложно сказать, о чем вы спрашиваете.   -  person nick    schedule 29.09.2015
comment
Код должен быть на локальном компьютере, чтобы я мог обновлять файлы с помощью редактора кода. Обновленные файлы должны быть мгновенно реплицированы в контейнер, поэтому мне нужен контейнер тома данных, сопоставленный с хостом. Моя папка node_modules находится внутри исходного каталога, но этот каталог создается только внутри контейнера (мне нужно выполнить установку npm, и узел не может быть установлен на моем компьютере разработчика или другой версии из контейнера).   -  person user2670996    schedule 29.09.2015
comment
Интересно, похоже, вы поняли это ниже. Я тоже разместил свое собственное решение только для разнообразия.   -  person nick    schedule 29.09.2015


Ответы (2)


Мое решение — скопировать каталог node_modules с помощью директивы ENTRYPOINT.

докер-entrypoint.sh:

#!/bin/bash
if ! [ -d node_modules ]; then
        cp -a /tmp/node_modules /src/
fi
exec "$@"

2 строки добавлены в dockerfile:

COPY docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
person user2670996    schedule 29.09.2015
comment
Я думаю, что это должен был быть ответ для начала (поскольку он имеет прямое отношение к вашему вопросу). Единственное, о чем я спрашиваю, - не могли бы вы как-то изменить название вопроса, чтобы отразить вопрос? - person nick; 21.10.2015

Отказ от ответственности: следующее не имеет ничего общего с Docker.

Я использую SSHFS. В Ubuntu Wiki есть довольно хорошее описание:

SSHFS — это инструмент, использующий SSH для монтирования удаленной файловой системы на локальном компьютере; сеть (в основном) прозрачна для пользователя.

Не уверен, что это полезно в вашем сценарии, но на всех моих хостах в любом случае работает SSH-сервер, поэтому для меня это не составило труда. Проект win-sshfs, похоже, больше не разрабатывается активно, но он по-прежнему отлично работает в win 8/10 (хотя настройка немного странная). OS X и Linux лучше поддерживают это через FUSE.

person nick    schedule 29.09.2015