Að skilja Docker

Ég hef notað Docker í nokkra mánuði núna til að skipuleggja þróun/afhendingarferli vefverkefna. Ég býð lesendum Habrakhabr upp á þýðingu á inngangsgreininni um Docker - "Skilji hafnarmanninn".

Hvað er docker?

Docker er opinn vettvangur til að þróa, afhenda og reka forrit. Docker er hannað til að afhenda forritin þín hraðar. Með docker geturðu aftengt forritið þitt frá innviðum þínum og meðhöndlað innviðina sem stýrt forrit. Docker hjálpar þér að senda kóðann þinn hraðar, prófa hraðar, senda forrit hraðar og draga úr tímanum á milli þess að skrifa kóða og keyra kóða. Docker gerir þetta í gegnum léttan gáma virtualization vettvang, með því að nota ferla og tól sem hjálpa þér að stjórna og afhenda forritin þín.

Í kjarna sínum gerir docker þér kleift að keyra nánast hvaða forrit sem er, örugglega einangrað í íláti. Örugg einangrun gerir þér kleift að keyra marga gáma á sama hýsil á sama tíma. Létt eðli ílátsins, sem keyrir án þess að auka álag á ofurvisor, gerir þér kleift að fá meira út úr vélbúnaðinum þínum.

Gáma sýndarvæðingarvettvangurinn og verkfærin geta verið gagnleg í eftirfarandi tilvikum:

  • pakka forritinu þínu (og íhlutunum sem þú notar) í hafnargáma;
  • dreifing og afhending þessara gáma til teyma þinna til þróunar og prófunar;
  • að setja þessa gáma út á framleiðslustaðina þína, bæði í gagnaverum og í skýjunum.

Í hvað get ég notað docker?

Birtu forritin þín fljótt

Docker er frábært til að skipuleggja þróunarferilinn. Docker gerir forriturum kleift að keyra staðbundna gáma með forritum og þjónustu. Sem í kjölfarið gerir þér kleift að samþætta ferli stöðugrar samþættingar og uppsetningarverkflæðis.

Til dæmis skrifa verktaki þín kóða á staðnum og deila þróunarstafla sínum (setti af Docker myndum) með samstarfsfólki. Þegar þeir eru tilbúnir ýta þeir kóðanum og gámunum á prófunarstaðinn og keyra nauðsynlegar prófanir. Frá prófunarsíðunni geta þeir sent kóða og myndir til framleiðslu.

Auðveldara að leggja út og þróast

Docker gámavettvangurinn gerir það auðvelt að flytja farminn þinn. Docker gámar geta keyrt á staðbundinni vél þinni, annað hvort raunveruleg eða á sýndarvél í gagnaveri eða í skýinu.

Færanleiki og léttur eðli Docker gerir það auðvelt að stjórna vinnuálagi þínu á kraftmikinn hátt. Þú getur notað docker til að dreifa eða loka forritinu þínu eða þjónustu. Hraði docker gerir þetta kleift að gera þetta í næstum rauntíma.

Meiri farmur og meiri farmur

Docker er léttur og fljótur. Það býður upp á sveigjanlegan, hagkvæman valkost við sýndarvélar sem byggja á hypervisor. Það er sérstaklega gagnlegt í mikið álagsumhverfi, til dæmis þegar þú býrð til þitt eigið ský eða vettvang sem þjónustu. En það er líka gagnlegt fyrir lítil og meðalstór forrit þegar þú vilt fá meira út úr auðlindunum sem þú hefur.

Helstu Docker íhlutir

Docker samanstendur af tveimur meginþáttum:

  • Docker: opinn uppspretta sýndarvæðingarvettvangur;
  • Docker Hub: Pallurinn okkar sem þjónusta til að dreifa og stjórna Docker gámum.

Athugið! Docker er dreift undir Apache 2.0 leyfinu.

Docker arkitektúr

Docker notar biðlara-miðlara arkitektúr. Docker viðskiptavinurinn hefur samskipti við Docker púkann, sem tekur á sig byrðina við að búa til, keyra og dreifa gámunum þínum. Bæði viðskiptavinur og þjónn geta keyrt á sama kerfinu, þú getur tengt biðlarann ​​við ytri bryggjupúkinn. Biðlarinn og þjónninn eiga samskipti í gegnum fals eða RESTful API.

Að skilja Docker

Docker púkinn

Eins og sýnt er á skýringarmyndinni keyrir púkinn á vélinni. Notandinn hefur ekki samskipti við netþjóninn beint heldur notar biðlarann ​​til þess.

Docker viðskiptavinur

Docker viðskiptavinurinn, docker forritið, er aðalviðmót Docker. Það fær skipanir frá notandanum og hefur samskipti við docker púkann.

Inni hafnarverkamaður

Til að skilja hvað docker samanstendur af þarftu að vita um þrjá þætti:

  • myndir
  • skrásetning
  • ílát

Myndir

Docker myndin er skrifvarið sniðmát. Til dæmis gæti myndin innihaldið Ubuntu stýrikerfið með Apache og forriti á því. Myndir eru notaðar til að búa til ílát. Docker gerir það auðvelt að búa til nýjar myndir, uppfæra þær sem fyrir eru eða þú getur hlaðið niður myndum búnar til af öðru fólki. Myndir eru hluti af Docker byggingu.

The skrásetning

Docker skrásetningin geymir myndir. Það eru opinberar og einkaskrár þar sem þú getur hlaðið niður eða hlaðið upp myndum. Opinber Docker skrásetning er Docker miðstöð. Þar er geymt mikið safn af myndum. Eins og þú veist geturðu búið til myndir af þér eða þú getur notað myndir sem aðrir hafa búið til. Skráningar eru dreifingarþáttur.

Ílát

Gámar eru svipaðir og möppur. Gámar innihalda allt sem forritið þarf til að keyra. Hver ílát er búinn til úr mynd. Hægt er að búa til, ræsa, stöðva, flytja eða eyða gámum. Hver gámur er einangraður og veitir öruggan vettvang fyrir forritið. Gámar eru hluti af verkinu.

Svo hvernig virkar Docker?

Svo langt vitum við að:

  • við getum búið til myndir þar sem forritin okkar eru staðsett;
  • við getum búið til ílát úr myndum til að keyra forrit;
  • Við getum dreift myndum í gegnum Docker Hub eða aðra myndaskrá.

Við skulum sjá hvernig þessir þættir passa saman.

Hvernig virkar myndin?

Við vitum nú þegar að mynd er skrifvarið sniðmát sem ílát er búið til úr. Hver mynd samanstendur af setti af stigum. Docker notar stéttarfélags skráarkerfi að sameina þessi stig í eina mynd. Sambandsskráakerfi gerir skrám og möppum frá mismunandi skráarkerfum (mismunandi greinum) kleift að skarast á gagnsæjan hátt og skapar samhangandi skráarkerfi.

Ein af ástæðunum fyrir því að docker er léttur er vegna þess að hann notar lög eins og þetta. Þegar þú breytir myndinni, eins og að uppfæra forrit, er nýtt lag búið til. Svo, án þess að skipta um alla myndina eða endurbyggja hana, eins og þú gætir þurft að gera með sýndarvél, er aðeins lagið bætt við eða uppfært. Og þú þarft ekki að dreifa allri nýju myndinni, aðeins uppfærslunni er dreift, sem gerir það auðveldara og fljótlegra að dreifa myndum.

Kjarninn í hverri mynd er grunnmynd. Til dæmis, ubuntu, grunnmynd Ubuntu, eða fedora, grunnmynd Fedora dreifingarinnar. Þú getur líka notað myndir sem grunn til að búa til nýjar myndir. Til dæmis, ef þú ert með apache mynd geturðu notað hana sem grunnmynd fyrir vefforritin þín.

Athugið! Docker dregur venjulega myndir úr Docker Hub skránni.

Hægt er að búa til Docker myndir úr þessum grunnmyndum; við köllum skrefin til að búa til þessar myndir leiðbeiningar. Hver kennsla skapar nýja mynd eða stig. Leiðbeiningarnar verða eftirfarandi:

  • keyra skipun
  • að bæta við skrá eða möppu
  • búa til umhverfisbreytu
  • leiðbeiningar um hvað á að keyra þegar ílát þessarar myndar er ræst

Þessar leiðbeiningar eru geymdar í skrá Dockerfile. Docker les þetta Dockerfile, þegar þú byggir myndina, framkvæmir þessar leiðbeiningar og skilar endanlegri mynd.

Hvernig virkar docker skrásetningin?

Skrásetningin er geymsla fyrir docker myndir. Þegar myndin er búin til geturðu birt hana í opinberu Docker Hub skránni eða í persónulegu skrána þína.

Með docker biðlaranum geturðu leitað að þegar birtum myndum og hlaðið þeim niður í docker vélina þína til að búa til ílát.

Docker Hub býður upp á opinberar og einkamyndageymslur. Það er öllum aðgengilegt að leita og hlaða niður myndum úr opinberum geymslum. Innihald einkageymsla er ekki innifalið í leitarniðurstöðum. Og aðeins þú og notendur þínir geta tekið á móti þessum myndum og búið til ílát úr þeim.

Hvernig virkar gámur?

Gámur samanstendur af stýrikerfi, notendaskrám og lýsigögnum. Eins og við vitum er hver ílát búinn til úr mynd. Þessi mynd segir docker hvað er í ílátinu, hvaða ferli á að hefja, hvenær ílátið byrjar og önnur stillingargögn. Docker myndin er skrifvarinn. Þegar docker ræsir gám, býr það til les/skrifa lag ofan á myndina (með því að nota union skráarkerfið eins og áður segir) þar sem hægt er að keyra forritið.

Hvað gerist þegar gámurinn fer í gang?

Eða nota forritið docker, eða með því að nota RESTful API, biðlari docker segir docker púknum að ræsa ílátið.

$ sudo docker run -i -t ubuntu /bin/bash

Við skulum kíkja á þessa skipun. Viðskiptavinurinn er ræstur með skipuninni docker, með valmöguleika run, sem segir að nýr gámur verði settur á markað. Lágmarkskröfur til að keyra gám eru eftirfarandi eiginleikar:

  • hvaða mynd á að nota til að búa til ílátið. Í okkar tilviki ubuntu
  • skipunina sem þú vilt keyra þegar ílátið er ræst. Í okkar tilviki /bin/bash

Hvað gerist undir hettunni þegar við keyrum þessa skipun?

Docker, í röð, gerir eftirfarandi:

  • halar niður ubuntu myndinni: docker athugar hvort myndir séu tiltækar ubuntu á staðbundinni vél, og ef það er ekki til staðar, þá skaltu hlaða því niður frá Docker miðstöð. Ef það er mynd notar það hana til að búa til ílát;
  • býr til ílát: þegar myndin er móttekin notar docker hana til að búa til ílát;
  • frumstillir skráarkerfið og setur skrifvarið stigið upp: ílátið er búið til í skráarkerfinu og myndinni er bætt við skrifvarið stig;
  • frumstillir netið/brúna: býr til netviðmót sem gerir bryggjustjóra kleift að eiga samskipti við hýsingarvélina;
  • Stilling IP tölu: finnur og setur heimilisfangið;
  • Byrjar tilgreint ferli: ræsir forritið þitt;
  • Vinnur og framleiðir úttak úr forritinu þínu: tengir og skráir staðlað inntak, úttak og villustraum forritsins þíns svo þú getir fylgst með því hvernig forritið þitt gengur.

Þú ert nú með vinnandi gám. Þú getur stjórnað ílátinu þínu, haft samskipti við forritið þitt. Þegar þú ákveður að stöðva forritið skaltu eyða ílátinu.

Tækni notuð

Docker er skrifað í Go og notar nokkra eiginleika Linux kjarnans til að innleiða ofangreinda virkni.

Nafnarými

Docker notar tækni namespaces að skipuleggja einangruð vinnurými, sem við köllum gáma. Þegar við byrjum gám, býr docker til safn af nafnasvæðum fyrir þann gám.

Þetta skapar einangrað lag, þar sem hver þáttur ílátsins keyrir í eigin nafnrými og hefur ekki aðgang að ytra kerfinu.

Listi yfir nokkur nafnrými sem docker notar:

  • pid: að einangra ferlið;
  • net: til að stjórna netviðmótum;
  • ipc: til að stjórna IPC auðlindum. (ICP: InterProccess Communication);
  • mnt: að stjórna tengipunktum;
  • utc: til að einangra kjarnann og stjórna útgáfugerð (UTC: Unix tímaskiptakerfi).

Eftirlitshópar

Docker notar líka tækni cgroups eða stjórnhópa. Lykillinn að því að keyra forrit í einangrun er að útvega forritinu aðeins þau úrræði sem þú vilt útvega. Þannig er tryggt að gámarnir verða góðir nágrannar. Eftirlitshópar gera þér kleift að deila tiltækum vélbúnaðarauðlindum og, ef nauðsyn krefur, setja takmarkanir og takmarkanir. Takmarkaðu til dæmis hugsanlegt minnismagn fyrir ílátið.

Union skráakerfi

Union File Sysem eða UnionFS er skráarkerfi sem virkar með því að búa til lög, sem gerir það mjög létt og hratt. Docker notar UnionFS til að búa til blokkirnar sem gámurinn er byggður úr. Docker getur notað nokkur afbrigði af UnionFS þar á meðal: AUFS, btrfs, vfs og DeviceMapper.

Gámasnið

Docker sameinar þessa íhluti í umbúðir sem við köllum gámasniðið. Sjálfgefið snið er kallað libcontainer. Docker styður einnig hefðbundið gámasnið á Linux með því að nota LXC. Í framtíðinni gæti Docker stutt önnur gámasnið. Til dæmis að samþætta við BSD fangelsi eða Solaris Zones.

Heimild: www.habr.com

Bæta við athugasemd