Kodi Docker ndi chiyani: ulendo wachidule m'mbiri komanso zoyambira

Inayamba pa Ogasiti 10 ku Slurm Maphunziro avidiyo a Docker, momwe timasanthula kwathunthu - kuchokera kuzinthu zoyambira kupita ku magawo a netiweki.

M'nkhaniyi tikambirana za mbiri ya Docker ndi zake zazikulu: Image, Cli, Dockerfile. Nkhaniyi idapangidwira oyamba kumene, kotero sizingatheke kukhala ndi chidwi ndi ogwiritsa ntchito odziwa zambiri. Sipadzakhala magazi, zowonjezera kapena kumizidwa mozama. Zofunikira kwambiri.

Kodi Docker ndi chiyani: ulendo wachidule m'mbiri komanso zoyambira

Kodi Docker ndi chiyani

Tiyeni tiwone tanthauzo la Docker kuchokera ku Wikipedia.

Docker ndi pulogalamu yodzipangira okha kutumiza ndi kuyang'anira ntchito m'malo okhala ndi zida.

Palibe chodziwika bwino kuchokera ku tanthauzo ili. Sizikudziwika kuti "m'malo omwe amathandizira kusungitsa" kumatanthauza chiyani. Kuti tidziwe, tiyeni tibwerere m’mbuyo. Tiyeni tiyambe ndi nthawi yomwe ndimayitcha "Monolithic Era".

Nthawi ya monolithic

Nthawi ya monolithic ndi koyambirira kwa zaka za m'ma 2000, pamene ntchito zonse zinali za monolithic, ndi gulu lodalira. Chitukuko chinatenga nthawi yayitali. Panthawi imodzimodziyo, panalibe ma seva ambiri; tonsefe timawadziwa ndi mayina ndi kuwayang'anira. Pali kufananitsa koseketsa kotere:

Ziweto ndi zoweta. M'nthawi ya monolithic, tinkachita ma seva athu ngati ziweto, zokongoletsedwa ndi zokondedwa, ndikutulutsa fumbi. Ndipo pakuwongolera bwino kwazinthu, tidagwiritsa ntchito virtualization: tidatenga seva ndikuidula kukhala makina angapo, ndikuwonetsetsa kuti chilengedwe chizikhala chodzipatula.

Hypervisor-based virtualization systems

Aliyense mwina adamvapo za machitidwe a virtualization: VMware, VirtualBox, Hyper-V, Qemu KVM, ndi zina zotero. Amapereka kudzipatula kwa ntchito ndi kasamalidwe kazinthu, koma amakhalanso ndi zovuta. Kuti muchite virtualization, muyenera hypervisor. Ndipo hypervisor ndi chida chapamwamba. Ndipo makina enieniwo nthawi zambiri amakhala colossus - chithunzi cholemera chokhala ndi makina ogwiritsira ntchito, Nginx, Apache, ndipo mwina MySQL. Chithunzicho ndi chachikulu ndipo makina enieniwo ndi ovuta kugwira ntchito. Zotsatira zake, kugwira ntchito ndi makina enieni kumatha kuchedwa. Kuti athetse vutoli, machitidwe a virtualization adapangidwa pamlingo wa kernel.

Machitidwe a kernel-level virtualization

Kuwonekera kwa Kernel-level kumathandizidwa ndi OpenVZ, Systemd-nspawn, LXC machitidwe. Chitsanzo chochititsa chidwi cha kusinthika kotereku ndi LXC (Linux Containers).

LXC ndi njira yogwiritsira ntchito makina ogwiritsira ntchito makina ogwiritsira ntchito maulendo angapo a Linux pa node imodzi. LXC sigwiritsa ntchito makina enieni, koma imapanga malo enieni okhala ndi malo akeake ndi ma network.

Kwenikweni LXC imapanga zotengera. Kodi pali kusiyana kotani pakati pa makina enieni ndi makontena?

Kodi Docker ndi chiyani: ulendo wachidule m'mbiri komanso zoyambira

Chidebecho sichoyenera kudzipatula: zofooka zimapezeka m'makina a virtualization pamlingo wa kernel zomwe zimawalola kuti athawe m'chidebe kupita kwa wolandira. Choncho, ngati mukufuna kudzipatula chinachake, ndi bwino kugwiritsa ntchito makina pafupifupi.

Kusiyana pakati pa virtualization ndi containerization zitha kuwoneka pazithunzi.
Pali ma hypervisors a hardware, ma hypervisors pamwamba pa OS, ndi zotengera.

Kodi Docker ndi chiyani: ulendo wachidule m'mbiri komanso zoyambira

Ma hypervisors a Hardware ndi abwino ngati mukufunadi kudzipatula. Chifukwa ndizotheka kudzipatula pamlingo wamasamba okumbukira ndi mapurosesa.

Pali ma hypervisors ngati pulogalamu, ndipo pali zotengera, ndipo tikambirananso za iwo. Machitidwe a Containerization alibe hypervisor, koma pali Container Engine yomwe imapanga ndikuwongolera zotengera. Chinthu ichi ndi chopepuka kwambiri, kotero chifukwa chogwira ntchito ndi pachimake chimakhala chochepa kwambiri kapena palibe.

Zomwe zimagwiritsidwa ntchito pakuyika zida pamlingo wa kernel

Ukadaulo waukulu womwe umakulolani kuti mupange chidebe chosiyana ndi njira zina ndi Magulu Oyang'anira Maina ndi Magulu.

Malo a mayina: PID, Networking, Mount ndi User. Palinso zina, koma kuti timvetsetse tiyang'ana pa izi.

PID Namespace malire njira. Pamene, mwachitsanzo, timapanga PID Namespace ndikuyika ndondomeko pamenepo, imakhala ndi PID 1. Kawirikawiri mu machitidwe a PID 1 ndi systemd kapena init. Chifukwa chake, tikayika njira mumalo atsopano, imalandiranso PID 1.

Networking Namespace imakupatsani mwayi wochepetsera / kupatula netiweki ndikuyika zolumikizira zanu mkati. Mount ndi malire a fayilo. Kuletsa kwa ogwiritsa ntchito.

Magulu Owongolera: Memory, CPU, IOPS, Network - pafupifupi zosintha 12 zonse. Apo ayi amatchedwanso Magulu ("C-magulu").

Magulu Oyang'anira amayang'anira zothandizira pa kontena. Kupyolera mu Magulu Olamulira tikhoza kunena kuti chidebecho sichiyenera kuwononga ndalama zambiri.

Kuti zotengera zigwire ntchito mokwanira, matekinoloje owonjezera amagwiritsidwa ntchito: Luso, Copy-on-write ndi ena.

Luso ndi pamene tiwuza ndondomeko zomwe ingathe kuchita ndi zomwe sizingathe kuchita. Pamlingo wa kernel, awa ndi ma bitmaps omwe ali ndi magawo ambiri. Mwachitsanzo, wogwiritsa ntchito mizu ali ndi mwayi wokwanira ndipo amatha kuchita chilichonse. Seva ya nthawi imatha kusintha nthawi ya dongosolo: ili ndi mphamvu pa Time Capsule, ndipo ndizomwezo. Pogwiritsa ntchito mwayi, mutha kusintha zoletsa za njira, ndikudziteteza.

Dongosolo la Copy-on-write limatilola kugwira ntchito ndi zithunzi za Docker ndikuzigwiritsa ntchito bwino.

Docker pakadali pano ali ndi zovuta zofananira ndi Cgroups v2, chifukwa chake nkhaniyi imayang'ana kwambiri Magulu v1.

Koma tiyeni tibwerere ku mbiriyakale.

Pamene machitidwe a virtualization adawonekera pamlingo wa kernel, adayamba kugwiritsidwa ntchito mwakhama. Pamwamba pa hypervisor adasowa, koma mavuto ena adatsalira:

  • zithunzi zazikulu: amakankhira makina opangira, malaibulale, gulu la mapulogalamu osiyanasiyana mu OpenVZ yomweyo, ndipo pamapeto pake chithunzicho chimakhala chachikulu;
  • Palibe muyezo wabwinobwino pakuyika ndi kutumiza, chifukwa chake vuto la kudalira limakhalabe. Pali zochitika pamene zidutswa ziwiri za code zimagwiritsa ntchito laibulale imodzi, koma ndi mitundu yosiyana. Pakhoza kukhala mkangano pakati pawo.

Kuthetsa mavuto onsewa, nyengo yotsatira yafika.

Nthawi ya Container

Pamene Era of Containers idafika, malingaliro ogwirira ntchito nawo adasintha:

  • Njira imodzi - chidebe chimodzi.
  • Timapereka zodalira zonse zomwe ndondomeko ikufunikira ku chidebe chake. Izi zimafuna kudula monoliths kukhala ma microservices.
  • Chithunzi chaching'ono, chabwino - pali zofooka zochepa zomwe zingatheke, zimatuluka mofulumira, ndi zina zotero.
  • Zochitikazo zimakhala zosavuta.

Mukukumbukira zomwe ndinanena zokhudza ziweto ndi ng'ombe? Poyamba, zochitika zinali ngati zoweta, koma tsopano zakhala ngati ng'ombe. Poyamba, panali monolith - ntchito imodzi. Tsopano ndi ma microservices 100, zotengera 100. Zotengera zina zitha kukhala ndi zofananira 2-3. Zimakhala zocheperako kuti tiziwongolera chotengera chilichonse. Chofunikira kwambiri kwa ife ndi kupezeka kwa ntchito yokhayo: zomwe zida izi zimachita. Izi zikusintha njira zowunikira.

Mu 2014-2015, Docker idakula - ukadaulo womwe tikambirana pano.

Docker adasintha filosofi ndi kuyika kokhazikika kwa ntchito. Pogwiritsa ntchito Docker, titha kuyika pulogalamu, kuitumiza kumalo osungirako, kutsitsa kuchokera pamenepo, ndikuyiyika.

Timayika zonse zomwe tingafune mu chidebe cha Docker, kuti vuto lodalira limathetsedwa. Docker imatsimikizira kuberekana. Ndikuganiza kuti anthu ambiri akumanapo ndi kusabereka: chilichonse chimakugwirirani ntchito, mumachikankhira kuti chipangidwe, ndipo chimasiya kugwira ntchito. Ndi Docker vutoli limatha. Ngati chidebe chanu cha Docker chiyamba ndikuchita zomwe ikuyenera kuchita, ndiye kuti ndizotheka kuti iyamba kupanga ndikuchita zomwezo pamenepo.

Kuchuluka kwa shuga m'magazi

Nthawi zonse pamakhala mikangano pazambiri. Anthu ena amakhulupirira kuti Docker samanyamula katundu wowonjezera, chifukwa amagwiritsa ntchito kernel ya Linux ndi njira zake zonse zofunika pakuyika zida. Monga, "ngati munganene kuti Docker ili pamwamba, ndiye kuti Linux kernel ili pamwamba."

Kumbali ina, ngati mupita mwakuya, pali zinthu zingapo ku Docker zomwe, ndi kutambasula, zitha kunenedwa kuti ndizokwera.

Choyamba ndi PID namespace. Tikayika ndondomeko mu malo a mayina, amapatsidwa PID 1. Panthawi imodzimodziyo, njirayi ili ndi PID ina, yomwe ili pa malo osungiramo mayina, kunja kwa chidebe. Mwachitsanzo, tidayambitsa Nginx mu chidebe, idakhala PID 1 (master process). Ndipo pa wolandirayo ali ndi PID 12623. Ndipo n'zovuta kunena kuti ndi zochuluka bwanji.

Chinthu chachiwiri ndi Cgroups. Tiyeni titenge Cgroups pokumbukira, ndiye kuti, kuthekera kochepetsa kukumbukira chidebe. Ikayatsidwa, zowerengera ndi zowerengera zokumbukira zimayatsidwa: kernel ikuyenera kumvetsetsa kuti ndi masamba angati omwe aperekedwa komanso ndi angati omwe adakali aulere pachidebechi. Izi mwina ndizovuta, koma sindinawonepo kafukufuku wolondola wa momwe zimakhudzira magwiridwe antchito. Ndipo ine sindinazindikire kuti ntchito yomwe ikugwira ntchito ku Docker mwadzidzidzi idawonongeka kwambiri.

Ndipo cholemba chinanso chokhudza magwiridwe antchito. Magawo ena a kernel amaperekedwa kuchokera ku nkhokwe kupita ku chidebe. Makamaka, magawo ena amtaneti. Chifukwa chake, ngati mukufuna kuyendetsa china chake chapamwamba ku Docker, mwachitsanzo, china chake chomwe chidzagwiritse ntchito maukonde, ndiye kuti muyenera kusintha magawo awa. Ena nf_contrack, mwachitsanzo.

Za lingaliro la Docker

Docker imakhala ndi zigawo zingapo:

  1. Docker Daemon ndi injini ya Container yomweyi; amatsegula makontena.
  2. Docker CII ndi chida chowongolera Docker.
  3. Dockerfile - malangizo amomwe mungapangire chithunzi.
  4. Chithunzi - chithunzi chomwe chidebecho chatulutsidwa.
  5. Chidebe.
  6. Docker registry ndi malo osungira zithunzi.

Mwadongosolo zikuwoneka motere:

Kodi Docker ndi chiyani: ulendo wachidule m'mbiri komanso zoyambira

Daemon ya Docker imayenda pa Docker_host ndikuyambitsa zotengera. Pali kasitomala yemwe amatumiza malamulo: pangani chithunzicho, tsitsani chithunzicho, yambitsani chidebecho. Docker daemon amapita ku registry ndikuwapha. Makasitomala a Docker amatha kulumikizana kwanuko (ku socket ya Unix) komanso kudzera pa TCP kuchokera kwa omwe ali kutali.

Tiyeni tidutse gawo lililonse.

Docker daemon - ili ndi gawo la seva, limagwira ntchito pamakina osungira: kutsitsa zithunzi ndikuyambitsa zotengera kuchokera kwa iwo, kupanga maukonde pakati pa zotengera, kusonkhanitsa mitengo. Tikamanena kuti β€œpangani chifaniziro,” chiwanda chikuchitanso zimenezo.

Docker CLI - Gawo la kasitomala wa Docker, chida chothandizira kuti mugwire ntchito ndi daemon. Ndikubwereza, sizingagwire ntchito kokha kwanuko, komanso pa intaneti.

Malamulo oyambira:

docker ps - onetsani zotengera zomwe zikuyenda pa Docker host host.
zithunzi za docker - zikuwonetsa zithunzi zomwe zidatsitsidwa kwanuko.
kusaka kwa docker <> - fufuzani chithunzi mu registry.
docker kukoka <> - tsitsani chithunzi kuchokera ku registry kupita kumakina.
kupanga docker < > - sonkhanitsani chithunzicho.
docker run <> - yambitsani chidebecho.
docker rm <> - chotsani chidebecho.
zipika za docker <> - zipika za chidebe
docker kuyamba / kuyimitsa / kuyambitsanso <> - kugwira ntchito ndi chidebe

Ngati mumadziwa bwino malamulowa ndikudalira kuzigwiritsa ntchito, dzioneni kuti ndinu odziwa 70% ku Docker pamlingo wa ogwiritsa ntchito.

Dockerfile - malangizo opangira chithunzi. Pafupifupi lamulo lililonse la malangizo ndi gawo latsopano. Tiyeni tione chitsanzo.

Kodi Docker ndi chiyani: ulendo wachidule m'mbiri komanso zoyambira

Izi ndi zomwe Dockerfile imawoneka: malamulo kumanzere, mikangano kumanja. Lamulo lililonse lomwe lili pano (ndipo limalembedwa mu Dockerfile) limapanga gawo latsopano mu Image.

Ngakhale kuyang'ana kumanzere, mukhoza kumvetsa zomwe zikuchitika. Timati: "tipangireni chikwatu" - ichi ndi gawo limodzi. "Pangani chikwatu kugwira ntchito" ndi wosanjikiza wina, ndi zina zotero. Keke yosanjikiza imapangitsa moyo kukhala wosavuta. Ngati ndipanga Dockerfile ina ndikusintha china pamzere womaliza - ndikuyendetsa china osati "python" "main.py", kapena kuyika zodalira kuchokera ku fayilo ina - ndiye zigawo zam'mbuyo zidzagwiritsidwanso ntchito ngati posungira.

Image - Uku ndi kuyika kwa zidebe; zotengera zimatulutsidwa kuchokera pachithunzichi. Ngati tiyang'ana Docker kuchokera kumbali ya woyang'anira phukusi (monga kuti tikugwira ntchito ndi deb kapena rpm phukusi), ndiye kuti chithunzicho ndi phukusi la rpm. Kupyolera mu yum install titha kuyika pulogalamuyo, kuichotsa, kuipeza m'nkhokwe, ndikutsitsa. Zili zofanana apa: zotengera zimatulutsidwa kuchokera pachithunzichi, zimasungidwa mu registry ya Docker (zofanana ndi yum, m'malo osungirako), ndipo chithunzi chilichonse chili ndi SHA-256 hash, dzina ndi tag.

Chithunzicho chimamangidwa molingana ndi malangizo ochokera ku Dockerfile. Malangizo aliwonse ochokera ku Dockerfile amapanga wosanjikiza watsopano. Zigawo zitha kugwiritsidwanso ntchito.

Docker registry ndi malo osungirako zithunzi a Docker. Zofanana ndi OS, Docker ili ndi zolembera zapagulu - dockerhub. Koma mutha kupanga zosungira zanu, registry yanu ya Docker.

Chotsitsa - zomwe zimayambitsidwa kuchokera pachithunzichi. Tidapanga chithunzi molingana ndi malangizo ochokera ku Dockerfile, kenako timachiyambitsa kuchokera pachithunzichi. Chidebechi ndi chosiyana ndi zotengera zina ndipo chiyenera kukhala ndi zonse zofunika kuti pulogalamuyo igwire ntchito. Pankhaniyi, chidebe chimodzi - ndondomeko imodzi. Zimachitika kuti muyenera kuchita njira ziwiri, koma izi ndizosiyana ndi malingaliro a Docker.

Chofunikira cha "chidebe chimodzi, njira imodzi" chikugwirizana ndi PID Namespace. Njira yokhala ndi PID 1 ikayamba mu Namespace, ikafa mwadzidzidzi, ndiye kuti chidebe chonsecho chimafanso. Ngati njira ziwiri zikuyenda pamenepo: imodzi ili yamoyo ndipo ina yafa, ndiye kuti chidebecho chikhalabe ndi moyo. Koma ili ndi funso la Best Practices, tidzakambirana za iwo muzinthu zina.

Kuti muphunzire zambiri zamaphunzirowa komanso pulogalamu yonse yamaphunzirowa, chonde tsatirani ulalo: β€œMaphunziro avidiyo a Docker".

Wolemba: Marcel Ibraev, woyang'anira wovomerezeka wa Kubernetes, katswiri woyeserera ku Southbridge, wokamba nkhani komanso woyambitsa maphunziro a Slurm.

Source: www.habr.com

Kuwonjezera ndemanga