Node.js 如何通过docker动态更改节点项目中的内容
我有一个angularjs应用程序,我正在使用docker运行。 docker文件如下所示:-Node.js 如何通过docker动态更改节点项目中的内容,node.js,docker,npm,dockerfile,Node.js,Docker,Npm,Dockerfile,我有一个angularjs应用程序,我正在使用docker运行。 docker文件如下所示:- FROM node:6.2.2 RUN npm install --global gulp-cli && \ npm install --global bower RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY package.json /usr/src/app/ COPY bower.json /usr/src/a
FROM node:6.2.2
RUN npm install --global gulp-cli && \
npm install --global bower
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
COPY bower.json /usr/src/app/
RUN npm install && \
bower install -F --allow-root --config.interactive=false
COPY . /usr/src/app
ENV GULP_COMMAND serve:dist
ENTRYPOINT ["sh", "-c"]
CMD ["gulp $GULP_COMMAND"]
现在,当我在任何html文件中进行任何更改时,它不会动态加载到网页上。我必须停止容器,删除它,再次构建映像,删除先前的映像,然后从新映像重新启动容器。我每次都得这么做吗?(我是docker的新手,我想这个问题是因为我的源代码没有放到卷中,但我不知道如何使用docker文件)是的,每次文件更改时都需要重建,因为您只修改容器外部的文件。为了将更改应用于容器中的文件,您需要重建容器
根据用例的不同,您可以使Docker容器动态加载来自另一个存储库的文件,也可以装载一个外部卷以在容器中使用,但这两种解决方案都存在一些缺陷。您是正确的,您应该使用卷来处理类似的内容。在开发过程中,为其提供与
COPY
目录相同的卷。它将用机器上的任何东西覆盖它,无需重建映像,甚至无需重新启动容器。非常适合发展
在实际烘焙图像进行生产时,您需要删除卷,将副本保留在中,然后您将得到一个确定性容器。我建议您在此处通读这篇文章:
一般来说,有3种方法来处理卷
就我个人而言,我从来没有这样做过。与其他两种方法相比,我并不认为这有什么好处。我相信,当您的卷用作永久数据存储时,这样做会更常见。当您只是尝试使用您的live dev环境时,情况就不是这样了
这很好,因为如果dockerfile中的副本
是/src/usr/src/app
,那么它会在运行映像时临时覆盖目录,但当您不使用-v
时,它仍然在那里进行部署
我个人的推荐。Docker compose大大简化了运行的容器。为了简单起见,只需调用docker run…
,但会根据给定的docker compose.yml
config自动执行参数
创建一个dev
服务,指定要装载的卷、要链接到的其他容器等。然后根据需要使用docker compose up…
或docker compose run…
将其打开
智能使用卷将大大缩短您的开发周期。如果您想在添加文件时保持容器运行,还可以使用变体
将卷装载到任何其他位置,例如/usr/src/staging
容器运行时,如果需要将新文件复制到容器中,请将其复制到已装入卷的位置
运行docker exec-it bash
在正在运行的容器中打开一个bash shell
运行cp/usr/src/staging/*/usr/src/app
命令将所有新文件复制到目标文件夹中
如果在容器中装入外部卷,会有什么陷阱。我怎么能在Dockerfile本身中提到这一点呢?陷阱在于你在容器本身中失去了决定论。docker容器的一个想法是,您的图像将始终以相同的方式运行,与运行环境无关。通常,装入卷只是为了实现数据的持久性,如果应用程序中有html文件,它们实际上应该放在容器中,主要是在docker compose文件中我尝试了卷:-./src:/usr/src/app/src,但变化并非如此reflecting@ShubhamGupta启动容器时正在运行什么命令?还有,您运行的是什么系统?卷可能会有一些奇怪的行为,具体取决于运行它们的位置。打印时是否有任何错误?我首先运行docker compose build,然后使用docker compose up。我在用mac。当我尝试卷::usr/src/app时,它给出了找不到本地gulp文件的提示。当我使用Volume:./src:usr/src/app/src时。容器运行了,但并没有动态地反映更改嗯,实际上我自己无法在您的机器上运行您的配置,我不知道我能提供多少帮助。你确定你在容器中找对了文件夹吗?事情终于解决了。实际上,由于gulp-service:dist命令,我正在从发布文件夹运行应用程序。我把它改成了大口大口大口的发球,一切都正常了。谢谢你的帮助!非常感谢
docker run ... -v $(pwd)/src:/usr/src/app ...