问题: 如何安装新软件包并让docker镜像和容器识别更改,安装和重新运行没有工作的开发人员交互?
package.json :注意我们只有一个包
"scripts": {
"start": "node_modules/.bin/nodemon"
},
"dependencies": {
"express": "4.15.4"
}
dockerfile
FROM node:8.4.0
ENV HOME /var/www
WORKDIR ${HOME}
COPY server/package.json server/tsconfig.json server/nodemon.json $HOME/
RUN npm install
EXPOSE 8191
CMD [ "npm", "start" ]
制作图片:
docker build . -t testImage
运行容器:
docker run -p 8191:8191 -v $(pwd)/server/src:/var/www/src testImage
一切都按预期的[nodemon] starting
节点工作./src/index.js`
问题:
npm install cors --save
将添加cors包
"scripts": {
"start": "node_modules/.bin/nodemon"
},
"dependencies": {
"express": "4.15.4",
"cors": "^2.8.4",
}
问题是我的docker容器中没有任何更新:(
我不希望开发人员必须重新映像或必须重新运行容器:
docker build . -t testImage
docker run -p 8191:8191 -v $(pwd)/server/src:/var/www/src testImage
答案 0 :(得分:0)
看看ENTRYPOINT和CMD如何工作,如果你想使用相同的Dockerfile进行生产和开发,你可以创建一个入口点脚本,如果没有提供参数,则作为生产模式运行,如果像开发这样的参数,则作为开发模式运行
使用--save-dev保存开发包,因此在开发模式下运行时,容器将安装dev依赖项。
确保您的node_modules位于.dockerignore,
你的dockerfile:
FROM node:8.4.0
ENV HOME /var/www
WORKDIR ${HOME}
COPY start_scrip.sh /start_scrip.sh
COPY server/package.json server/tsconfig.json server/nodemon.json $HOME/
RUN npm install
EXPOSE 8191
ENTRYPOINT ["/start_scrip.sh"]
start_scrip.sh示例:
#!/usr/bin/env bash
function development {
npm install --dev #
npm start
}
function run_prod {
#npm start command here
}
if [ $# -gt 0 ]
then
if [ $1 == "development" ]
then
development
else
echo "Not a valid argument"
exit 127
fi
else
run_prod
fi
exit 0
确保chmod + x你的脚本,所以它可以在容器内执行。
在开发模式下运行:
run -p 8191:8191 -v $(pwd)/server/src:/var/www/src testImage development
每次开发人员在工作站中添加新软件包时,都应该重新启动容器。