Próbuję skonfigurować aplikację Node.js w wielu kontenerach Docker. Moja aplikacja jest obecnie na jednym Ubuntu DO kropla & używa:Docker + rys/compose + nginx + node.js + mysql + redis
- node.js (Express 4)
- mysql do bazy danych aplikacji
- Redis do sklepu klucz-wartość
- nginx dla obciążenia równoważenie i wyświetlanie plików statycznych.
trzeba dockerize różne części, po jednej dla każdego pojemnika, oczywiście, a następnie użyć Docker-Utwórz (poprzednio znany jako rysunku) wprost do opisania różnych pojemników & Setup łącza pomiędzy nimi. Kradnę niejasno na temat wieloskładnikowej aplikacji.
Jeden dla nginx
jeden dla node.js & mój express app
jeden dla MySQL
i jeden dla Redis
Jak miałby Docker-compose.yml będzie wyglądać? Zgaduję, że nginx, mysql & redis będzie niezmodyfikowanymi oficjalnymi obrazami? Podczas gdy plik node.js będzie mieć dyrektywę budowania, która wskaże plik Docker, który będzie pamiętać, że jest oparty na oficjalnym obrazie node.js wraz z instrukcjami konfiguracyjnymi? Będę musiał skonfigurować/dostarczyć mysql & redis na przykład, więc czy to oznacza, że każdy musi być oddzielny z własnym plikiem Dockerfile?
Jaki byłby sposób łączenia kontenerów? używać woluminów do kopiowania do nich plików, ustawiając porty, dostosowując plik hosts, aby mapować some.domain.com na nginx ip?
będę wtedy trzeba instalować globalnie niektórych pakietów NPM jak nodemon & PM2 i ustawić kilka crona ... (na pojemniku node.js?)
o to pierwszy projekt, będę wdzięczny za wszelkie pomóc lepiej zrozumieć tę nową konfigurację:
Docker-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
Używam tego simple project jako zasady, że moja aplikacja potrzebuje
Dziękuję Damian. Odnośnie plików nginx i node.js w tym samym kontenerze - w jaki sposób chciałbyś dodać więcej "skrzynek" w konfiguracji początkowej w nginx? Jeśli dobrze zrozumiałem - musisz go oddzielić, aby umożliwić skalowalną strukturę ... przechodzenie przez twój artykuł - dzięki! i czekam na twoją rozwiniętą odpowiedź ... Ajar – Ajar
Prowadzimy również Nginx i Node.JS w tym samym kontenerze, a my przeskalujemy przez AWS ELB –
Hej @Shimon :) Jest to bardzo interesujące - jeśli twoje skalowanie korzystasz z elastycznego równoważenia obciążenia Amazon (używając automatycznego skalowania?) - dlaczego potrzebujesz nginx wraz z Node.js w każdym pojedynczym kontenerze, który kręcisz? Jaka jest istota posiadania wielu instancji nginx? czy to służy do wyświetlania plików statycznych? masz S3 do tego ... jeśli nie używasz nginx jako pojedynczego load balancera do obsługi routingu ruchu pomiędzy kontenerami Node, dlaczego jest on na pierwszym miejscu? Dziękuję za Twój komentarz. – Ajar