EvilBeaver / OneScript.Web

MVC-движок сайтов на 1Script
Mozilla Public License 2.0
79 stars 20 forks source link

Docker: возможность монтирования каталога os из хоста #15

Closed ghost closed 6 years ago

ghost commented 6 years ago

сейчас предалагется

FROM evilbeaver/oscript-web:dev
COPY src /var/osp.net/

а хочется примерно так

docker run --port 5000:5000 --name my-super-onscript-webapp \
--volume ./://var/osp.net/engine/ evilbeaver/oscript-web:dev

или для docker-compose

version: '3'
services:
  web:
    image: evilbeaver/oscript-web:dev
     ports:
     - "5000:5000"
     volumes:
    - "./:/var/osp.net/engine/ "

тогда будет фактически доступен лайврелоад ;-)

nixel2007 commented 6 years ago

А сейчас монтирование напрямую разве не работает?

EvilBeaver commented 6 years ago

Подразумевалось, что в образе лежит приложение целиком. Вместе с прикладным кодом. Тогда ты его делаешь docker run и пошло-поехало.

А то что ты предлагаешь удобно для dev-процесса, не для продуктива.

nixel2007 commented 6 years ago

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

EvilBeaver commented 6 years ago

@nixel2007 В этом проблемы нет, можно и так. Насколько я понял @allustin имеет в виду типовой образ, предлагаемый нами тем, кто не знаком с докером.

nixel2007 commented 6 years ago

@nixel2007 все равно не понимаю. команды из первого поста уже должны работать (разве что точку нельзя использовать)

EvilBeaver commented 6 years ago

@nixel2007 работает и то и другое. Мы вроде как про разное говорим, я что-то не осознаю, о чем говоришь ты.

kuntashov commented 6 years ago

@nixel2007 все равно не понимаю. команды из первого поста уже должны работать (разве что точку нельзя использовать)

Монтирование-то работает, только копируется в /var/osp.net содержимое src, а там кроме собственно того, что в src лежат еще куча dll движка и другие файлы. Значит монтировать придется вложенные в SRC файлы и каталоги отдельно, что уже неудобно.

        volumes:
            - ./src/controllers:/var/osp.net/src/controllers
            - ./src/model:/var/osp.net/src/model
            - ./src/views:/var/osp.net/src/views
            - ./src/wwwroot:/var/osp.net/src/wwwroot
            - ./src/main.os:/var/osp.net/src/main.os
            - ./src/packagedef:/var/osp.net/src/packagedef

А еще oscript_modules тоже наверное нужно локальный брать.

Поддерживаю @allustin, нужно содержимое образа адаптировать так, чтобы разработчику достаточно было бы монтировать только src.

EvilBeaver commented 6 years ago

На текущий момент самый удобный способ разработки описан мной на инфостарте:

В терминале запускается сервер приложений. Переходим по линку localhost:5000 (там же в терминале можно кликнуть) и получаем приложение Остановка - Ctrl+C

kuntashov commented 6 years ago

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

nixel2007 commented 6 years ago

Монтирование-то работает, только копируется в /var/osp.net содержимое src, а там кроме собственно того, что в src лежат еще куча dll движка и другие файлы.

@kuntashov вот про это я позабыл. теперь понимаю проблему, спасибо.

ghost commented 6 years ago

@EvilBeaver дай права пожалуйста мне контрибьютора, чтобы на меня повесить задачу - я сделаю через пул-реквесты (тут на днях приняли мой пул-реквест в clojure - прям душа радуется когда принимают)

ghost commented 6 years ago

Оказалось все еще интересней - можно сделать по другому

https://github.com/silverbulleters-research/OneScript.Web/blob/b4e306cec5e2105ed42044e30dd69e3c3ced3765/examples/auth0/Dockerfile

То есть доступно следующая конструкция

Сборка

FROM evilbeaver/oscript-web

ENV BINPREFIX=/var/osp.net

VOLUME [ "/src" ]

WORKDIR /src

ENTRYPOINT mono $BINPREFIX/OneScript.WebHost.exe

и тогда запуск

docker build -t oscript-web-with-src-as-volume .
docker run -v ./myapp/:/src -p 5000:5000 oscript-web-with-src-as-volume

В принципе на мой взгляд задачу можно закрывать пока суть то дело - я скажем так выкрутился ;-)