„Docker Compose“, skirtas konteineriams laikyti „MEAN Stack Application“



„Docker Compose“ yra įrankis, skirtas apibrėžti ir paleisti kelis konteinerius, norint paleisti sudėtingas programas „Docker“, pavyzdžiui, talpinti MEAN programą.

Ankstesniuose „Docker“ tinklaraščiuose būtumėte skaitę apie tai, kas yra „Docker“ vaizdai, „Docker“ talpyklos ir koks jų poreikis. Jei dar neskaitėte apie juos, prašau perskaityti , prieš tęsdami šį tinklaraštį „Docker Compose“.

Išnagrinėjus „Docker“ galimybes, tikrai labai įdomu sužinoti daugiau. Ar ne? Na, bent jau buvau, kai patekau į iššūkį.



„Docker Compose“ įvadas

Talpinti vieną paslaugų programą man buvo lengva. Bet kai turėjau sukrauti kelias paslaugas į atskirus konteinerius, įvažiavau į kliūtį. Mano reikalavimas buvo talpinti ir talpinti MEAN kamino programą.

Taip, jūs perskaitėte teisingai. Viso kamino programa. Iš pradžių maniau, kad tai neįmanoma. Bet išgirdęs apie „Docker Compose“ žinojau, kad visos mano problemos bus išspręstos.



„Docker Compose“ gali būti naudojamas atskiriems konteineriams (ir juos priglobti) sukurti kiekvienam iš „MEAN“ rietuvių programos rietuvių. MEAN yra „MongoDB Express Angular & NodeJs“ akronimas. Demo, kurį rodysiu šiame tinklaraštyje, taip pat ta pačia tema.

Naudodami „Docker Compose“, kiekvieną iš šių technologijų galime talpinti atskirose talpyklose tame pačiame pagrindiniame kompiuteryje ir priversti jas bendrauti tarpusavyje. Kiekvienas konteineris atskleis prievadą ryšiui su kitais konteineriais.

Šių konteinerių ryšį ir veikimo laiką palaikys „Docker Compose“.



Taigi galite paklausti, kaip sukonfigūruoti visą šią infrastruktūrą? Na, leiskite man pateikti jums išsamesnį paaiškinimą.

Dockerfile

Panašiai, kaip sukame bet kurį vienos programos talpyklą, parašydami „dockerfile“, turėsime parašyti atskirą „dockerfile“, kad sukurtume kiekvieną vieno konteinerio programą. Be to, mes taip pat turėsime parašyti „Docker Compose File“, kuris atliks faktinį darbą. „Docker Compose File“ vykdys skirtingus „docker“ failus, kad sukurtų skirtingus konteinerius ir leistų jiems sąveikauti.

Mūsų atveju mes turime pilną kamino programą, kurią sudaro MongoDB, ExpressJS, Angular ir NodeJS. „MongoDB“ rūpinasi užpakalinės dalies duomenų baze, „NodeJS“ ir „ExpressJS“ - serverio atvaizdavimui, o „Angular“ - priekinei.

„MEAN Stack App“ - „Docker Compose“ - „Edureka“

Kadangi yra trys komponentai, turime sukti indus kiekvienam komponentui. Mes turime sukti konteinerius tokiu būdu:

  1. 1 konteineris - kampinis
  2. 2 konteineris - „NodeJS“ ir „ExpressJS“
  3. 3 konteineris - „MongoDB“

Docker konteinerių kūrimas

Pirmasis žingsnis norint užblokuoti vidutinę programą, parašykime kiekvieno komponento sukūrimo docker failą, pradedant nuo „Angular“ konteinerio. Ši „dockerfile“ turės būti projekto kataloge kartu su rinkmena „package.json“. „Package.json“ yra išsami informacija apie tai, kurią priklausomybių versiją „NPM“ turi naudoti kuriant kampinę programą.

1. Dockerfile priekiniam galui

FROM mazgas: 6 Vykdyti mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm talpykla švari RUN npm install COPY. / usr / src / app EXPOSE 4200 CMD ['npm', 'start']

Kaip visada, mūsų pirmoji komanda yra ištraukti pagrindinį vaizdą, o mes traukiame pagrindinį vaizdą 'mazgas: 6'.

Kitos dvi komandos yra apie naujo katalogo „/ usr / src / app“ sukūrimą „Docker“ talpykloje, skirtą kampiniams kodams saugoti, ir padaryti šį darbinį katalogą konteinerio viduje.

Tada mes nukopijuojame failą „package.json“ iš savo projekto katalogo į konteinerio vidų.

Tada vykdome komandą „npm cache clean“, kuri valo npm talpyklą.

Po to vykdome komandą „npm install“, kuri pradeda atsisiųsti katilo plokštes, reikalingas „Angular“ programai priglobti. Jis pradeda atsisiųsti katilo plokštes pagal priklausomybių versijas, nurodytas „package.json“.

Kitas „RUN“ komandų vykdymas yra visų kodų, aplankų, esančių iš projekto katalogo, nukopijavimas į konteinerio vidų.

Pirmiau nurodyta komanda reikalauja, kad konteineris parodytų prievado numerį 4200, kad būtų galima bendrauti su užpakaliniu serveriu, kad būtų siunčiamos užklausos, kurias pateikė vartotojai, pasiekiantys priekinį klientą per žiniatinklio sąsają.

java kaip naudotis tostring

Pagaliau paskutinė komanda yra „Paleisti“, kad būtų paleista „npm“. Tai pradeda vykdyti „Angular“ programos kūrimo kodus.

Dabar „Angular“ programa yra parengta, tačiau ji nebus tinkamai priglobta, nes ji priklauso nuo galinio serverio ir duomenų bazės. Taigi eikime toliau ir parašykime „dockerfile“, kad galinis serveris būtų talpinamas.

2. „Dockerfile“ užpakalinei daliai

Net ši dockerfile bus projekto kataloge. Šiame kataloge taip pat bus failas „package.json“, skirtas apibrėžti „Express“ serverio priklausomybes ir kitus „NodeJS“ reikalavimus. Bet svarbiausia, kad jame yra projekto kodas, palaikantis galinį serverį.

FROM mazgas: 6 Vykdyti mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm talpykla švari RUN npm install COPY. / usr / src / app EXPOSE 3000 CMD ['npm', 'start']

Kaip matote, tarp dviejų „docker“ failų yra daug panašumų. Mes naudojame tą patį ‘node: 6’ kaip pagrindinį vaizdo sluoksnį, talpykloje sukuriame naują katalogą, paverčiame jį darbiniu katalogu ir vykdome komandą ‘npm install’. Tačiau vienintelis skirtumas yra ryšio prievado numeris. Šiuo atveju apibrėžtas prievado numeris 3000. Čia bus priglobtas serveris ir jis ieškos kliento užklausų.

3. Duomenų bazė

Jums gali kilti klausimas, kodėl antraštėje nepaminėjau „dockerfile For Database“. Priežastis ta, kad mes iš tikrųjų nereikia pritaikyti. Mes galime iš karto parengti „MongoDB“ pagrindinį vaizdą savo duomenims saugoti ir tiesiog parodyti prievado numerį, prie kurio jį galima pasiekti.

Dabar jums kiltų klausimas, kur aš tai daryčiau? Na, mes galime tai padaryti „Docker Compose File“.

„Docker“ kūrimo failas

„Docker Compose File“ yra YAML failas, kuriame pateikiama išsami informacija apie „Docker“ programos nustatymo paslaugas, tinklus ir tomus.

Paleiskite žemiau esančią komandą, kad rastumėte „Docker Engine“ versiją.

dokininkas -v

Vykdant komandą bus grąžinta jūsų kompiuteryje veikianti versija. Remdamiesi „Docker Engine“ versija, esančia jūsų pagrindiniame kompiuteryje, atsisiųskite tinkamą „Docker Compose“ versiją. Galite ieškoti tinkamos atsisiųsti versijos iš Dockerio oficialūs dokumentai .

Kadangi vykdau „Docker Engine“ 17.05.0-ce versiją, naudojau „Docker Compose“ 3 versiją.

Įdiekite „Docker Compose“

Norėdami atsisiųsti „Compose“, vykdykite toliau pateiktą komandų rinkinį.

sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o / usr / local / bin / docker- sudaryti sudo chmod + x / usr / local / bin / docker-compose

Atminkite, kad versijos numeris komandoje pasikeis atsižvelgiant į jūsų vykdomą „Docker Engine“ versiją.

Žemiau pateikiamos komandos, kurios yra mano „Docker Compose File“ dalis.

versija: '3.0' # nurodykite „docker-compose“ versiją # Apibrėžkite paslaugas / konteinerius, kuriuos norite paleisti: angular: # pirmojo paslaugų paketo pavadinimas: angular-app # nurodykite „Dockerfile“ prievadų katalogą: - '4200: 4200' # nurodyti uosto atvaizdavimo greitį: # antrosios paslaugos versijos pavadinimas: express-server # nurodykite „Dockerfile“ prievadų katalogą: - „3000: 3000“ # nurodykite uostų susiejimo nuorodas: - duomenų bazė # susieja šią paslaugą su duomenų bazės paslaugų duomenų baze: # trečiojo paslaugų vaizdo pavadinimas: mongo # nurodykite vaizdą, kad sukurtumėte konteinerį iš uostų: - '27017: 27017' # nurodykite prievado persiuntimą

Esu tikras, kad aukščiau esančiame faile esančios komandos jums neturi prasmės. Taigi, išspręskime šią problemą.

Pirmoje kodo eilutėje apibrėžiau naudojamą „Docker Compose“ versiją. Tai labai svarbus žingsnis, jei norite, kad „Compose“ veiktų tinkamai, neišmeskite klaidos. Būtinai atsisiųskite „Docker Compose“ versiją pagal „Docker Engine“ versiją.

Po to aš apibrėžiau tris konteinerius naudodamas raktinį žodį „paslaugos“. Šios paslaugos nurodo tris mano kamino, priekinės, galinės ir duomenų bazės komponentus. Taigi šiuo atveju mano konteinerių pavadinimas bus mano paslaugų pavadinimas, ty 'kampinis', 'greitas' ir 'duomenų bazė'.

Raktinis žodis „sukūrimas“ naudojamas nurodyti, kad tame konteineryje sukamas „docker“ failas, skirtas sukti tą konteinerį. Palauk, ar tu sutrikęs?

Tai paprasta. Kelias turi būti nurodytas po „build:“. Mūsų atveju „angular-app“ ir „express-server“ yra keliai į du katalogus, kuriuos galima pasiekti iš katalogo, kuriame yra „Docker Compose File“. Mūsų duomenų bazės talpykloje aš tiesiog pasakiau, kad vietoj kelio į dockerfile naudokite bazinį „image: mongo“.

Kiekvienai iš šių paslaugų taip pat nurodžiau uosto numerius, kuriais galima gauti / siųsti užklausas iš kitų konteinerių (tarnybų). 4200 - kampinis, 3000 - greitojo ir 27017 - mongo.

Be to, greitasis konteineris turi „nuorodą“ į duomenų bazės talpyklą, nurodydamas, kad bet kokie serverio pusėje gauti duomenys bus nusiųsti į duomenų bazę, kurioje jie bus saugomi.

Pagaliau mes baigėme kurti kūrinį. Norėdami paleisti „Docker Compose“ ir sukti tris konteinerius naudodamiesi trimis paslaugomis, turime tiesiog atlikti dvi toliau nurodytas komandas iš katalogo, kuriame yra „Docker Compose File“ (YAML failas):

docker-compose statyti docker-komponuoti

„Docker-compose build“ komanda naudojama paslaugoms kurti / atstatyti, o „docker-compose up“ komanda naudojama konteineriams kurti / paleisti. Pirmyn! Išbandykite patys.

Žemiau yra „Docker“ vaizdų, kurie yra kuriami ir tada vykdomi, ekrano kopijos. Galite pastebėti, kad kampinis vaizdas yra kuriamas ir pažymėtas pavadinimu „kampinis: naujausias“.

Taip pat yra sukurtas „Express“ vaizdas su pavadinimu ir žyma „express: naujausias“.

Dabar, kai vaizdas sukurtas, pabandykime jį paleisti ir taip sukti konteinerį. Žemiau yra ta ekrano kopija.

Žemiau pateikiama ekrano kopija, kurioje sakoma „webpack: compiled sėkmingai“, o tai reiškia, kad „Docker“ sėkmingai konteineriuose pateikia tris paslaugas.

Dabar, kai talpyklos talpinamos, galite pamatyti, kaip paslaugos veikia atitinkamuose jų uostuose. Įveskite šiuos prievado numerius savo žiniatinklio naršyklėje, kad galėtumėte sąveikauti su MEAN programos GUI.

vietinis šeimininkas: 4200 - Kampinė programa (priekinė dalis)
vietinis šeimininkas: 3000 - „Express Server“ ir „NodeJS“ (vidinė / serverio pusė)
localhost: 27017 - „MongoDB“ (duomenų bazė)

Dar sužavėtas? Palaukite, nes „Docker“ dar nebaigta! Mes galime naudoti komandą „docker-compose scale =’ x ““, kad lengvai padidintumėte / sumažintumėte diegimų skaičių. Kitaip tariant, mes galime sukurti tiek daug konteinerių paslaugai. Toliau pateikiama visa komanda tam tikrą paslaugą pritaikyti „5“ konteineriams:

dokininko sudarymo skalė = 5

Docker yra vienas iš geriausių diegimo įrankių ir mano asmeninis mėgstamiausias būdas padidinti paslaugas taip lengvai, supakuoti ir supakuoti į konteinerius tokiu ekonomišku būdu.

Jei vis dar kyla abejonių dėl šios koncepcijos, galite žiūrėti žemiau pateiktą vaizdo įrašą, kuriame aš paaiškinau tą pačią koncepciją praktiškai, kaip nustatyti „Docker Compose“.

„Docker Compose“ Konteinerių pakaitalas „MEAN Stack“ | „DevOps“ mokymo programa

Dabar, kai sužinojote apie „Docker“, patikrinkite sukūrė „Edureka“ - patikima internetinė mokymosi įmonė, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą. Šis „Edureka Docker“ sertifikavimo mokymo kursas padeda besimokantiesiems įgyti patirties diegiant „Docker“ ir ją įvaldant.

Turite mums klausimą? Prašau paminėti tai komentarų skiltyje ir mes su jumis susisieksime.