He aha te Docker: he haerenga poto ki te hitori me nga tangohanga taketake

I timata i te 10 o Akuhata i Slurm akoranga ataata Docker, ka tino tātarihia - mai i nga tangohanga taketake ki nga tawhā whatunga.

I roto i tenei tuhinga ka korero tatou mo te hitori o Docker me ona waahanga matua: Image, Cli, Dockerfile. Ko te kauhau mo te hunga katahi ano ka timata, no reira kare pea e pai ki nga kaiwhakamahi mohio. Karekau he toto, he taapiri, he ruku hohonu ranei. Ko nga tino taketake.

He aha te Docker: he haerenga poto ki te hitori me nga tangohanga taketake

He aha te Docker

Me titiro ki te whakamaramatanga o Docker mai i Wikipedia.

He raupaparorohiko a Docker mo te whakaaunoa i te tukunga me te whakahaere i nga tono i roto i nga taiao ipu.

Kaore he mea e marama ana mai i tenei whakamaramatanga. Kaore i te tino marama he aha te tikanga "i roto i nga taiao e tautoko ana i te whakauru ipu". Kia mohio ai, me hoki ano tatou ki tera wa. Me timata tatou ki te waa e kiia nei e ahau ko te "Era Monolithic."

Waa monolithic

Ko te wa monolithic ko te timatanga o te 2000s, i te wa he monolithic nga tono katoa, me te maha o nga whakawhirinaki. He wa roa te whanaketanga. I te wa ano, kaore he maha o nga kaitoro; i mohio katoa matou ki o raatau ingoa me te tirotiro i a raatau. He rite te whakataurite rorirori:

Ko nga kararehe he kararehe kainga. I roto i te wa monolithic, i peratia e matou o matou kaimau he mokai, he mea whakapaipai, he mea poihere, e pupuhi ana i te puehu. A, mo te pai ake o te whakahaere rauemi, i whakamahia e matou te mariko: i tango matou i tetahi tūmau ka tapahia ki etahi miihini mariko, na reira ka noho wehe te taiao.

Ko nga punaha mariko e ahu mai ana i te Hypervisor

Kua rongo pea nga tangata katoa mo nga punaha mariko: VMware, VirtualBox, Hyper-V, Qemu KVM, me etahi atu Ka whakaratohia e ratou te wehewehe tono me te whakahaere rauemi, engari kei a raatau ano nga ngoikoretanga. Hei mahi mariko, me hiahia koe ki te hypervisor. A ko te hypervisor he rauemi kei runga ake. A ko te miihini mariko tonu he koroke katoa - he ahua taumaha kei roto he punaha whakahaere, Nginx, Apache, me MySQL pea. He nui te ahua me te miihini mariko kaore e pai ki te whakahaere. Ko te mutunga, he puhoi te mahi me nga miihini mariko. Hei whakaoti i tenei raruraru, i hangaia nga punaha mariko i te taumata kernel.

Nga punaha mariko taumata-kernel

Ko te mariko taumata-kernel e tautokohia ana e nga punaha OpenVZ, Systemd-nspawn, LXC. Ko tetahi tauira tino pai o taua mahi mariko ko LXC (Linux Containers).

Ko te LXC he punaha mariko taumata-whakahaere mo te whakahaere i nga wa maha o te punaha whakahaere Linux i runga i te pona kotahi. Kaore a LXC e whakamahi i nga miihini mariko, engari ka hangaia he taiao mariko me tana ake waahi tukanga me te puranga whatunga.

Ko te tikanga ka hangaia e LXC nga ipu. He aha te rereketanga o nga miihini mariko me nga ipu?

He aha te Docker: he haerenga poto ki te hitori me nga tangohanga taketake

Ko te ipu kaore e pai mo te wehe i nga tukanga: ka kitea nga whakaraeraetanga i roto i nga punaha mariko i te taumata kernel e taea ai e ratou te mawhiti mai i te ipu ki te kaihautu. Na reira, ki te hiahia koe ki te wehe i tetahi mea, he pai ake te whakamahi i te miihini mariko.

Ko nga rereketanga i waenga i te mariko me te whakaurunga ka taea te kite i te hoahoa.
He kaitirotiro taputapu, he kaitirotiro i runga ake o te OS, me nga ipu.

He aha te Docker: he haerenga poto ki te hitori me nga tangohanga taketake

He pai nga kaitirotiro taputapu ki te hiahia koe ki te wehe i tetahi mea. Na te mea ka taea te wehe i te taumata o nga wharangi mahara me nga tukatuka.

He hypervisors hei kaupapa, kei reira nga ipu, ka korero ano tatou mo ratou. Karekau he hypervisor a nga punaha ipu, engari he Miihini Ipu hei hanga me te whakahaere ipu. He maama ake tenei mea, na te mahi me te matua he iti ake te upoko, kaore rawa ranei.

He aha te mea e whakamahia ana mo te whakakii i te taumata kernel

Ko nga hangarau matua e taea ai e koe te hanga ipu kua wehea mai i etahi atu tukanga ko nga Mokowā Ingoa me nga Rōpū Mana.

Mokowāingoa: PID, Whatunga, Maunga me te Kaiwhakamahi. He maha ake, engari mo te ngawari o te maarama ka aro tatou ki enei.

PID Mokowāingoa whakawhāiti ngā tukanga. Ina, hei tauira, ka hangaia e matou he Mokowāingoa PID me te whakatakoto i tetahi tukanga ki reira, ka noho ki te PID 1. I te nuinga o nga wa i roto i nga punaha PID 1 he systemd, init ranei. No reira, ka tuu he tukanga ki roto i te mokowāingoa hou, ka whiwhi hoki ia i te PID 1.

Mokowāingoa Whatunga ka taea e koe te whakawhāiti/whakawehe i te whatunga me te whakanoho i a koe ake atanga ki roto. Ko te Maunga he herenga punaha konae. Kaiwhakamahi—te aukati i nga kaiwhakamahi.

Rōpū Mana: Mahara, CPU, IOPS, Whatunga - tata ki te 12 nga tautuhinga katoa. Ki te kore ka kiia ano he Cgroups (“C-rōpū”).

Ka whakahaerehia e nga Rōpū Whakahaere nga rauemi mo te ipu. Na roto i nga Rōpū Whakahaere ka taea e matou te kii kia kaua te ipu e pau ake i te nui o nga rauemi.

Kia mahi katoa nga ipu, ka whakamahia etahi atu hangarau: Nga Mahinga, Te kape-i-tuhi me etahi atu.

Ko nga kaha ko te wa e korero ana tatou ki tetahi tukanga he aha te mea ka taea, kaore hoki e taea. I te taumata kernel, he maheremoka noa enei me nga tawhā maha. Hei tauira, kei te kaiwhakamahi pakiaka nga mana katoa ka taea e ia te mahi i nga mea katoa. Ka taea e te tūmau wa te huri i te wa o te punaha: kei a ia nga kaha ki runga i te Time Capsule, a koinei. Ma te whakamahi i nga mana, ka taea e koe te whirihora i nga here mo nga tukanga, na reira ka tiakina koe.

Ko te punaha kape-i-tuhi ka taea e maatau te mahi me nga whakaahua Docker me te whakamahi pai ake.

I tenei wa kei a Docker nga take hototahi me Cgroups v2, no reira ka aro nui tenei tuhinga ki nga Cgroups v1.

Engari kia hoki ki te hitori.

I te wa i puta mai ai nga punaha mariko ki te taumata kernel, ka tiimata te whakamahi kaha. I ngaro te upoko o te hypervisor, engari i mau tonu etahi raru:

  • nga whakaahua nui: ka peia e ratou he punaha whakahaere, whare pukapuka, he paihere o nga momo raupaparorohiko rereke ki te OpenVZ kotahi, a, i te mutunga ka puta tonu te ahua ki te tino nui;
  • Karekau he paerewa noa mo te takai me te tuku, no reira kei te mau tonu te raru o te whakawhirinaki. He waahi ka whakamahia e nga waahanga waehere e rua te whare pukapuka kotahi, engari he rereke nga waahanga. He raruraru pea kei waenganui i a raua.

Hei whakaoti i enei raruraru katoa, kua tae mai te waa e whai ake nei.

Waa ipu

I te taenga mai o te Era of Containers, ka huri te whakaaro o te mahi ki a ratou:

  • Kotahi te tukanga - kotahi ipu.
  • Ka tukuna e matou nga whakawhirinaki katoa e hiahiatia ana e te tukanga ki tana ipu. Me tapahi nga monoliths ki roto i nga ratonga miihini.
  • Ko te iti ake o te ahua, ko te pai ake - he iti ake nga whakaraeraetanga ka taea, ka tere ake te huri, me etahi atu.
  • He wa poto noa nga tauira.

Kia mahara ki taku korero mo nga kararehe me nga kararehe? I mua, he rite nga ahuatanga ki nga kararehe kararehe, engari inaianei kua rite ki te kararehe. I mua, he monolith - kotahi te tono. Inaianei kua 100 nga miihini miihini, 100 nga ipu. Ko etahi ipu ka 2-3 pea nga tauira. Ka iti ake te mea nui mo tatou ki te whakahaere i ia ipu. Ko te mea nui ki a matou ko te waatea o te ratonga ake: he aha te mahi a tenei huinga ipu. Ka huri tenei i nga huarahi ki te aroturuki.

I te tau 2014-2015, i puāwai a Docker - te hangarau ka korerohia e tatou inaianei.

I hurihia e Docker te whakaaro me te kohinga tono paerewa. Ma te whakamahi i te Docker, ka taea e taatau te kiki i tetahi tono, tukuna ki te putunga, tango mai i reira, ka toha.

Ka tukuna e matou nga mea katoa e hiahiatia ana ki roto i te ipu Docker, na reira ka whakatauhia te raru o te whakawhirinaki. Ka whakamanahia e Docker te whakaputa. Ki taku whakaaro he maha nga taangata kua pa ki te koretake: ka pai nga mea katoa mo koe, ka pana koe ki te whakaputa, ka mutu te mahi. Ki a Docker ka ngaro tenei raru. Mena ka timata to ipu Docker me te mahi i nga mea e tika ana kia mahia, katahi ka nui te tupono ka tiimata te mahi ka mahia ano ki reira.

He rerekee mo runga

I nga wa katoa he tautohetohe mo nga utu. Ko etahi e whakapono ana kaore a Docker e kawe i etahi atu kawenga, na te mea ka whakamahia e ia te kernel Linux me ona mahinga katoa e tika ana mo te whakauru. Ka rite ki, "mehemea ka kii koe kei runga ake a Docker, na ko te kernel Linux kei runga."

I tetahi atu taha, ki te hohonu koe, he maha nga mea kei Docker, me te totoro, ka taea te kii kei runga ake.

Ko te tuatahi ko te mokowāingoa PID. Ina tukuna e matou he tukanga i roto i te waahi ingoa, ka tohua te PID 1. I te wa ano, ko tenei tukanga he PID ano, kei runga i te ingoa ingoa o te ope, kei waho o te ipu. Hei tauira, i whakarewahia e matou a Nginx i roto i tetahi ipu, ka huri ko PID 1 (te tukanga matua). A i runga i te kaihautu he PID 12623. A he uaua ki te kii he aha te nui o te utu.

Ko te mea tuarua ko Cgroups. Me mau Cgroups ma te mahara, ara, te kaha ki te whakawhāiti i te mahara o te ipu. Ina whakahohea, ka whakahohehia nga porotiti me te kaute mahara: me maarama te kernel ki te maha o nga wharangi kua tohatohahia me te maha kei te waatea tonu mo tenei ipu. He nui pea tenei, engari kaore au i kite i nga rangahau tika mo te paanga o te mahi. A ko ahau ano kaore i mohio ko te tono e rere ana i Docker i ohorere te mate o te mahi.

Me tetahi atu korero mo te mahi. Ka tukuna etahi tawhā kernel mai i te kaihautu ki te ipu. Ina koa, etahi tawhā whatunga. Na reira, ki te hiahia koe ki te whakahaere i tetahi mea mahi nui i Docker, hei tauira, tetahi mea ka kaha te whakamahi i te whatunga, katahi ka hiahia koe ki te whakatika i enei tawhā. Ko etahi nf_conntrack, hei tauira.

Mo te kaupapa Docker

He maha nga waahanga a Docker:

  1. Ko Docker Daemon te Miihini Ipu kotahi; ka whakarewa ipu.
  2. Ko Docker CII he taputapu whakahaere Docker.
  3. Dockerfile - nga tohutohu me pehea te hanga whakaahua.
  4. Atahanga — te ahua i hurihia ai te ipu.
  5. Kaiwhiwhi.
  6. Ko te rehita Docker he putunga whakaahua.

Ko te ahua o te ahua penei:

He aha te Docker: he haerenga poto ki te hitori me nga tangohanga taketake

Ka rere a Docker daemon i runga i te Docker_host me te whakarewa i nga ipu. He Kiritaki e tuku whakahau: hanga te ahua, tango i te ahua, whakarewahia te ipu. Ka haere a Docker daemon ki te rehita ka mahia. Ka taea e te kiritaki Docker te uru atu ki nga waahi e rua (ki te turanga Unix) me te TCP mai i tetahi kaihautu mamao.

Kia haere ma ia waahanga.

Docker daemon - koinei te waahanga tūmau, ka mahi i runga i te miihini manaaki: ka tango whakaahua me te whakarewa i nga ipu mai i a raatau, ka hanga he whatunga i waenga i nga ipu, ka kohia nga raarangi. Ka kii ana tatou "hangaia he ahua," kei te mahi ano te rewera.

Docker CLI - Ko te waahanga o te kiritaki Docker, he taputapu whakamarie mo te mahi me te daemon. Ka whakahoki ano ahau, ka taea te mahi ehara i te rohe anake, engari i runga ano i te whatunga.

Nga tono taketake:

docker ps - whakaatu ipu kei te rere i runga i te kaihautu Docker.
whakaahua docker - whakaatu whakaahua kua tikiakehia i te rohe.
rapu docker <> - rapu mo tetahi ahua i roto i te rehita.
docker pull <> - tango whakaahua mai i te rehita ki te miihini.
hanga docker < > - kohia te whakaahua.
docker run <> - whakarewahia te ipu.
docker rm <> - tangohia te ipu.
rangitaki docker <> - rangitaki ipu
docker start/stop/restart <> - mahi tahi me te ipu

Mena ka mohio koe ki enei whakahau me te maia ki te whakamahi, whakaarohia koe 70% matatau ki Docker i te taumata kaiwhakamahi.

Dockerfile - nga tohutohu mo te hanga pikitia. Tata ki ia whakahau tohutohu he paparanga hou. Ka titiro tatou ki tetahi tauira.

He aha te Docker: he haerenga poto ki te hitori me nga tangohanga taketake

Koinei te ahua o te Dockerfile: ko nga whakahau kei te taha maui, ko nga tautohetohe kei te taha matau. Ko ia whakahau kei konei (ka tuhia ki te Dockerfile) ka hanga he paparanga hou ki te Atahanga.

Ahakoa te titiro ki te taha maui, ka tino marama koe ki nga mea kei te tupu. Ka kii matou: "hangahia he kōpaki mo matou" - he paparanga kotahi tenei. "Whakamahia te kōpaki" he paparanga ano, me etahi atu. Ko te keke paparanga ka ngawari ake te ora. Mena ka hangaia e ahau tetahi atu Dockerfile ka huri i tetahi mea i te rarangi whakamutunga - ka whakahaerehia e ahau tetahi mea ke atu i te "python" "main.py", ka whakauru ranei i nga whakawhirinaki mai i tetahi atu konae - ka whakamahia ano nga papa o mua hei keteroki.

image - ko te takai ipu tenei; ka whakarewahia nga ipu mai i te ahua. Mena ka titiro tatou ki a Docker mai i te tirohanga o te kaiwhakahaere kete (mehemea kei te mahi tahi tatou me nga putea deb, rpm ranei), katahi ko te ahua he kete rpm. Na roto i te yum install ka taea e taatau te whakauru i te tono, te muku, ka kitea i roto i te putunga, ka tango. He rite tonu ki konei: ka whakarewahia nga ipu mai i te ahua, ka rongoa ki te rehita Docker (he rite ki te yum, i roto i te putunga putunga), a kei ia ahua he tohu SHA-256, he ingoa me tetahi tohu.

Ka hangaia te ahua i runga i nga tohutohu mai i te Dockerfile. Ka hangaia e ia tohutohu mai i te Dockerfile he paparanga hou. Ka taea te whakamahi ano i nga papa.

Rehita Docker he putunga whakaahua Docker. He rite ki te OS, he rehita paerewa a Docker - dockerhub. Engari ka taea e koe te hanga i a koe ake putunga, to rehita Docker ake.

ipu - he aha i whakarewahia mai i te ahua. I hangaia e matou he ahua i runga i nga tohutohu mai i te Dockerfile, katahi ka whakarewahia mai i tenei ahua. Ka wehea tenei ipu mai i etahi atu ipu me mau nga mea katoa e tika ana kia mahi te tono. I roto i tenei take, kotahi ipu - kotahi te tukanga. Ka pa ana me mahi e koe nga tikanga e rua, engari he rereke tenei ki te whakaaro a Docker.

Ko te whakaritenga "kotahi ipu, kotahi te tukanga" e pa ana ki te Mokowā Ingoa PID. Ka timata te mahi me te PID 1 ki te Mokowāingoa, mena ka mate ohorere, ka mate katoa te ipu. Mēnā e rua ngā hātepe e rere ana i reira: kei te ora tetahi, kua mate tetahi, ka ora tonu te ipu. Engari he patai tenei mo nga Tikanga Pai, ka korerohia e maatau i etahi atu rauemi.

Hei ako i nga ahuatanga me te hotaka katoa o te akoranga i roto i nga korero taipitopito, me whai i te hono: “akoranga ataata Docker".

Kaituhi: Marcel Ibraev, he kaiwhakahaere Kubernetes whaimana, he tohunga miihini i Southbridge, he kaikorero me te kaiwhakawhanake i nga akoranga Slurm.

Source: will.com

Tāpiri i te kōrero