Docker+fig/compose+nginx+node.js+mysql+redis

我正在尝试在Docker multiple containers上设置Node.js应用程序。
我的应用程序目前在一个Ubuntu DO droplet&用途:

  1. Node.js(express 4)
  2. 应用程序数据库的mysql
  3. 用于键值存储的redis
  4. nginx用于负载平衡和服务静态文件

我需要对不同的部分进行dockerize,每个容器一个,然后使用dockercompose(以前称为Fig)简单描述不同的容器&设置它们之间的链接。
我不清楚多容器方法。
一个用于nginx
一个用于Node.js&我的express应用程序
一个用于MySql
一个是Redis

Docker-compose.yml将是什么样子?
我猜是nginx、mysql&redis将是未经修改的官方图像吗?
虽然node.js将有一个build指令指向Dockerfile,但会注意到它是基于node.js官方映像和配置指令的?
我需要配置/配置mysql&以redis为例,这是否意味着每一个都需要使用自己的Dockerfile进行分离

集装箱之间的连接方式是什么?
使用卷将文件复制到其中,
设置端口,调整主机文件以将some.domain.com映射到nginx ip

然后我需要在全球范围内安装一些npm软件包,如nodemon&PM2
并设置一些cron作业。。。(在Node.js容器上?)

这是初稿,如果您能帮助我更好地理解这一新设置,我将不胜感激:

Docker-compose.yml

nginx:
图片:nginx
链接:
-“节点”
节点:
生成:。
卷数:
-“应用程序:/src/app”
端口:
– “3030:3000”
链接:
-“数据库:mysql”
db:
图片:mysql:5.6
环境:
-MYSQL\u ROOT\u PASSWORD=mypassword

Dockerfile

来自节点的

:0.12
运行mkdir/src
运行npm安装节点pm2-g
WORKDIR/src
添加app/package.json/src/package.json
运行npm安装
添加app/nodemon.json/src/nodemon.json
暴露3000
CMD npm启动

我使用这个简单的项目作为基础,尽管我的应用程序需要

在配置docker组件之前,必须确定系统的体系结构

你的零件-

  • MySQL可执行版本X在端口3306上侦听
  • MySQL存储在磁盘上的数据
  • Redis可执行版本Y在端口6379上侦听
  • 磁盘上的Redis备份数据
  • Node.js可执行版本Z在端口3000上侦听
  • Express.js应用程序的文件
  • Nginx可执行版本Q在端口80上侦听

其他基础设施注意事项-

  • 单实例,一个cpu/核心
  • 单实例、多CPU/核
  • 多实例
  • 使用哪种负载平衡器(如果有)

对于将运行所有组件的单个实例,您甚至可能不需要负载平衡器——因此,除非您需要在应用程序旁边提供静态文件,否则使用nginx没有什么意义,因为它不会做任何有用的事

当您有多个容器在一个实例(对于多核/CPU)或多个实例上运行express.js应用程序时,您需要进行某种负载平衡,可能需要使用nginx

不建议在容器内处理数据,因为容器文件系统不太擅长处理高度变化的数据。因此,对于MySQL和Redis,您可能希望数据驻留在外部挂载点

您的Express.js应用程序需要配置需要连接的Redis和MySQL服务器,这可以通过Docker链接实现

因此,您的Docker Compose将如下所示-

redis:
图片:redis
卷数:
-/data/redis:/data
mysql:
图片:mysql:5.6
环境:
-MYSQL\u ROOT\u PASSWORD=verysecret
卷数:
-/data/mysql:/var/lib/mysql
应用程序:
图像:节点:0.12
工作目录:/usr/src/myapp
卷数:
-/src/app:/usr/src/myapp
端口:
– 80:3000
链接:
-雷迪斯
-mysql

这假设您将MySQL和Redis的数据存储在主机文件系统中的/data,并且您在主机文件系统上的应用程序位于/src/app

我建议您查找Docker Compose YAML文件参考,以了解所有可以使用的各种选项https://docs.docker.com/compose/yml/.

由于使用的图像是来自Docker HUB的图像,因此需要注意它们的自述文件,以便进行更多配置-

  • https://registry.hub.docker.com/_/mysql/
  • https://registry.hub.docker.com/_/node/
  • https://registry.hub.docker.com/_/redis/

添加更多的应用程序实例很容易,但是您需要添加nginx来平衡多个应用程序容器的传入流量

然后,当您想要使用多个主机运行这种设置时,它会变得更加复杂,因为docker链接将无法工作,您需要另一种方法来发现容器IP地址和端口。负载平衡器需要有一个单一的端点来接受应用程序多个实例的流量。在这里,我建议大家好好看看https://consul.io 寻求帮助

发表评论