Pull to refresh

Comments 21

Я бы дописал какую команду запускать в «Запуск без sudo» чтобы знать как именно добавить пользователя в группу. Спасибо.
Спасибо :-) Это адресовалось автору статьи, так как команды как запускать без sudo есть, а как добавить пользователя в группу docker — нет. Первое проще, но упомянуто. Второе — сложнее, и нет.
Как вы посоветуете решать проблему с установкой библиотек в контейнере, если не хочется поднимать тулчейн языка на хосте? Например, для проекта на nodejs нужен npm install. Если выполнять его в докере, со стандартной структурой проекта с node_modules в корне, то после маппинга volume папка node_modules пропадет из контейнера.
делать npm install не при билде, а потом, с уже замаунченым volume
вариант, но это усложняет запуск (вместо docker-compose up придется выполнять что-то еще)

можно в entrypoint что-то похожее загнать


npm check || npm install

exec $@

небольшой оверхед конечно, но вроде npm сейчас уже быстрый. я так делал с ruby

сделать следующую структуру:

/project_cat
  • node_modules/
  • app_sources/
  • package.json


package.json
  "scripts": {
    "start": "node server.js"
  },
у меня на angular5 приложение. node_modules нужно в отдельный volume
Dockerfile
FROM node:alpine
RUN apk update && apk add git
WORKDIR /opt/app
COPY package.json .
RUN npm install
ENV PATH="$PATH:./node_modules/.bin"
VOLUME /opt/app/node_modules
CMD npm run serve:docker

собираем и запускаем
docker create -t myapp .
docker volume create node_modules
docker run -v node_modules:/opt/app/node_modules -v `pwd`:/opt/app -p 4200:4200 myapp

я вообще docker-compose использую, чтобы еще бекенды запускались
В docker-compose

volumes:
      - ./backend:/app
      - /app/node_modules


Первый элемент — забрасывает локальную папку(./backend) в контейнер по пути(/app)
Второй элемент — это трюк который дает ожидаемое поведение, подробнее в статье jdlm.info/articles/2016/03/06/lessons-building-node-app-docker.html
Да, тоже видел эту статью.
Работает — но с существенным ограничением: на хосте папка node_modules не появляется. А это значит отсутствие автодополнения и возможности модификации библиотек с хоста.
Конечно, можно потом эту папку скопировать через docker cp, но это во-первых муторно и печально, а во-вторых, изменения файлов все равно не синхронизируются.

Мертв-не мёртв, но работать иногда отказывается :)


Скрытый текст

Знает кто статью, в которой описан запуск и работа с приложением на RubyOnRails через докер в винде? То что я находил там совсем непонятно.
На вине можно и без докера запускать через поддержку линукса оно даже работает как нужно. Если не нужно запускать GUI приложения то проблем нету особых.
Проблем тоже хватает. Самая главная это скорость работы. Запуск вэб-приложения в несколько раз медленнее.
Статья не отражает суть контент изложенного в ней, по названию написание кода в докер контейнере, а по факту мы его там только выполняем. Для написание все равно придётся ставить ide и к ней наверняка понадобятся ещё и библиотеки, меньше чем к языку программирования но все равно понадобятся, а если нужна будет консоль от языка программирования? То что делать? Бежать в докер контейнер и забить на поддержку консоли в ide?

Всегда можно взять в руки vim и идти править файлы внутри запущенного контейнера. Цель статьи была показать, что это неудобно и править файлы удобнее вне контейнера и сразу же их запускать/тестировать в настроенном окружении.
Если же нужна консоль контейнера — то одна открытая (на момент запуска контейнера) у вас уже есть. Если же нужны дополнительные, то "docker exec -it bash" в том числе и в консоли ide.

Если вы запускаете контейнер на хосте под управлением Linux, при монтировании домашней директории хорошо бы сделать mapping текущего пользователя, иначе файлы созданные из контейнера будут принадлежать пользователю контейнера (чаще всего это root). Docker for Mac лишен этого недостатка и делает mapping автоматически.

Справедливое замечание. Сам так делаю редко, но если в результате работы нужны файлы, сгенерированные контейнером — то да.

Sign up to leave a comment.

Articles