![](/img/trans.png)
[英]Problem connecting MySQL and Node.js docker containers using Docker-compose
[英]Docker + fig / compose + nginx + node.js + mysql + redis
我正在嘗試在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
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
我正在使用這個簡單的項目作為基礎,雖然我的應用程序需要
在配置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
這假設您將MySQL和Redis的數據存儲在/data
的主機文件系統上,而主機文件系統上的應用程序位於/src/app
。
我建議您查找可以使用的所有各種選項的Docker Compose YAML文件參考https://docs.docker.com/compose/yml/ 。
由於使用的圖像是來自Docker HUB的祝福圖像,因此需要注意其自述文件以獲得更多配置 -
添加更多應用程序實例很簡單,但是您需要添加nginx以對多個應用程序容器的傳入流量進行負載平衡。
然后,當您想要使用多個主機運行此類設置時,它會變得更加復雜,因為docker-links將無法工作,您需要另一種方法來發現容器IP地址和端口。 並且負載均衡器將需要具有單個端點,該端點接受應用程序的多個實例的流量。 在這里,我建議您在https://consul.io上查看幫助。
我認為你不需要將nginx和nodejs分成不同的實例。 目前我也在docker上設置nodejs,所以很快就會回到這里並嘗試將復雜的響應放在你的問題上。
在那里你可以找到一篇關於在docker http://blog.stxnext.com/posts/2015/01/development-with-docker-and-fig/上設置類似架構的有用文章,差異django / nodejs不應該是問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.