在Docker上使用MongoDB部署NodeJS
我正在构build一个使用MongoDB作为数据库的NodeJS应用程序。 我认为,在不同平台之间的可移植性以及版本和比较方面,将会更有意义,从而将应用程序部署在Docker中。 通过互联网上的各种build议,这里是我的具体问题:
(a)我是否将我的应用程序代码(nodejs)复制到Docker中? 还是在主机上保留源代码,并使用Volumes将代码库提供给Docker? ( 只是为了试验,我有docker文件指令,直接从图像库中取出代码,它可以工作,但是这是一个好的做法,或者我应该把代码拉到Docker容器外部,并使用Volumes /复制代码 )?
(b)当我安装所有我的应用程序依赖项时,我的node_module大小爆炸几乎250 MB。 那么你会推荐运行npm install(作为依赖)作为Docker的一步,这将增加我的图像的大小? 还是有其他的select,你可以推荐?
(c)连接数据库的build议是什么? 你会推荐,使用MongoDB图像的另一个docker容器,并使用docker定义networking和数据库之间的依赖关系? 除此之外,还有可configuration的运行时属性,以便应用程序在不同的环境(PROD,STAGE,DEV)中可以连接到不同的数据库(mongodb)。
想法/build议非常感谢。 我相信,我可能会提出一些你可能在某个时候遇到的问题,采取不同的方法,有利有弊。
我在Docker中复制应用程序代码(nodejs)吗? 还是在主机上保留源代码,并使用Volumes将代码库提供给Docker?
你应该在容器中有nodejs代码。 在你的机器上保留源代码将使你的图像不能移植,因为如果你切换到另一台机器,你需要在那里复制代码。
如果你在容器中安装了git,你也可以直接把代码拉到容器中。 但请记住删除.git文件夹以获得较小的图像。
当我安装所有我的应用程序依赖项时,我的node_module大小爆炸几乎250 MB。 那么你会推荐运行npm install(作为依赖)作为Docker的一步,这将增加我的图像的大小? 还是有其他的select,你可以推荐?
这是节点拉动所有的互联网。 你必须安装你的依赖关系。 但是,您应该在安装之后运行npm cache clean --force
以进行一些清理以获得较小的映像
为了连接到数据库,会有什么build议? 你会推荐,使用MongoDB图像的另一个docker容器,并使用docker定义networking和数据库之间的依赖关系? 除此之外,还有可configuration的运行时属性,这样应用程序可以在不同的环境(PROD,STAGE,DEV)中连接到不同的数据库(mongodb)
为数据库创build一个新容器并使用docker networking将您的应用程序连接到数据库是一个好主意。 你可以同时拥有多个数据库,但是最好在networking中保留一个数据库容器,如果你想使用另一个数据库,只需删除旧数据库并将新数据添加到networking中。
一个
在发展中
在主机中使用目录很快。 您修改您的代码,重新启动泊坞窗图像,它会很快启动您的应用程序。
Docker镜像用于生产/部署
从git中取出代码是很好的。 运行更重,但更易于部署。
乙
在发展中
不要在npm install
运行npm install
,你可以手动处理依赖关系。
Docker镜像用于生产/部署
在图像构build中制作一个单独的npm i
,因为它应该是静态的。
更多的解释
当你正在开发,你改变你的代码,使用一个新的包,适应你的package.json
,更新包…
你基本上需要控制npm
发生的事情。 如果您可以直接执行命令行并访问文件(在本地目录中的docker外部),与它交互更容易。 你做你的改变,你重新启动你的docker,它开始了!
当您部署应用程序时,您不需要与npm
模块进行交互。 您需要一个打包的应用程序,其版本号和发行date不会移动,您可以依赖。
因为npm
不是100%可信赖的,所以发生了一样的package.json
你得到的一些东西,我npm i
使得应用程序崩溃。 所以我不build议在每个应用程序重新启动或部署时都使用npm i
,因为想象一些包被搞砸了,你必须急于find一个soluce。 而且完全没有必要重新加载应该完全相同的应用程序(他们应该!)。 这不是在部署中,你想更新包! 但是在你的npm update
开发环境中你可以安全地npm update
和testing所有的东西。
(对不起,英文!)
C
使用两个docker图像,并使用dockernetworking连接它们。 所以你可以在任何地方轻松部署你的应用
一些命令可能帮助Dockernetworking! (我实际上是在我的公司使用它)
// To create your own network with docker sudo docker network create --subnet=172.42.0.0/24 docker-network // Run the mondogb docker sudo docker run -i -t --net docker-network --ip 172.42.0.2 -v ~/DIRECTORY:/database mongodb-docker // Run the app docker sudo docker run -i -t --net docker-network --ip 172.42.0.3 -v ~/DIRECTORY:/local-git backend-docker
- 在Windows 7中运行Docker上的ASP.NET Core WebApp时出错(debugging)
- MissingBlobException从Nexus 3 Docker-Registry中拉出或推入
- 在dokku应用程序部署上运行一个shell脚本
- 如何创build一个与主机用户具有相同文件权限的Docker镜像/容器
- VirtualBox和Nginx非常缓慢地提供caching的静态JS和CSS文件
- Docker连接有效载荷的说明
- 如何在Docker的PHP7 Alpine映像上安装php memcached扩展?
- docker中parsingdns速度缓慢或超时
- 安装无人机与github持续集成