本地NodeJS开发的Docker
在我的笔记本电脑file system
上有可能具有node_modules
时,在容器中本地开发应用程序的正确方法是什么?
目前我在Dockerfile
有以下settings
COPY package.json /app/ RUN npm install COPY . /app/
而下面的docker-compose
volumes: - "/app/node_modules"
在这种情况下,我可以在容器中运行npm
命令, package.json
中的更改反映在我的本地源代码树中。 哪个好。 但有一件事是缺less的:我没有本地node_modules
文件夹,这意味着我的IDE
不能看到这些文件。
不知何故可以解决吗?
您可以将所有本地环境复制到容器中:
COPY ./package.json /app/package.json WORKDIR /app/ RUN npm install COPY ./src/ /app/src/ CMD ["npm","run","start"]
这种方法将字面上复制您的本地环境的形象。 每次你会改变你的来源 – 你将不得不重build图像,并重新启动容器。
我build议你把你的项目文件夹作为一个卷装载到容器中 – 具有所有依赖关系,并且每个源/依赖项的更改都需要重新启动容器(或者可以在容器中使用一个主pipe):
VOLUME /app/ WORKDIR /app/ CMD ["npm","run","start"]
运行容器时 – 记得将你的项目目录连接到容器:
和docker-compose.yml
文件
version: '2' services: app: build: . image: app volumes: [".:/app/"]
(我认为你的Node.js应用程序的node_modules
和sources, node_modules
和docker-compose.yml
在同一个目录docker-compose.yml
)
编辑:上面贴出的解决scheme是有利于本地开发。 如果你想dockerize和部署你的应用程序有两种方法:
将您的本地node_modules
和所有源复制到容器中:
COPY ./node_modules /app/ COPY ./src /app/ COPY ./package.json /app/ WORKDIR /app/ CMD ["npm","run","start"]
或者从我的答案顶部使用模板 (它将在构build过程中安装所有node_modules – 当package.json
发生更改时),此构build会变慢。