Запись от 26 марта 2024 16:06

Моё виртуальное пространство: NodeJS

Объясняю мои принципы работы с Docker-контейнерами - как я использую их в качестве виртуальных пространств, чтобы не засорять основную рабочую машину узко-специализированным софтом. Показываю на примере контейнера с NodeJs.


Предисловие

Какие-то веб-проекты включают в себя указания для "докеризации" - файлы Dockerfile и docker-compose.yml. В каких-то случаях такого нет - например, если мне нужно запустить пример из библиотеки или туториала. Для этого мне необязательно устанавливать на рабочую машину Node.js (или PHP - пример с ним будет рассмотрен в другой раз).

На моей рабочей машине по пути ~/projects/vm есть несколько папок. Одна из них называется node-21.2.0-alpine3.17. В ней содержатся два файла: Dockerfile и run.sh


Файл: Dockerfile

FROM node:21.2.0-alpine3.17
RUN apk update
# для возможности использования git clone
RUN apk add git
RUN rm -rf /var/cache/apk/*

Файл: run.sh

#!/usr/bin/bash
docker run \
-it \
--entrypoint sh \
--user 1000 \
--mount type=bind,source=/home/iam/projects/,target=/home/node/projects/ \
-w /home/node/projects/ \
vm/node-21.2.0-alpine3.17

Результат

Чтобы выполнить npm скрипт в проекте (в том числе - стандартная команда npm run dev / yarn dev для запуска проекта), я захожу в оболочку node контейнера. В терминале рабочей машины:

$ bash ~/projects/vm/node-21.2.0-alpine3.17/run.sh

Внутри контейнера мне доступна моя папка проектов, и также мне доступны команды "node", "npm" и "yarn", поскольку они установлены в контейнере.


Пример: новый проект на Vue 3

Предположим, мы хотим создать новый проект на Vue 3, который должен находиться по пути ~/projects/sandbox/vue3-example/, и у нас уже создан путь ~/projects/sandbox/. Напоминаю, что у нас не установлены ни node, ни npm, ни yarn. Заходим в оболочку контейнера node:
$ bash ~/projects/vm/node-21.2.0-alpine3.17/run.sh
Внутри контейнера входим в родительскую папку нового проекта:
$ cd ~/projects/sandbox
И тут уже выполняем нужную команду инициализации:
$ yarn create vue@latest
Затем установка библиотек и запуск dev-сервера:
$ yarn
$ yarn dev

Ключевые моменты

В инструкции из run.sh есть аргумент --user 1000. Это идентификатор пользователя, принадлежащего контейнеру (не рабочей машине), под которым будет проведён логин после входа в контейнер. Он намеренно совпадает с идентификатором пользователя рабочей машины (1000 для пользователя по умолчанию на Ubuntu системах; проверьте выход команды id -u, если Вы работаете в Linux-based ОС) - во избежание разногласий в разрешениях доступа к файлам.






Моё виртуальное пространство: NodeJS
Запись от 26 марта 2024 16:06

version 2.0.2
Сделано вручную с Vue, NodeJS, Tailwind и Bootstrap
Кайр Жакупов @iamkayrkayr Павлодар, Казахстан