簡體   English   中英

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

[英]Docker + fig / compose + nginx + node.js + mysql + redis

我正在嘗試在Docker多個容器上設置Node.js應用程序。 我的應用程序目前在一個Ubuntu DO Droplet上使用:

  1. Node.js(表達4)
  2. 應用程序數據庫的mysql
  3. redis用於鍵值存儲
  4. nginx用於負載平衡並提供靜態文件。

我需要對不同的部分進行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之前,您必須確定系統的體系結構。

你有的部分 -

  • MySQL可執行版本X偵聽端口3306
  • MySQL 數據存儲在磁盤上
  • Redis可執行版本Y在端口6379上偵聽
  • Redis備份磁盤上的數據
  • Node.js可執行版本Z偵聽端口3000
  • Express.js應用程序的文件
  • Nginx可執行版Q在端口80上偵聽

其他基礎設施考慮

  • 單個實例,一個cpu / core
  • 單個實例,多個cpus /核心
  • 多個實例
  • 使用哪種負載均衡器(如果有的話)

對於將運行所有組件的單個實例,您可能甚至不需要負載均衡器 - 因此,除非您需要在應用程序旁邊提供靜態文件,否​​則這里沒有任何意義可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM