Как настроен Dockerfile?
Я занимаюсь с докером, чтобы создать приложение с непрерывной доставкой. Я не могу найти правильное определение, где хранятся команды.
Это мой файл Docker:
FROM node:8
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
CMD node index.js
EXPOSE 3000
WORKDIR: это рабочий каталог в контейнере Docker или в моей Windows?
КОПИЯ: это должно скопировать приложение в рабочий каталог, как я прочитал. Хорошо, я понимаю, но что для этого нужно? Должен ли я определить свою заявку здесь? К примеру, на моем диске D:/
RUN: Хорошо, это устанавливает зависимости пакета.
КОПИЯ: Еще одна копия, это где я копирую путь от моего приложения до контейнера?
CMD: насколько я понимаю, это запускает приложение, index.js; снова я должен определить абсолютный путь?
Резюме
Я хочу докеризировать мое реагирующее приложение, которое находится, например, по следующему пути: D://storage/application
Это файловая структура моего приложения React:
application
└─ node_modules
└─ "some files"
└─ public
└─ index.html
└─ src
└─ index.js
└─ app.js
└─ Dockerfile
└─ package.json
└─ package-lock.json
Теперь, как мне определить Dockerfile в этом случае? Я вижу все файлы Docker с относительными путями, так как я могу это сделать? Потому что вышеупомянутый dockerfile имеет ошибку:
D: \ storage \ application>docker run -p 3000:3002 dockertest
module.js:550 throw err; ^ Error: Cannot find module '/app/index.js' at Function.Module._resolveFilename (module.js:548:15) at Function.Module._load (module.js:475:25) at Function.Module.runMain (module.js:694:10) at startup (bootstrap_node.js:204:16) at bootstrap_node.js:625:3
Обновление после решения Игнасио Миллана
хранилище \ приложение>docker run -p 3000:3002 dockert
/app/src/index.js:1 (function (exports, require, module, __filename, __dirname) { import React from 'react'; SyntaxError: Unexpected token import at createScript (vm.js:80:10) at Object.runInThisContext (vm.js:139:10) at Module._compile (module.js:617:28) at Object.Module._extensions..js (module.js:664:10) at Module.load (module.js:566:32) at tryModuleLoad (module.js:506:12) at Function.Module._load (module.js:498:3) at Function.Module.runMain (module.js:694:10) at startup (bootstrap_node.js:204:16) at bootstrap_node.js:625:3
2 ответа
Файл index.js находится в каталоге src, поэтому CMD должен быть узлом src/index.js.
FROM node:8
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
CMD ["node", "src/index.js"]
EXPOSE 3000
Лучше всего определить стартовый скрипт в package.json и изменить cmd на ["npm", "start"], чтобы Dockerfile не зависел от дерева файлов.
Ты бежишь node index.js
от WORKDIR
так что из /app
, Но нет файла index.js в /app
, Это находится в /app/src
,
Либо вы меняете свой CMD так: CMD node src/index.js
или вы запускаете приложение через npm run
или что-то подобное.
Помните, что файловая система внутри вашего контейнера Docker изолирована от вашей файловой системы Windows. Поэтому Docker не должен ничего знать о вашем диске C:/D: в Windows