Kuelewa Docker

Nimekuwa nikitumia Docker kwa miezi kadhaa sasa kuunda mchakato wa ukuzaji / utoaji wa miradi ya wavuti. Ninawapa wasomaji wa Habrakhabr tafsiri ya nakala ya utangulizi kuhusu docker - "Kuelewa docker".

Docker ni nini?

Docker ni jukwaa wazi la kukuza, kutoa, na kufanya kazi kwa programu. Docker imeundwa kuwasilisha programu zako haraka. Ukiwa na dokta, unaweza kubadilisha programu yako kutoka kwa miundombinu yako na kutibu miundombinu kama programu inayodhibitiwa. Docker hukusaidia kusafirisha nambari yako haraka, kujaribu haraka, kusafirisha programu haraka, na kupunguza muda kati ya nambari ya kuandika na nambari inayoendesha. Docker hufanya hivi kupitia jukwaa la uboreshaji wa kontena nyepesi, kwa kutumia michakato na huduma zinazokusaidia kudhibiti na kukaribisha programu zako.

Katika msingi wake, docker hukuruhusu kuendesha karibu programu yoyote, iliyotengwa kwa usalama kwenye chombo. Kutengwa kwa usalama hukuruhusu kuendesha vyombo vingi kwenye seva pangishi moja kwa wakati mmoja. Hali nyepesi ya chombo, ambayo huendesha bila mzigo wa ziada wa hypervisor, inakuwezesha kupata zaidi kutoka kwa vifaa vyako.

Jukwaa la uboreshaji wa chombo na zana zinaweza kuwa muhimu katika hali zifuatazo:

  • kufunga programu yako (na vifaa unavyotumia) kwenye vyombo vya docker;
  • usambazaji na utoaji wa kontena hizi kwa timu zako kwa maendeleo na majaribio;
  • kuweka vyombo hivi kwenye tovuti zako za uzalishaji, katika vituo vya data na kwenye mawingu.

Ninaweza kutumia docker kwa nini?

Chapisha programu zako kwa haraka

Docker ni nzuri kwa kupanga mzunguko wa maendeleo. Docker inaruhusu watengenezaji kuendesha vyombo vya ndani na programu na huduma. Ambayo baadaye hukuruhusu kuunganishwa na mchakato wa ujumuishaji unaoendelea na mtiririko wa kazi wa kupeleka.

Kwa mfano, wasanidi programu wako huandika msimbo ndani ya nchi na kushiriki safu yao ya ukuzaji (seti ya picha za Docker) na wenzako. Zikiwa tayari, husukuma msimbo na kontena hadi kwenye tovuti ya majaribio na kufanya majaribio yoyote muhimu. Kutoka kwa tovuti ya majaribio, wanaweza kutuma msimbo na picha kwa uzalishaji.

Rahisi zaidi kuweka nje na kufunua

Jukwaa la msingi la kontena hurahisisha kuweka mzigo wako wa malipo. Vyombo vya Docker vinaweza kuendeshwa kwenye mashine yako ya karibu, halisi au kwenye mashine ya mtandaoni katika kituo cha data, au katika wingu.

Uwezo wa kubebeka na uzani mwepesi wa docker hurahisisha kudhibiti mzigo wako wa kazi. Unaweza kutumia docker kupeleka au kuzima programu au huduma zako. Kasi ya docker inaruhusu hii kufanywa karibu na wakati halisi.

Mizigo ya juu na mizigo zaidi ya malipo

Docker ni nyepesi na ya haraka. Inatoa uthabiti, mbadala wa gharama nafuu kwa mashine za mtandaoni zenye msingi wa hypervisor. Ni muhimu sana katika mazingira ya mzigo wa juu, kwa mfano, wakati wa kuunda wingu yako au jukwaa-kama-huduma. Lakini pia ni muhimu kwa programu ndogo na za kati unapotaka kupata zaidi kutoka kwa rasilimali ulizonazo.

Vipengele kuu vya Docker

Docker ina sehemu kuu mbili:

  • Docker: jukwaa la uboreshaji wa chanzo wazi;
  • Docker Hub: Jukwaa letu-kama-huduma la kusambaza na kudhibiti vyombo vya Docker.

Kumbuka! Docker inasambazwa chini ya leseni ya Apache 2.0.

Usanifu wa Docker

Docker hutumia usanifu wa seva ya mteja. Mteja wa Docker huwasiliana na daemon ya Docker, ambayo inachukua mzigo wa kuunda, kuendesha, na kusambaza vyombo vyako. Mteja na seva zote mbili zinaweza kufanya kazi kwenye mfumo huo huo, unaweza kuunganisha mteja kwenye daemon ya docker ya mbali. Mteja na seva huwasiliana kupitia soketi au API ya RESTful.

Kuelewa Docker

Daemon ya Docker

Kama inavyoonyeshwa kwenye mchoro, daemon huendesha kwenye mashine ya mwenyeji. Mtumiaji haingiliani na seva moja kwa moja, lakini hutumia mteja kwa hili.

Mteja wa Docker

Mteja wa Docker, programu ya kizimbani, ndio kiolesura kikuu cha Docker. Inapokea amri kutoka kwa mtumiaji na kuingiliana na daemon ya docker.

Ndani ya docker

Ili kuelewa ni docker gani ina, unahitaji kujua kuhusu vipengele vitatu:

  • Picha
  • usajili
  • vyombo

Picha

Picha ya Docker ni kiolezo cha kusoma tu. Kwa mfano, picha inaweza kuwa na mfumo wa uendeshaji wa Ubuntu na Apache na programu juu yake. Picha hutumiwa kuunda vyombo. Docker hurahisisha kuunda picha mpya, kusasisha zilizopo, au unaweza kupakua picha iliyoundwa na watu wengine. Picha ni sehemu za muundo wa kizimbani.

Usajili

Usajili wa Docker huhifadhi picha. Kuna sajili za umma na za kibinafsi ambazo unaweza kupakua au kupakia picha. Usajili wa Docker ya umma ni Kitovu cha Docker. Kuna mkusanyiko mkubwa wa picha zilizohifadhiwa hapo. Kama unavyojua, picha zinaweza kuundwa na wewe au unaweza kutumia picha zilizoundwa na wengine. Rejesta ni sehemu ya usambazaji.

Vyombo

Vyombo ni sawa na saraka. Vyombo vina kila kitu ambacho programu inahitaji kufanya kazi. Kila chombo kinaundwa kutoka kwa picha. Vyombo vinaweza kuundwa, kuanza, kusimamishwa, kuhamishwa au kufutwa. Kila chombo kimetengwa na hutoa jukwaa salama la programu. Vyombo ni vipengele vya kazi.

Kwa hivyo Docker inafanyaje kazi?

Hadi sasa tunajua kwamba:

  • tunaweza kuunda picha ambazo programu zetu ziko;
  • tunaweza kuunda vyombo kutoka kwa picha ili kuendesha programu;
  • Tunaweza kusambaza picha kupitia Docker Hub au sajili nyingine ya picha.

Hebu tuone jinsi vipengele hivi vinavyounganishwa.

Je, picha inafanyaje kazi?

Tayari tunajua kuwa picha ni kiolezo cha kusoma pekee ambapo chombo kinaundwa. Kila picha ina seti ya viwango. Docker hutumia mfumo wa faili wa umoja kuchanganya viwango hivi katika picha moja. Mfumo wa faili wa Umoja huruhusu faili na saraka kutoka kwa mifumo tofauti ya faili (matawi tofauti) kuingiliana kwa uwazi, na kuunda mfumo wa faili madhubuti.

Moja ya sababu kwa nini docker ni nyepesi ni kwa sababu hutumia tabaka kama hii. Unapobadilisha picha, kama vile kusasisha programu, safu mpya huundwa. Kwa hivyo, bila kubadilisha picha nzima au kuijenga upya, kama unavyoweza kufanya na mashine ya kawaida, ni safu pekee inayoongezwa au kusasishwa. Na sio lazima kusambaza picha mpya nzima, sasisho pekee ndilo linalosambazwa, na kuifanya iwe rahisi na haraka kusambaza picha.

Katika moyo wa kila picha ni picha ya msingi. Kwa mfano, ubuntu, picha ya msingi ya Ubuntu, au fedora, picha ya msingi ya usambazaji wa Fedora. Unaweza pia kutumia picha kama msingi wa kuunda picha mpya. Kwa mfano, ikiwa una picha ya apache, unaweza kuitumia kama picha ya msingi kwa programu zako za wavuti.

Kumbuka! Docker kawaida huchota picha kutoka kwa usajili wa Docker Hub.

Picha za Docker zinaweza kuunda kutoka kwa picha hizi za msingi; tunaita hatua za kuunda maagizo ya picha hizi. Kila maagizo huunda picha mpya au kiwango. Maelekezo yatakuwa yafuatayo:

  • endesha amri
  • kuongeza faili au saraka
  • kuunda mabadiliko ya mazingira
  • maagizo ya nini cha kukimbia wakati kontena la picha hii linazinduliwa

Maagizo haya yanahifadhiwa kwenye faili Dockerfile. Docker anasoma hii Dockerfile, unapojenga picha, fanya maagizo haya na kurejesha picha ya mwisho.

Usajili wa docker hufanyaje kazi?

Usajili ni ghala la picha za docker. Mara tu picha inapoundwa, unaweza kuichapisha kwa sajili ya umma ya Docker Hub au kwa usajili wako wa kibinafsi.

Ukiwa na mteja wa kizimbani, unaweza kutafuta picha zilizochapishwa tayari na kuzipakua kwenye mashine yako ya kupandikiza ili kuunda vyombo.

Docker Hub hutoa hazina za picha za umma na za kibinafsi. Kutafuta na kupakua picha kutoka kwa hazina za umma kunapatikana kwa kila mtu. Yaliyomo kwenye hifadhi za kibinafsi hayajajumuishwa katika matokeo ya utafutaji. Na wewe tu na watumiaji wako mnaweza kupokea picha hizi na kuunda vyombo kutoka kwao.

Kontena hufanyaje kazi?

Chombo kina mfumo wa uendeshaji, faili za mtumiaji na metadata. Kama tunavyojua, kila chombo kimeundwa kutoka kwa picha. Picha hii inaambia docker kilicho kwenye kontena, ni mchakato gani wa kuanza, kontena inapoanza, na data nyingine ya usanidi. Picha ya Docker inasomwa tu. Wakati docker inapoanzisha kontena, huunda safu ya kusoma/kuandika juu ya picha (kwa kutumia mfumo wa faili wa muungano kama ilivyoelezwa hapo awali) ambamo programu inaweza kuendeshwa.

Nini kinatokea wakati chombo kinapoanza?

Au kwa kutumia programu docker, au kwa kutumia API ya RESTful, mteja wa kizimbani huambia daemon ya docker kuanza kontena.

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

Hebu tuangalie amri hii. Mteja anazinduliwa kwa kutumia amri docker, na chaguo run, ambayo inasema kwamba chombo kipya kitazinduliwa. Mahitaji ya chini ya kuendesha chombo ni sifa zifuatazo:

  • ni picha gani ya kutumia kuunda chombo. Kwa upande wetu ubuntu
  • amri unayotaka kutekeleza wakati kontena imeanzishwa. Kwa upande wetu /bin/bash

Ni nini hufanyika chini ya kofia tunapoendesha amri hii?

Docker, kwa utaratibu, hufanya yafuatayo:

  • inapakua picha ya ubuntu: docker huangalia upatikanaji wa picha ubuntu kwenye mashine ya ndani, na ikiwa haipo, basi ipakue kutoka Kitovu cha Docker. Ikiwa kuna picha, hutumia kuunda chombo;
  • huunda chombo: wakati picha inapokelewa, docker hutumia kuunda chombo;
  • huanzisha mfumo wa faili na kuweka kiwango cha kusoma tu: chombo kinaundwa katika mfumo wa faili na picha imeongezwa kwa kiwango cha kusoma tu;
  • inaanzisha mtandao/daraja: huunda interface ya mtandao ambayo inaruhusu docker kuwasiliana na mashine ya mwenyeji;
  • Kuweka anwani ya IP: hupata na kuweka anwani;
  • Huanzisha mchakato maalum: inazindua programu yako;
  • Huchakata na kutoa matokeo kutoka kwa programu yako: huunganisha na kuweka kumbukumbu za kawaida za ingizo, towe na mtiririko wa hitilafu ili uweze kufuatilia jinsi programu yako inavyofanya kazi.

Sasa una chombo cha kufanya kazi. Unaweza kudhibiti chombo chako, kuingiliana na programu yako. Unapoamua kusimamisha programu, futa chombo.

Teknolojia zilizotumika

Docker imeandikwa katika Go na hutumia huduma zingine za Linux kernel kutekeleza utendakazi hapo juu.

Nafasi za majina

Docker hutumia teknolojia namespaces kuandaa nafasi za kazi zilizotengwa, ambazo tunaziita vyombo. Tunapoanzisha kontena, docker huunda seti ya nafasi za majina kwa chombo hicho.

Hii inaunda safu iliyotengwa, na kila kipengele cha kontena kikiendesha katika nafasi yake ya jina na kutokuwa na ufikiaji wa mfumo wa nje.

Orodha ya baadhi ya nafasi za majina ambazo docker hutumia:

  • pid: kutenganisha mchakato;
  • wavu: kwa kusimamia miingiliano ya mtandao;
  • ipc: kusimamia rasilimali za IPC. (ICP: InterProccess Communication);
  • mnt: kusimamia pointi za mlima;
  • utc: kutenga kizazi cha toleo la kernel na udhibiti (UTC: Mfumo wa kushiriki wakati wa Unix).

Vikundi vya kudhibiti

Docker pia hutumia teknolojia cgroups au vikundi vya kudhibiti. Ufunguo wa kuendesha programu kwa kutengwa ni kutoa tu rasilimali unazotaka kutoa. Hii inahakikisha kwamba vyombo vitakuwa majirani wazuri. Vikundi vya udhibiti vinakuwezesha kushiriki rasilimali zilizopo za vifaa na, ikiwa ni lazima, kuweka mipaka na vikwazo. Kwa mfano, punguza kiasi kinachowezekana cha kumbukumbu kwa chombo.

Mfumo wa Faili ya Muungano

Umoja wa Faili Sysem au UnionFS ni mfumo wa faili unaofanya kazi kwa kuunda tabaka, na kuifanya iwe nyepesi na ya haraka sana. Docker hutumia UnionFS kuunda vizuizi ambavyo chombo hujengwa. Docker inaweza kutumia anuwai kadhaa za UnionFS ikijumuisha: AUFS, btrfs, vfs na DeviceMapper.

Miundo ya Vyombo

Docker inachanganya vipengele hivi kwenye kanga tunayoita umbizo la chombo. Umbizo la msingi linaitwa libcontainer. Docker pia inasaidia umbizo la kontena la jadi kwenye Linux kwa kutumia LXC. Katika siku zijazo, Docker inaweza kutumia fomati zingine za kontena. Kwa mfano, kuunganishwa na Jela za BSD au Kanda za Solaris.

Chanzo: mapenzi.com

Kuongeza maoni