Aja*_*jar 15 mysql nginx node.js docker fig
我正在尝试在Docker多个容器上设置Node.js应用程序.我的应用程序目前在一个Ubuntu DO Droplet上使用:
我需要对不同的部分进行dockerize,显然每个容器一个,然后使用Docker-Compose(以前称为图)简单描述不同的容器并设置它们之间的链接.我对多容器appraoch的窃取不清楚.
一个用于nginx,
一个用于Node.js,我的快速应用
一个用于MySql
,一个用于Redis
Docker-compose.yml会是什么样子?我猜nginx,mysql和redis将是未经修改的官方图片?虽然node.js将有一个构建指令指向Dockerfile,它会注意到它是基于node.js官方映像以及配置指令吗?我需要配置/配置mysql和redis例如,这是否意味着每个都需要与自己的Dockerfile分开?
容器之间的链接方式是什么?使用卷将文件复制到它们中,设置端口,调整hosts文件以将some.domain.com映射到nginx ip?
然后我需要在全局安装一些npm软件包,比如nodemon和PM2,并设置一些cron作业......(在Node.js容器上?)
这是初稿,如果能够更好地理解这个新设置,我将不胜感激:
泊坞窗,compose.yml
nginx:
image: nginx
links:
- "node"
node:
build: .
volumes:
- "app:/src/app"
ports:
- "3030:3000"
links:
- "db:mysql"
db:
image: mysql:5.6
environment:
- MYSQL_ROOT_PASSWORD=mypassword
Run Code Online (Sandbox Code Playgroud)
Dockerfile
FROM node:0.12
RUN mkdir /src
RUN npm install nodemon pm2 -g
WORKDIR /src
ADD app/package.json /src/package.json
RUN npm install
ADD app/nodemon.json /src/nodemon.json
EXPOSE 3000
CMD npm start
Run Code Online (Sandbox Code Playgroud)
我正在使用这个简单的项目作为基础,虽然我的应用程序需要
Evg*_*eny 26
在配置docker-compose part之前,您必须确定系统的体系结构.
你有的部分 -
其他基础设施考虑
对于将运行所有组件的单个实例,您可能甚至不需要负载均衡器 - 所以除非您需要在应用程序旁边提供静态文件,否则这里没有任何意义可以使用nginx,因为它不会执行任何操作有用.
如果您有多个容器在一个实例(对于多核/ CPU)或多个实例上运行您的express.js应用程序,那么您需要进行某种负载平衡,可能使用nginx.
不推荐处理容器内的数据,因为容器文件系统不是很擅长处理高度变异的数据.因此,对于MySQL和Redis,您可能希望在数据所在的位置具有外部装入点.
您的Express.js应用程序需要配置它需要连接的Redis和MySQL服务器,这可以使用Docker链接完成.
因此,您的Docker Compose看起来像这样 -
redis:
image: redis
volumes:
- /data/redis:/data
mysql:
image: mysql:5.6
environment:
- MYSQL_ROOT_PASSWORD=verysecret
volumes:
- /data/mysql:/var/lib/mysql
application:
image: node:0.12
working_dir: /usr/src/myapp
volumes:
- /src/app:/usr/src/myapp
ports:
- 80:3000
links:
- redis
- mysql
Run Code Online (Sandbox Code Playgroud)
这假设您将MySQL和Redis的数据存储在主机文件系统中/data
,并且您的主机文件系统上的应用程序位于/src/app
.
我建议您查找可以使用的所有各种选项的Docker Compose YAML文件参考https://docs.docker.com/compose/yml/.
由于使用的图像是来自Docker HUB 的祝福图像,因此需要注意其自述文件以获得更多配置 -
添加更多应用程序实例很简单,但是您需要添加nginx以对多个应用程序容器的传入流量进行负载平衡.
然后,当你想使用多个主机运行这种设置时,它变得更加复杂,因为docker-links不起作用,你需要另一种方法来发现容器IP地址和端口.并且负载均衡器将需要具有单个端点,该端点接受应用程序的多个实例的流量.在这里,我建议您在https://consul.io上查看帮助.
归档时间: |
|
查看次数: |
11578 次 |
最近记录: |