用于本地NodeJS开发的Docker

时间:2016-08-10 09:50:50

标签: javascript node.js docker npm development-environment

当我的笔记本电脑node_modules上有file system时,在容器中本地开发应用的正确方法是什么。

目前,我在settings

中关注了Dockerfile
COPY package.json /app/
RUN npm install
COPY . /app/

以下docker-compose

 volumes:
    - "/app/node_modules"

在这种情况下,我可以在容器中运行npm命令,package.json中的更改会反映在我的本地源代码树中。这很好。但缺少一件事:我没有本地node_modules文件夹,这意味着我的IDE无法看到这些文件。

有可能以某种方式修复吗?

1 个答案:

答案 0 :(得分:1)

您可以将所有本地环境复制到容器中:

COPY ./package.json /app/package.json
WORKDIR /app/
RUN npm install
COPY ./src/ /app/src/
CMD ["npm","run","start"]

这种方法会将您的本地环境复制到图像中。每当您对源进行更改时,您都必须重建映像并重新启动容器。

我建议您将项目文件夹作为卷安装到容器中 - 包含所有依赖项,并且源/依赖项中的每个更改都需要重新启动容器(或者您可以在容器内使用管理程序):

VOLUME /app/
WORKDIR /app/
CMD ["npm","run","start"]

运行容器时 - 记得将项目目录连接到容器:

docker-compose.yml文件

version: '2'

services:
  app:
    build: .
    image: app
    volumes: [".:/app/"]

(我假设您的Node.js应用的Dockerfile与来源位于同一目录中,node_modulesdocker-compose.yml

编辑:上面发布的解决方案有利于本地开发。如果您想要停靠和部署应用程序,有两种方法:

将您的本地node_modules和所有来源复制到容器中

COPY ./node_modules /app/
COPY ./src /app/
COPY ./package.json /app/
WORKDIR /app/
CMD ["npm","run","start"]

或者使用我的答案顶部的模板(它将在构建期间安装所有node_modules - 当package.json更改时)此构建速度会慢一些。