Подтвердить что ты не робот

Docker: Как жить в папке с папкой с контейнером?

Я работаю над веб-сайтом, работающим на Node. Поэтому я сделал простой файл Docker, который добавляет файлы моего сайта в контейнер FS, устанавливает Node и запускает приложение, когда я запускаю контейнер, выставляя частный порт 80.

Но если я хочу изменить файл для этого приложения, я восстановил изображение контейнера и снова запустил его. Это занимает несколько секунд.

Есть ли простой способ иметь какую-то "живую синхронизацию", например, NFS, чтобы файлы файлов хост-систем были синхронизированы с файлами из запущенного контейнера?

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

4b9b3361

Ответ 1

Для этого вы можете использовать тома. У вас есть два варианта:

  • Докеры, управляемые томами:

    docker run -v /src/path nodejsapp
    docker run -i -t -volumes-from <container id> bash
    

Файл, который вы редактируете во втором контейнере, обновит первый.

  1. Объем хост-каталога:

    docker run -v `pwd`/host/src/path:/container/src/path nodejsapp
    

Изменения, внесенные на хост, будут обновлять контейнер.

Ответ 2

Если вы находитесь под OSX, эти общие тома могут стать очень медленными, особенно с приложениями, основанными на node (много файлов). Для этого пустяка http://docker-sync.io может помочь вам иметь такой объемный доступ, как синхронизация, без использования общих объемов тома, это обычно ускоряет чтение/скорость записи каталога кода с 50-80 раз, в зависимости от используемой док-машины.

Для производительности см. https://github.com/EugenMayer/docker-sync/wiki/4.-Performance и для простых примеров, как его использовать, см. шаблоны https://github.com/EugenMayer/docker-sync-boilerplate для вашего случая пример unison https://github.com/EugenMayer/docker-sync-boilerplate/tree/master/unison - тот, который вам нужен для NFS, например sync