Docker 创建容器的最佳方法

Docker 创建容器的最佳方法,docker,containers,Docker,Containers,我正在使用nodejs、mysql开发一个应用程序,它具有以下依赖项 Nginx(用于反向代理数据库和nodejs服务器) (依赖操作系统是ubuntu) (依赖操作系统是ubuntu) 我想知道如果我想使用docker容器来打包我的应用程序,最好的方法是什么 我应该创建一个Nginx容器、一个nodejs容器和一个MySQL,并让它们相互通信吗?我知道这是一种更好的方法,因为它是可伸缩的,但在这种情况下,我应该如何以及在哪里安装ghostscript和pdftk?(nodejs应用程序对p

我正在使用nodejs、mysql开发一个应用程序,它具有以下依赖项

  • Nginx(用于反向代理数据库和nodejs服务器)
  • (依赖操作系统是ubuntu)
  • (依赖操作系统是ubuntu)
我想知道如果我想使用docker容器来打包我的应用程序,最好的方法是什么

我应该创建一个Nginx容器、一个nodejs容器和一个MySQL,并让它们相互通信吗?我知道这是一种更好的方法,因为它是可伸缩的,但在这种情况下,我应该如何以及在哪里安装ghostscript和pdftk?(nodejs应用程序对pdf文件使用Ghostscript和pdftk)


我是否应该创建一个ubuntu docker容器并在其中安装所有内容(即Nginx、pdftk、Ghostscript、mysql)?

您应该为每个应用程序创建单独的容器,因为这样可以实现:

  • 独立部署
  • 独立缩放
  • 自主开发
  • 隔离和安全
为了方便起见,您可以使用,它允许您使用单个命令启动configure和启动多个docker容器


我建议您在生产环境中不要将数据库部署在Docker容器中,因为数据库存储状态,而且不可靠,这会增加支持的复杂性。

将应用程序拆分为单独的容器需要定义良好的API来支持网络上的调用(通常是HTTP或TCP堆栈上的其他应用程序协议)

由于ghostscripts和pdftk都是使用CLI调用的命令行工具,您无法从另一个容器中即时调用它们,因此需要为此开发一些面向外部的API

在设置容器的边界时,请考虑域。容器将成为您要部署和扩展的最小单元。该单元应该是自包含的,并且具有定义良好的单一用途

从您的描述中不清楚nginx到底扮演什么角色,但假设它是某种面向客户机的web服务器或代理,3个容器在您的案例中是有意义的

  • NodeJs+PDFTK+Ghostscripts(应用程序)
  • Nginx(web服务器/代理)
  • MySQL(数据库)

NodeJS应用程序内部有其所有的应用程序依赖项,但与Nginx和MySQL的耦合更为松散,可以通过网络与之通信。

使用docker部署数据库并不一定不好,而且只要状态保持在外部(例如在卷上),就肯定不可靠。对于大规模部署ts在性能非常重要的地方,将数据库保留在虚拟机或裸机上可能仍然有意义,因为这样可以进行更深入的内核调优等。感谢您的回复。我基本上需要Nginx来反向代理数据库和nodejs服务器。如果我使用nodejs容器,它是否允许我在其中安装PDFTK+Ghostscripts?我想PDFTK和Ghostscripts只能安装在ubuntu容器上。