Docker fyrir byrjendur: Hvað er Docker og hvernig á að búa til Docker-gáma

Ef þú hefur verið í sambandi við nýjustu þróun í forritunarheiminum undanfarin ár, hefðir þú tekið eftir háværum suð í kringum Docker og Docker ílát. Þessar vinsældir docker eru ekki að ástæðulausu. Kynning á Docker hefur gjörbreytt því hvernig verktaki nálgast þróun forrita.

Hver vill vera skilinn eftir þegar svona byltingarkennd tækni lendir í forritunarheiminum? Svo í dag erum við að byrja nýja kennsluröð fyrir þig til að læra hvernig á að nota Docker til þróunar forrita. Ef þú ert alger byrjandi fyrir Docker, þá er þessi námskeiðsréttur rétti staðurinn fyrir þig að byrja.

Í fyrstu greininni í kennsluröðinni erum við að leita að því hvað nákvæmlega Docker er og hvers vegna verktaki elskar Docker svo mikið. Við munum einnig setja bryggju á einfalt Node.js forrit til að kynna þér grunnhugtök Docker.

Af hverju að bíða lengur? Byrjum!

Hvað er Docker

Docker er tæki sem er notað til að byggja upp forrit; það er að búa til, dreifa og keyra forrit í gegnum gáma.

Með gámi er öllum bókasöfnum og öðru ósjálfstæði sem þarf til að keyra forrit pakkað sem einn pakki til dreifingar.



Meginmarkmiðið með því að geyma forrit er að einangra það frá öðrum forritum sem eru í sama kerfi. Þessi aðferð tryggir að forrit trufla ekki rekstur hvers annars og gerir viðhald forrita mun auðveldara.

Þó að ílát sem keyra í sama kerfi séu einangruð hvert frá öðru í framkvæmd, deila þau sama OS kjarna. Þess vegna eru ílát léttari miðað við aðra valkosti til að einangra framkvæmd forrita, sýndarvélar.

Gámaforrit sem keyrir á Windows stýrikerfinu þínu er tryggt að það keyrir án vandræða í Windows vél annars notanda þrátt fyrir breytt umhverfi.

Þó gámar hafi verið lengi í notkun fyrir Docker, var kynning á Docker vinsæl með gámum í verktakasamfélaginu. Það eru tveir þættir sem eru notaðir þegar hafnar eru á forriti: Dockerfil og Docker mynd . Við skulum komast að því hvað þau eru.

Dockerfil

Dockerfile er textaskrá sem inniheldur sett af skipunum sem þarf til að byggja upp bryggjumynd. Dockerfile inniheldur meðal annars upplýsingar um undirliggjandi stýrikerfi, tungumál, skráarstað og nethöfn.

Docker mynd

Þegar þú keyrir byggingarskipun Docker með dockerfile á sínum stað er docker mynd búin til út frá dockerfile. Þeir starfa sem sniðmát til að búa til endanlegan bryggjugám. Þegar búið er að búa þær eru docker myndir kyrrstöðu. Þú getur kallað fram keyrsluskipun Docker til að búa til bryggjugáminn með því að nota bryggjumynd.

Dockerizing a Node.js forrit

Í þessari kennslu ætlum við að hafnarbinda Node.js forrit. Við munum fylgja skref fyrir skref nálgun til að koma Docker gámnum í gang.

1 - Búa til Node.js forrit 2 - Búa til dockerfile 3 - Byggja upp docker mynd 4 - Búa til forritið ílát

Áður en þú kafar í hafnargerð á forritinu okkar ættirðu að ganga úr skugga um að Docker og Node.js séu sett upp í kerfinu þínu

  • Settu upp Docker á vélinni þinni - ég mun ekki fjalla um hvernig eigi að setja Docker upp í þessari kennslu, en þú getur fylgst með skjölum Docker og sett Docker upp á Windows eða Ubuntu skjáborðið.
  • Sæktu og settu upp Node.js frá opinberu vefsíðunni

Búðu til Node.js forritið

Flettu að nýju verkefnaskránni frá skipanalínunni og keyrðu eftirfarandi skipun til að búa til package.json skrána sem inniheldur upplýsingar um ósjálfstæði forritsins og byrjun handrit.

npm init -y

Settu síðan upp og bættu Express við sem háð forritinu með því að keyra þessa skipun á skipanalínunni. Við munum nota Express til að búa til forritið.

npm install express --save

Þetta bætir tjáningunni við sem háð við package.json skjal.

Nú getum við búið til hnútaforrit með hjálp Express.

Búðu til skrá sem heitir app.js í verkefnaskránni og bætið eftirfarandi kóða við skrána.

const express = require('express') const app = express() app.get('/', (req, res) => {
res.send('Hello World!') }) app.listen(3000, () => {
console.log('Node server has started running') })

Ofangreindur kóði býr til hnútamiðlara sem hlustar á innkomnar beiðnir í höfn 3000. Þú getur keyrt þessa skipun á skipanalínunni til að ræsa hnútamiðlarann.

node app.js

Farðu nú í vafrann þinn og fylgdu slóðinni http://localhost:3000 og þú munt sjá textann Hello World! á síðunni.

Við höfum byggt upp einfalt Node forrit fyrir verkefnið okkar. Nú skulum við fara að búa til dockerfile.

Búðu til Dockerfile

Í hafnarskránni bjóðum við upp upplýsingar sem nauðsynlegar eru til að byggja upp og keyra Node-appið okkar innan Docker umhverfisins.

Þetta felur í sér að tilgreina tungumálið og útgáfu þess sem notað er í forritinu, setja verkefnaskrá okkar sem vinnuskrá, afrita allar skrár í vinnuskránni, stilla nethöfnina og tilgreina hvaða skrá er inngangsstaður umsóknarinnar. Í flóknari forritum verður þú að setja umhverfisbreytur og vefslóð gagnagrunnsins í dockerfile líka.

FROM node:latest WORKDIR /dockerTutorial COPY . . RUN npm install EXPOSE 3000 ENTRYPOINT ['node', 'app.js']
  • FRÁ skipun sækir OS mynd, til að keyra forritið okkar á tilteknu stýrikerfi, frá Docker Hub. Docker Hub er geymsla bryggjumynda sem við getum dregið til umhverfisins. Við erum að sækja ímynd sem byggir á Ubuntu sem hefur sett Node.js. Með því að nota „nýjustu“ sem Node útgáfu dregur mynd sem hefur nýjustu Node útgáfuna uppsetta.
  • VINNDIR skipun stillir vinnuskrá forritsins.
  • AFSKRIFT stjórn afritar skrár úr núverandi möppu (á skipanalínunni) í vinnusafnið sem var stillt í fyrra skrefi. Þú getur annað hvort tilgreint skráarnafn til að afrita eða notað tvöfalda punkta til að afrita allar skrár í núverandi skrá yfir í vinnusafnið.
  • HLAUPA skipun setur upp allar háðir sem þarf til að byggja upp forritið. Þetta felur í sér allar háðir sem tilgreindar eru í package.json skjal.
  • AFHJÚPA skipun opnar höfn frá Docker gámnum til umheimsins. Þessi höfn tekur á móti öllum beiðnum sem við sendum í Docker gáminn. Gátt er sérstaklega stillt á 3000 vegna þess að það er höfn sem hnútaforritið okkar í Docker ílátinu notar til að hlusta á beiðnir.
  • INNKVÖLD tilgreinir hvernig byrja á forritinu. Docker tengist fylkinu sem við bjóðum upp á eina skipun til að ræsa forritið. Í þessu tilfelli, node app.js.

Að byggja Docker myndina

Notaðu eftirfarandi skipun til að búa til Docker myndina úr dockerfile.

docker build -t docker-tutorial .

Docker-tutorial er nafnið á Docker myndinni. Punkturinn gefur til kynna skráarslóðina að verkefnaskránni, þar sem við erum stödd núna í skipanalínunni.

Ef OS myndin sem tilgreind er með FRÁ skipun, hnútur: nýjasta , er ekki í tækinu þínu eins og er, það verður dregið úr Docker Hub þegar þú keyrir ofangreinda skipun.

Eftir að myndin hefur verið dregin verður hver skipun í dockerfilinni framkvæmd ein af annarri.

Í lok framkvæmdar, ef þú sérð skilaboðin tókst að byggja , bryggjumynd forritsins hefur verið smíðuð með góðum árangri. Keyrðu þessa skipun til að sjá innbyggða bryggjumynd í staðbundnu myndageymslunni.

docker images

Framleiðslan lítur svona út

Að búa til gáminn

Nú getum við notað innbyggðu myndina til að búa til Docker ílát okkar. Notaðu docker run skipunina til að búa til gáminn.

docker run -p 8080:3000 docker-tutorial

Hér tákna tölurnar 8080 og 3000 ytra og innra gámsins. Ytri höfn, 8080, er höfnin sem við notum til að tengjast forritinu í gegnum vafrann okkar. Innri höfn, 3000, er höfnin sem umsókn okkar hlustar á innkomnar beiðnir. Docker gámur kortleggur tiltekna ytri höfn í innri höfn.

Farðu á slóðina http://localhost:8080 í vafranum og sjáðu hvort þú færð síðuna með Hello World! skilaboð sem þú fékkst þegar þú heimsóttir http://localhost:3000 áður. Ef já, þá er Docker gámurinn þinn í gangi.

Þú getur notað þessa skipun til að skoða alla hlaupandi Docker gáma í tækinu þínu.

docker ps

Skipunin gefur þér framleiðslu sem þessa. Við finnum CONTAINER_ID og NAME hlaupagámsins hér.

Að bæta umhverfisbreytum við umsókn þína

Manstu hvernig ég nefndi forrit með umhverfisbreytum þarfnast fleiri leiðbeininga í dockerfile? Gildi umhverfisbreytu breytist með því umhverfi sem þau eru að hlaupa í.

Athugaðu hvernig við nefndum sérstaklega höfnina sem Node appið okkar hlustar á þegar netþjónninn er í gangi. Þessi aðferð er ósveigjanleg og villuvæg. Ef við keyrum forritið okkar í umhverfi sem opnar ekki höfn 3000 fyrir Node netþjóninn hættir forritið að virka.

Hentugasta framkvæmdin er að taka höfnarnúmerið úr forritinu. Í staðinn notum við breytuheiti í stað hafnarnúmers og setjum gildi fyrir þá breytu í hlaupandi umhverfi. Í okkar tilviki er hlaupandi umhverfi Docker ílátið. Svo verðum við að bæta höfnarnúmerinu við dockerfile sem umhverfisbreytu.

Við skulum sjá hvernig við getum gert það.

Fyrst skaltu bæta umhverfisbreytunni við dockerfile með gildi hennar. Við verðum að bæta við nýrri skipun í dockerfile til að ná þessu fram.

FROM node:latest WORKDIR /dockerTutorial COPY . . ENV PORT=3000 RUN npm install EXPOSE $PORT ENTRYPOINT ['node', 'app.js']

Með því að nota ENV skipunina sem fylgt er eftir breytuheitinu og gildisúthlutuninni getum við bætt nýrri umhverfisbreytu við höfnaskrána okkar. Tókstu eftir því hvernig EXPOSE 3000 skipuninni hefur verið breytt til að nefna ekki gáttarnúmerið sérstaklega? Þess í stað vísar það til búnar PORT breytur til að fá nákvæma höfnarnúmer. Með þessari nálgun, ef við verðum að breyta höfnarnúmerinu, verðum við aðeins að breyta einum stað í kóðanum okkar, sem gerir forritinu auðvelt að viðhalda.

Nú höfum við breytt dockerfile, næsta skref er að breyta app.js til að vísa til búið umhverfisbreytu. Fyrir þetta skiptum við um höfn númer 3000 sem notað er í hlustunaraðferðinni fyrir process.env.PORT.

const express = require('express') const app = express() app.get('/', (req, res) => {
res.send('Hello World!') }) app.listen(process.env.PORT, () => {
console.log('Node server has started running') })

Þar sem við gerðum breytingar á forritaskrám okkar og dockerfile verðum við að byggja nýja mynd fyrir nýjan gám. En fyrst verðum við að stöðva Docker gáminn sem er í gangi til að ná þessu.

Við getum notað skipunarstoppskipunina til að stöðva gáminn.

docker stop f10

Gildið, f10, sem notað er í þessari skipun er fyrstu þrír tölustafir auðkennis gámsins.

Við getum notað skipunina, docker kill, til að stöðva gáminn í gangi.

docker kill f10

Munurinn á afláta og bryggjustoppi er sá að hafnarstopp stöðvar gáminn tignarlega með því að losa um að nota auðlindir og bjarga ríkinu. docker kill, stöðvar þó gáminn skyndilega án þess að losa auðlindir almennilega eða bjarga ríkinu. Betri kostur er fyrir gám sem keyrir í framleiðsluumhverfi.

Eftir að hafa stöðvað hlaupandi ílát skaltu ganga úr skugga um að hreinsa það sem eftir er af gámnum úr hýsingarumhverfinu með eftirfarandi skipun.

Að keyra gáminn í púkkastillingu

Þegar þú reynir að keyra ofangreindar skipanir til að stöðva gáminn, myndirðu taka eftir því að flugstöðvarflipinn sem við notuðum til að búa til gáminn er ekki hægt að nota til að keyra fleiri skipanir nema við drepum gáminn. Við getum fundið lausn á þessu með því að nota sérstakan flipa til að keyra nýjar skipanir.

En það er betri nálgun. Við getum keyrt gáminn í púkkastillingu. Með púkastillingu keyrir ílátið í bakgrunni án þess að nota núverandi flipa til að sýna afköst.

Til að ræsa ílát í púkastillingu þarftu einfaldlega að bæta við viðbótar -d fána við skipakynnarann.

docker run -d -p 8080:3000 docker-tutorial

Að keyra gáminn í gagnvirkri stillingu

Til að keyra gám í gagnvirkum ham ætti gámurinn þegar að vera í gangi. Þegar þú ert kominn í gagnvirka stillingu geturðu keyrt skipanir til að bæta við eða fjarlægja skrár í gáminn, skrá skrár eða keyra aðrar bash skipanir sem við notum venjulega.

Notaðu eftirfarandi skipun til að keyra gáminn í gagnvirkum ham.

docker exec -it e37 bash

Hér er e37 auðkenni gámsins. Spilaðu með gagnvirka stillingunni með bash skipunum.

Niðurstaða

Í fyrstu kennslustundinni í Docker námskeiðsseríunni okkar lærðir þú hvernig á að búa til Docker ílát fyrir einfalt Node.js forrit. En það er meira sem þú gætir gert með Docker og gámum. Í komandi námskeiðum okkar munum við sjá hvernig á að vinna með gagnagrunna, bindi og vinna með marga gáma sem notaðir eru af forriti byggt með örþjónustu.