Sa nakaraang mga blog sa Docker, nababasa mo sana ang tungkol sa kung ano ang mga imahe ng Docker, mga lalagyan ng Docker at kung ano ang kailangan para sa kanila. Kung hindi mo pa nababasa ang tungkol sa kanila, hinihiling ko sa iyo na basahin , bago magpatuloy sa blog na ito sa Docker Compose.
Matapos tuklasin ang mga posibilidad na kasama ng Docker, tiyak na kapanapanabik na matuto nang higit pa. Hindi ba Sa gayon ay ako ay noong napunta ako sa isang hamon.
Panimula sa Docker Compose
Ang paglalagay ng isang solong aplikasyon ng serbisyo ay madali para sa akin. Ngunit nang kailangan kong maglagay ng maraming serbisyo sa magkakahiwalay na lalagyan, nasagasaan ako sa isang roadblock. Ang aking kinakailangan ay maglagay ng container at mag-host ng isang MEAN stack application.
Yup, basahin mo ito ng tama. Isang buong application ng stack. Sa una, naisip ko na hindi posible. Ngunit pagkatapos kong marinig ang tungkol sa Docker Compose, alam kong malulutas ang lahat ng aking mga problema.
Maaaring magamit ang Docker Compose upang lumikha ng magkakahiwalay na mga lalagyan (at i-host ang mga ito) para sa bawat isa sa mga stack sa isang MEAN stack application. ANG MEAN ay ang acronym para sa MongoDB Express Angular & NodeJs. Ang demo na ipapakita ko sa blog na ito ay nasa parehong paksa din.
Sa pamamagitan ng paggamit ng Docker Compose, maaari nating mai-host ang bawat isa sa mga teknolohiyang ito sa magkakahiwalay na mga lalagyan sa iisang host at makipag-usap sa isa't isa. Ang bawat lalagyan ay maglalantad ng isang port para sa pakikipag-usap sa iba pang mga lalagyan.
mga istruktura ng data at algorithm sa tutorial sa java
Ang komunikasyon at up-time ng mga lalagyan na ito ay mapapanatili ng Docker Compose.
Kaya maaari mong tanungin, kung paano i-setup ang buong imprastraktura na ito? Kaya nga, hayaan mo akong bigyan ka ng isang mas detalyadong paliwanag.
Dockerfile
Katulad ng kung paano namin paikutin ang anumang lalagyan na nag-iisang application sa pamamagitan ng pagsulat ng isang dockerfile, magsusulat kami ng isang hiwalay na dockerfile para sa pagbuo ng bawat isa sa mga application na solong lalagyan. Bilang karagdagan, magsusulat din kami ng isang Docker Compose File na gagawin ang aktwal na gawain. Isasagawa ng Docker Compose File ang iba't ibang mga dockerfile upang lumikha ng iba't ibang mga lalagyan at hayaan silang makipag-ugnay sa bawat isa.
Sa aming kaso, mayroon kaming isang buong application ng stack na binubuo ng MongoDB, ExpressJS, Angular at NodeJS. Inaalagaan ng MongoDB ang back end database, ang NodeJS at ExpressJS ay para sa pag-render ng panig ng server, at ang Angular ay para sa front end.
Dahil mayroong tatlong mga bahagi, kailangan naming paikutin ang mga lalagyan para sa bawat isa sa mga bahagi. Kailangan nating paikutin ang mga lalagyan sa sumusunod na paraan:
- Container 1 - Angular
- Container 2 - NodeJS at ExpressJS
- Container 3 - MongoDB
Lumilikha ng Mga lalagyan ng Docker
Bilang unang hakbang upang ma-dock ang mean application, isulat natin ang dockerfile para sa pagbuo ng bawat isa sa mga bahagi, simula sa lalagyan ng Angular. Ang dockerfile na ito ay dapat na nasa loob ng direktoryo ng proyekto kasama ang file na 'package.json'. Naglalaman ang 'package.json' ng mga detalye tungkol sa kung aling bersyon ng mga dependency ang kailangang gamitin ng 'NPM' para sa pagbuo ng angular application.
1. Dockerfile Para sa Pangwakas na Wakas
MULA sa node: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache malinis RUN npm i-install ang COPY. / usr / src / app EXPose 4200 CMD ['npm', 'start']
Tulad ng dati, ang aming unang utos ay upang hilahin ang isang batayang imahe, at kumukuha kami ng isang batayang 'node: 6' na imahe.
Ang susunod na dalawang utos ay tungkol sa paglikha ng isang bagong direktoryo na '/ usr / src / app' sa loob ng Docker Container para sa pagtatago ng mga Angular code at gawin itong gumaganang direktoryo sa loob ng Container.
Kinokopya namin ang file na 'package.json' mula sa aming direktoryo ng proyekto patungo sa loob ng lalagyan.
Pinatakbo namin ang utos na 'npm cache clean' na naglilinis sa cache ng npm.
Pagkatapos nito, pinapatakbo namin ang utos na 'npm install' na nagsisimulang mag-download ng mga plate ng boiler na kinakailangan para sa pagho-host ng Angular app. Nagsisimula itong mag-download ng mga plate ng boiler batay sa mga bersyon ng mga dependency na tinukoy sa 'package.json'.
Ang susunod na pagpapatakbo ng 'RUN' na pagpapatakbo ay kopyahin ang lahat ng mga code, mga folder na naroroon mula sa direktoryo ng proyekto hanggang sa loob ng lalagyan.
Hinihiling ng utos sa itaas ang lalagyan na ilantad ang numero ng port na 4200 para sa pakikipag-usap sa back end server upang magpadala ng mga kahilingan na ginawa ng mga gumagamit na mag-access sa front end client sa pamamagitan ng Web UI.
Sa wakas ang huling utos ay, 'RUN' na utos upang simulan ang 'npm'. Nagsisimula itong ipatupad ang mga code para sa pagbuo ng aming Angular app.
Handa na ngayon ang Angular app, ngunit hindi ito ma-host nang maayos dahil sa kanyang pagtitiwala sa isang back end server at isang database. Kaya't magpatuloy tayo at magsulat ng isang dockerfile para sa paglalagay ng container sa back end server.
2. Dockerfile Para sa Back End
Kahit na ang dockerfile na ito ay makikita sa isang direktoryo ng proyekto. Maglalaman din ang direktoryong ito ng file na 'package.json' para sa pagtukoy ng mga dependency ng Express server at iba pang mga kinakailangan ng NodeJS. Ngunit ang pinakamahalaga, naglalaman ito ng code ng proyekto upang suportahan ang back end server.
MULA sa node: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache malinis RUN npm i-install ang COPY. / usr / src / app EXPose 3000 CMD ['npm', 'start']
Tulad ng nakikita mo, maraming mga pagkakatulad sa pagitan ng dalawang mga dockerfile. Ginagamit namin ang parehong 'node: 6' bilang batayang layer ng imahe, lumikha ng isang bagong direktoryo sa loob ng lalagyan, gawin itong gumaganang direktoryo, at patakbuhin ang utos na 'npm install' bukod sa iba pa. Ngunit ang pagkakaiba lamang ay ang bilang ng port na nakalantad para sa komunikasyon. Sa kasong ito, ang port number 3000 ay tinukoy. Dito mai-host ang server at hahanapin ang mga kahilingan mula sa client.
3. Database
Maaaring nagtataka ka kung bakit hindi ko nabanggit ang 'dockerfile Para sa Database' sa heading. Ang dahilan dito, wala talaga kaming pangangailangan para sa pagpapasadya. Maaari naming agad na hilahin ang isang batayang imahe ng 'MongoDB' para sa pagtatago ng aming data at ilantad lamang ang numero ng port kung saan ito maaaring ma-access.
Ngayon ang tanong sa iyong isipan ay, saan ko gagawin iyon? Kaya natin magagawa iyon sa Docker Compose File.
File ng Docker Compose
Ang Docker Compose File ay isang YAML file na naglalaman ng mga detalye tungkol sa mga serbisyo, network at dami para sa pag-set up ng Docker application.
Patakbuhin ang utos sa ibaba upang hanapin ang bersyon ng iyong Docker Engine.
docker -v
Ang pagpapatupad ng utos ay ibabalik ang bersyon na tumatakbo sa iyong host. Batay sa bersyon ng Docker Engine sa iyong host, mag-download ng naaangkop na bersyon na Docker Compose. Maaari kang maghanap para sa naaangkop na bersyon upang mai-download, mula sa Opisyal na dokumentasyon ni Docker .
Dahil pinapatakbo ko ang bersyon ng Docker Engine na 17.05.0-ce, ginamit ko ang bersyon ng Docker Compose na 3.
I-install ang Docker Compose
Upang mag-download ng Compose, patakbuhin ang hanay ng mga utos sa ibaba.
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o / usr / local / bin / docker- bumuo ng sudo chmod + x / usr / local / bin / docker-compose
Tandaan na ang numero ng bersyon sa utos ay magbabago batay sa bersyon ng Docker Engine na iyong pinapatakbo.
Nasa ibaba ang mga utos na bahagi ng aking Docker Compose File.
bersyon: '3.0' # tukuyin ang bersyon ng docker-compose # Tukuyin ang mga serbisyo / lalagyan na tatakbo na mga serbisyo: angular: # pangalan ng unang pagbuo ng serbisyo: angular-app # tukuyin ang direktoryo ng mga port ng Dockerfile: - '4200: 4200' # tukuyin ang port mapping express: # pangalan ng pangalawang pagbuo ng serbisyo: express-server # tukuyin ang direktoryo ng mga port ng Dockerfile: - '3000: 3000' #patukoy ang mga link sa pagmamapa ng mga port: - database # i-link ang serbisyong ito sa database ng serbisyo sa database: # pangalan ng pangatlong imahe ng serbisyo: mongo # tukuyin ang imahe upang bumuo ng lalagyan mula sa mga port: - '27017: 27017' # tukuyin ang pagpapasa ng port
Sigurado akong sigurado na ang mga utos sa itaas na file ay walang katuturan sa iyo. Kaya, malutas natin ang problemang iyon.
Sa unang linya ng code, natukoy ko ang bersyon ng Docker Compose na ginagamit ko. Ito ay isang napakahalagang hakbang kung nais mong Gumawa ng maayos na gumana nang hindi itinapon ang anumang error. Tiyaking i-download ang bersyon ng Docker Compose alinsunod sa bersyon ng iyong Docker Engine.
Pagkatapos nito, tinukoy ko ang tatlong mga lalagyan sa pamamagitan ng paggamit ng keyword na 'mga serbisyo'. Ang mga serbisyong ito ay tumutukoy sa tatlong mga bahagi ng aking stack, front end, back end at database. Kaya sa kasong ito, ang pangalan ng aking mga lalagyan ay ang magiging pangalan ng aking mga serbisyo, ibig sabihin ay 'angular', 'express' at 'database'.
Ginamit ang keyword na 'build' upang ipahiwatig na ang dockerfile para sa pag-ikot ng lalagyan na iyon ay naroroon sa direktoryong iyon. Teka, naguguluhan ka ba paano?
Ito ay simple. Kailangang tukuyin ang landas pagkatapos ng 'build:'. Sa aming kaso, ang 'angular-app' at 'express-server' ay mga landas sa dalawang direktoryo na maaaring maabot mula sa direktoryo kung saan naroroon ang Docker Compose File. Para sa aming lalagyan ng database, sinabi ko lang na gumamit ng isang batayang 'imahe: mongo' sa halip na isang landas patungo sa dockerfile.
lumikha ng isang pakete sa java
Para sa bawat serbisyo na ito, tinukoy ko rin ang mga numero ng port na maaaring magamit upang makatanggap / magpadala ng mga kahilingan mula sa iba pang mga lalagyan (serbisyo). 4200 sa kaso ng anggular, 3000 sa kaso ng express at 27017 sa kaso ng mongo.
Bilang karagdagan, ang express container ay may isang 'link:' sa lalagyan ng database, na nagpapahiwatig na ang anumang data na natanggap sa panig ng server ay ipapadala sa database kung saan ito maiimbak.
Ngayon sa wakas, nasa pagtatapos na kami ng pagse-set up ng isang Compose. Upang simulan ang isang Docker Compose at paikutin ang tatlong mga lalagyan na may tatlong mga serbisyo, kailangan lamang naming isagawa ang nasa ibaba ng dalawang mga utos mula sa direktoryo kung saan naroroon ang Docker Compose File (YAML file):
docker-compose build docker-compose up
Ang utos na 'docker-compose build' ay ginagamit upang mabuo / muling maitayo ang mga serbisyo samantalang, ang 'docker-compose up' na utos ay ginagamit upang likhain / simulan ang mga lalagyan. Sige lang! Subukan mo para sa iyong sarili.
Nasa ibaba ang mga screenshot ng mga imaheng Docker na itinatayo at pagkatapos ay naisakatuparan. Maaari mong mapansin na ang Angular na imahe ay itinatayo at pagkatapos ay naka-tag sa pangalan bilang 'angular: pinakabagong'.
Gayundin, ang isang imahe para sa Express ay binuo na may pangalan at tag bilang 'express: pinakabagong'.
Ngayon na binuo ang imahe, subukang patakbuhin ito at sa gayon ay umiikot ng isang lalagyan sa proseso. Nasa ibaba ang screenshot na iyon.
Nasa ibaba ang screenshot na nagsasabing 'webpack: matagumpay na naipon' na nangangahulugang ang tatlong mga serbisyo ay matagumpay na nakalagay sa lalagyan ng Docker.
Ngayon na naka-host ang mga lalagyan, maaari mong makita ang mga serbisyong aktibo sa kani-kanilang mga port. Pumunta i-type ang mga sumusunod na numero ng port sa iyong web browser upang makipag-ugnay sa GUI ng MEAN app.
localhost: 4200 - Angular App (Front-end)
localhost: 3000 - Express Server & NodeJS (Back-end / Server-side)
localhost: 27017 - MongoDB (Database)
Napahanga na ba? Maghintay, dahil ang Docker ay hindi pa tapos! Maaari naming gamitin ang utos na 'docker-compose scale = 'x'' upang madaling masukat / pababa ang bilang ng mga pag-deploy. Sa madaling salita, makakalikha kami ng maraming bilang ng mga lalagyan para sa isang serbisyo. Nasa ibaba ang kumpletong utos na sukatin ang isang partikular na serbisyo sa mga lalagyan na '5':
iskala ng docker-compose = 5
Ang pag-angat ng mga serbisyo sa kadalian, pag-iimpake at paglalagay sa mga ito sa isang mabisang paraan ay ang ginagawang Docker ang isa sa mga pinakamahusay na tool sa pag-deploy at aking personal na paborito.
Kung mayroon ka pang mga pagdududa sa konsepto na ito, maaari mong panoorin ang video sa ibaba kung saan ipinaliwanag ko ang parehong konsepto na may isang praktikal na hands-on kung paano mag-set up ng Docker Compose.
Bumuo ng Docker | Containerizing MEAN Stack Application | Tutorial sa DevOps
Ngayon na natutunan mo ang tungkol sa Docker, tingnan ang ni Edureka, isang pinagkakatiwalaang kumpanya sa pag-aaral sa online na may isang network na higit sa 250,000 nasiyahan na mga nag-aaral na kumalat sa buong mundo. Ang kursong Edureka Docker Certification Training na ito ay tumutulong sa mga nag-aaral na makakuha ng kadalubhasaan sa pagpapatupad ng Docker at mastering ito.
May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento at babalikan ka namin.