Kini Docker: itan kukuru ati awọn abstractions ipilẹ

Oṣu Kẹjọ Ọjọ 10 ni Slurm bẹrẹ Docker fidio dajudaju, ninu eyiti a ṣe itupalẹ rẹ patapata - lati awọn abstractions ipilẹ si awọn ipilẹ nẹtiwọki.

Ninu nkan yii, a yoo sọrọ nipa itan-akọọlẹ Docker ati awọn abstractions akọkọ rẹ: Aworan, Cli, Dockerfile. Iwe-ẹkọ naa jẹ apẹrẹ fun awọn olubere, nitorinaa ko ṣeeṣe lati jẹ anfani si awọn olumulo ti o ni iriri. Nibẹ ni yio je ko si ẹjẹ, ÀFIKÚN ati jin omiwẹ. Awọn ipilẹ pupọ.

Kini Docker: itan kukuru ati awọn abstractions ipilẹ

Kí ni Docker

Jẹ ki a wo itumọ Docker lati Wikipedia.

Docker jẹ sọfitiwia fun adaṣe adaṣe ati iṣakoso ti awọn ohun elo ni awọn agbegbe ti a fi sinu apoti.

Ko si ohun ti o han gbangba lati itumọ yii. Paapaa koyewa kini “ni awọn agbegbe pẹlu atilẹyin apoti” tumọ si. Lati loye, jẹ ki a pada sẹhin ni akoko. Jẹ ki a bẹrẹ pẹlu akoko, eyiti Mo pe ni majemu ni “akoko Monolithic”.

Monolithic akoko

Akoko monolithic jẹ ibẹrẹ 2000s, nigbati gbogbo awọn ohun elo jẹ monolithic, pẹlu opo ti awọn igbẹkẹle. Idagbasoke naa gba akoko pipẹ. Ni akoko kanna, ko si ọpọlọpọ awọn olupin, gbogbo wa mọ wọn nipa orukọ ati abojuto wọn. Ifiwera alarinrin yii wa:

Awọn ohun ọsin jẹ ohun ọsin. Ni akoko monolithic, a ṣe itọju awọn olupin wa bi awọn ohun ọsin, ti a ṣe akiyesi ati ti o ni itara, awọn patikulu eruku ti fẹ. Ati fun iṣakoso awọn orisun to dara julọ, wọn lo agbara agbara: wọn mu olupin kan ati rii sinu awọn ẹrọ foju pupọ, nitorinaa pese ipinya agbegbe.

Awọn ọna ṣiṣe ti o da lori Hypervisor

Gbogbo eniyan ti jasi ti gbọ nipa awọn ọna ṣiṣe agbara: VMware, VirtualBox, Hyper-V, Qemu KVM, ati bẹbẹ lọ Wọn pese ipinya ohun elo ati iṣakoso awọn orisun, ṣugbọn wọn tun ni awọn alailanfani. Lati ṣe agbara agbara, o nilo hypervisor kan. Ati pe hypervisor jẹ ori ti awọn orisun. Ati ẹrọ foju funrararẹ nigbagbogbo jẹ gbogbo colossus - aworan ti o wuwo, o ni ẹrọ ṣiṣe, Nginx, Apache, ati boya MySQL. Aworan naa tobi, ko rọrun lati ṣiṣẹ pẹlu ẹrọ foju kan. Bi abajade, ṣiṣẹ pẹlu awọn ẹrọ foju le lọra. Lati yanju iṣoro yii, wọn ṣẹda awọn ọna ṣiṣe agbara ni ipele ekuro.

Ekuro foju awọn ọna šiše

Imudaniloju ni ipele kernel jẹ atilẹyin nipasẹ OpenVZ, Systemd-nspawn, awọn ọna ṣiṣe LXC. Apeere ti o yanilenu ti iru agbara agbara jẹ LXC (Awọn apoti Linux).

LXC jẹ eto iṣiṣẹ agbara-ipele iṣẹ ṣiṣe fun ṣiṣe ọpọlọpọ awọn iṣẹlẹ ti o ya sọtọ ti ẹrọ ṣiṣe Linux lori agbalejo kan. LXC ko lo awọn ẹrọ foju, ṣugbọn ṣẹda agbegbe foju kan pẹlu aaye ilana tirẹ ati akopọ nẹtiwọọki.

Ni pataki, LXC ṣẹda awọn apoti. Kini iyatọ laarin awọn ẹrọ foju ati awọn apoti?

Kini Docker: itan kukuru ati awọn abstractions ipilẹ

Eiyan naa ko dara fun awọn ilana ipinya: ni awọn ọna ṣiṣe agbara ni ipele ekuro, a rii awọn ailagbara ti o gba ọ laaye lati jade kuro ninu eiyan si agbalejo naa. Nitorinaa, ti o ba nilo lati ya sọtọ nkankan, lẹhinna o dara lati lo ẹrọ foju kan.

Awọn iyatọ laarin agbara agbara ati ifipamọ ni a le rii ninu aworan atọka.
Awọn hypervisors hardware wa, awọn hypervisors lori oke ti OS, ati awọn apoti.

Kini Docker: itan kukuru ati awọn abstractions ipilẹ

Awọn hypervisors Hardware jẹ oniyi ti o ba fẹ gaan lati ya sọtọ nkankan. Nitoripe anfani wa lati ya sọtọ ni ipele ti awọn oju-iwe iranti, awọn ilana.

Awọn hypervisors wa bi eto kan, ati awọn apoti wa, ati pe a yoo sọrọ nipa wọn siwaju sii. Ko si hypervisor ni awọn ọna ṣiṣe, ṣugbọn Ẹrọ Apoti kan wa ti o ṣẹda ati ṣakoso awọn apoti. Ohun naa jẹ iwuwo fẹẹrẹ diẹ sii, nitorinaa, nitori iṣẹ pẹlu mojuto, o kere si oke, tabi ko si rara.

Ohun ti a lo fun eiyan ni ipele ekuro

Awọn imọ-ẹrọ akọkọ ti o gba ọ laaye lati ṣẹda eiyan ti o ya sọtọ lati awọn ilana miiran jẹ Awọn aaye Orukọ ati Awọn ẹgbẹ Iṣakoso.

Awọn aaye orukọ: PID, Nẹtiwọki, Oke ati Olumulo. Awọn diẹ sii wa, ṣugbọn fun irọrun ti oye, a yoo dojukọ awọn wọnyi.

PID Namespace ṣe ihamọ awọn ilana. Nigba ti a, fun apẹẹrẹ, ṣẹda PID Namespace, fi ilana kan sibẹ, lẹhinna o di pẹlu PID 1. Nigbagbogbo lori awọn ọna ṣiṣe, PID 1 ti wa ni eto tabi init. Nitorinaa, nigba ti a ba gbe ilana kan si aaye orukọ tuntun, o tun gba PID 1.

Nẹtiwọọki Namespace faye gba o lati se idinwo / sọtọ awọn nẹtiwọki ati tẹlẹ gbe rẹ atọkun inu. Oke jẹ aropin eto faili kan. Olumulo - ihamọ lori awọn olumulo.

Awọn ẹgbẹ Iṣakoso: Iranti, Sipiyu, IOPS, Nẹtiwọọki - nipa awọn eto 12 lapapọ. Bibẹẹkọ, wọn tun pe ni Awọn ẹgbẹ (“C-awọn ẹgbẹ”).

Awọn ẹgbẹ iṣakoso ṣakoso awọn orisun fun eiyan kan. Nipasẹ Awọn ẹgbẹ Iṣakoso, a le sọ pe eiyan ko yẹ ki o jẹ diẹ sii ju iye awọn orisun lọ.

Ni ibere fun apoti lati ṣiṣẹ ni kikun, awọn imọ-ẹrọ afikun ni a lo: Awọn agbara, Daakọ-lori-kọ ati awọn omiiran.

Awọn agbara jẹ nigba ti a ba sọ ilana kan ohun ti o le ati ko le ṣe. Ni ipele kernel, iwọnyi jẹ awọn maapu bitmaps nikan pẹlu ọpọlọpọ awọn aye. Fun apẹẹrẹ, olumulo gbongbo ni awọn anfani ni kikun, o le ṣe ohun gbogbo. Olupin akoko le yi akoko eto pada: o ni awọn agbara lori Time Capsule, ati pe o ni. Pẹlu iranlọwọ ti awọn anfani, o le ni irọrun tunto awọn ihamọ fun awọn ilana, ati nitorinaa daabobo ararẹ.

Eto Daakọ-lori-kikọ gba wa laaye lati ṣiṣẹ pẹlu awọn aworan Docker ati lo wọn daradara siwaju sii.

Ni akoko yii, Docker ni awọn ọran ibamu pẹlu Awọn ẹgbẹ v2, nitorinaa nkan yii dojukọ Awọn ẹgbẹ v1.

Sugbon pada si itan.

Nigbati awọn ọna ṣiṣe agbara ni ipele kernel han, wọn bẹrẹ si ni lilo ni itara. Awọn oke lori hypervisor ti lọ, ṣugbọn diẹ ninu awọn iṣoro wa:

  • awọn aworan nla: wọn Titari OSes, awọn ile-ikawe, opo ti sọfitiwia oriṣiriṣi sinu OpenVZ kanna, ati bi abajade, aworan naa tun wa ni kuku nla;
  • ko si boṣewa deede fun apoti ati ifijiṣẹ, nitorinaa iṣoro ti awọn igbẹkẹle wa. Awọn ipo wa nigbati awọn ege koodu meji lo ile-ikawe kanna, ṣugbọn pẹlu awọn ẹya oriṣiriṣi. Ija kan ṣee ṣe laarin wọn.

Lati yanju gbogbo awọn iṣoro wọnyi, akoko ti o tẹle ti de.

Awọn akoko ti awọn apoti

Nigbati Awọn akoko ti awọn apoti ti de, imoye ti ṣiṣẹ pẹlu wọn yipada:

  • Ilana kan, eiyan kan.
  • A fi gbogbo awọn igbẹkẹle nilo nipasẹ ilana naa si eiyan rẹ. Eyi nilo gige awọn monoliths sinu awọn iṣẹ microservices.
  • Ti o kere julọ aworan naa, o dara julọ - awọn ailagbara ti o ṣee ṣe diẹ, o yipo ni kiakia, ati bẹbẹ lọ.
  • Awọn apẹẹrẹ di ephemeral.

Ranti Mo ti sọrọ nipa ohun ọsin vs ẹran? Tẹ́lẹ̀tẹ́lẹ̀, àwọn ìṣẹ̀lẹ̀ dà bí ẹran agbéléjẹ̀, ṣùgbọ́n ní báyìí wọ́n ti dà bí màlúù. O wa monolith tẹlẹ - ohun elo kan. Bayi o jẹ 100 microservices, awọn apoti 100. Diẹ ninu awọn apoti le ni awọn ẹda 2-3. O di kere pataki fun a sakoso kọọkan eiyan. A nifẹ diẹ sii si wiwa iṣẹ naa funrararẹ: kini ṣeto awọn apoti ṣe. Eyi yipada awọn isunmọ si ibojuwo.

Ni 2014-2015, Docker ti dagba - imọ-ẹrọ ti a yoo sọrọ nipa bayi.

Docker ti yi imoye naa pada ati ṣe iwọn idiwọn apoti ohun elo naa. Lilo Docker, a le ṣajọ ohun elo naa, firanṣẹ si ibi ipamọ, ṣe igbasilẹ lati ibẹ, ki o si fi sii.

A fi ohun gbogbo ti a nilo sinu apo eiyan Docker, nitorinaa iṣoro ti awọn igbẹkẹle ti yanju. Docker onigbọwọ reproducibility. Mo ro pe ọpọlọpọ awọn eniyan ti konge irreproducibility: ohun gbogbo ṣiṣẹ fun o, o Titari si gbóògì, o duro ṣiṣẹ nibẹ. Pẹlu Docker, iṣoro yii lọ kuro. Ti eiyan Docker rẹ ba ṣe ifilọlẹ ati ṣe ohun ti o nilo lati ṣe, o ṣee ṣe julọ ṣe ifilọlẹ ni iṣelọpọ ati ṣe kanna nibẹ.

Digression nipa oke

Àríyànjiyàn púpọ̀ wà nípa ọ̀pọ̀ jù lọ. Ẹnikan ro pe Docker ko gbe ẹru afikun, bi o ṣe nlo ekuro Linux ati gbogbo awọn ilana rẹ pataki fun ifipamọ. Bii, “ti o ba sọ pe Docker jẹ oke, lẹhinna ekuro Linux tun jẹ oke.”

Ni apa keji, ti o ba jinle, lẹhinna ni Docker nitootọ awọn nkan diẹ wa nipa eyiti o le sọ pẹlu isanra pe eyi jẹ oke.

Ohun akọkọ ni aaye orukọ PID. Nigba ti a ba fi diẹ ninu awọn ilana ni awọn namespace, o ti wa ni sọtọ PID 1. Ni akoko kanna, ilana yi ni o ni miran PID, eyi ti o ti wa ni be lori awọn ogun namespace, ita awọn eiyan. Fun apẹẹrẹ, a ṣe ifilọlẹ Nginx ninu apo eiyan, o di PID 1 (ilana titunto si). Ati lori agbalejo o ni PID 12623. Ati pe o ṣoro lati sọ iye ti eyi jẹ overhead.

Ohun keji jẹ Awọn ẹgbẹ. Jẹ ki a mu Awọn ẹgbẹ nipasẹ iranti, iyẹn ni, agbara lati fi opin si iranti eiyan naa. Nigbati o ba ti ṣiṣẹ, awọn iṣiro ti mu ṣiṣẹ, iṣiro iranti: ekuro nilo lati ni oye iye awọn oju-iwe ti o pin, ati melo ni o tun jẹ ọfẹ fun eiyan yii. Eyi le jẹ ohun ti o ga julọ, ṣugbọn Emi ko rii awọn iwadii deede lori bii o ṣe ni ipa lori iṣẹ ṣiṣe. Ati pe Emi ko ṣe akiyesi ara mi pe ohun elo ti nṣiṣẹ ni Docker lojiji padanu iṣẹ pupọ.

Ati ọkan diẹ akọsilẹ nipa išẹ. Diẹ ninu awọn paramita kernel ti wa ni gbigbe lati agbalejo si apoti. Ni pato, diẹ ninu awọn paramita nẹtiwọki. Nitorinaa, ti o ba fẹ ṣiṣẹ nkan ti o ga ni Docker, fun apẹẹrẹ, ohunkan ti yoo lo nẹtiwọọki ṣiṣẹ, lẹhinna o, ni o kere ju, nilo lati tweak awọn aye wọnyi. Diẹ ninu nf_conntrack, fun apẹẹrẹ.

Nipa imọran ti Docker

Docker jẹ awọn paati pupọ:

  1. Docker Daemon - Ẹrọ Apoti kanna; bẹrẹ awọn apoti.
  2. Docker CII jẹ ohun elo iṣakoso Docker kan.
  3. Dockerfile - awọn itọnisọna lori bi o ṣe le kọ aworan kan.
  4. Aworan - aworan lati eyiti a ti yi apoti naa jade.
  5. Apoti eiyan.
  6. Iforukọsilẹ Docker jẹ ibi ipamọ aworan.

Sisematiki, o dabi eyi:

Kini Docker: itan kukuru ati awọn abstractions ipilẹ

Docker daemon nṣiṣẹ lori Docker_host ati ṣiṣe awọn apoti. Onibara kan wa ti o firanṣẹ awọn aṣẹ: kọ aworan naa, ṣe igbasilẹ aworan naa, ṣiṣe eiyan naa. Docker daemon rin sinu iforukọsilẹ ati ṣiṣẹ wọn. Onibara Docker le wọle si mejeeji ni agbegbe (si iho Unix) ati nipasẹ TCP lati ọdọ agbalejo latọna jijin.

Jẹ ká lọ nipasẹ kọọkan paati.

docker daemon - Eyi ni apakan olupin, o ṣiṣẹ lori ẹrọ agbalejo: o ṣe igbasilẹ awọn aworan ati awọn ifilọlẹ awọn apoti lati ọdọ wọn, ṣẹda nẹtiwọọki laarin awọn apoti, ati gba awọn akọọlẹ. Nigba ti a ba sọ pe "ṣẹda aworan", eyi tun jẹ ohun ti ẹmi èṣu n ṣe.

Docker CLI - apakan alabara ti Docker, ohun elo console fun ṣiṣẹ pẹlu daemon. Mo tun ṣe, o le ṣiṣẹ kii ṣe ni agbegbe nikan, ṣugbọn tun lori nẹtiwọọki naa.

Awọn aṣẹ ipilẹ:

docker ps - ṣafihan awọn apoti ti o nṣiṣẹ lọwọlọwọ lori agbalejo docker.
awọn aworan docker - ṣafihan awọn aworan ti a gbasilẹ ni agbegbe.
docker search <> - wa aworan kan ninu iforukọsilẹ.
docker pull <> - ṣe igbasilẹ aworan lati iforukọsilẹ si ẹrọ naa.
docker kọ < > - gba aworan naa.
docker run <> - ṣiṣe apoti naa.
docker rm <> - yọ eiyan kuro.
docker logs <> - awọn akọọlẹ apoti
docker bẹrẹ / da / tun bẹrẹ <> - ṣiṣẹ pẹlu eiyan

Ti o ba ṣakoso awọn ofin wọnyi ati lo wọn ni igboya, lẹhinna ro pe o ti ni oye Docker ni ipele olumulo nipasẹ 70%.

dockerfile - awọn ilana fun ṣiṣẹda aworan kan. Fere gbogbo ilana itọnisọna jẹ Layer tuntun. Jẹ́ ká wo àpẹẹrẹ kan.

Kini Docker: itan kukuru ati awọn abstractions ipilẹ

Eyi ni ohun ti Dockerfile dabi: awọn aṣẹ ni apa osi, awọn ariyanjiyan ni apa ọtun. Ilana kọọkan ti o wa nibi (ati ni gbogbogbo ti a kọ sinu Dockerfile) ṣẹda Layer tuntun ni Aworan.

Paapaa wiwo apa osi, o le ni oye ohun ti n ṣẹlẹ ni aijọju. A sọ pe: “Ṣẹda wa folda kan” - eyi jẹ ipele kan. "Ṣe folda naa ṣiṣẹ" jẹ Layer miiran, ati bẹbẹ lọ. Akara oyinbo jẹ ki igbesi aye rọrun. Ti MO ba ṣẹda Dockerfile miiran ati yi nkan pada ni laini to kẹhin - Emi nṣiṣẹ kii ṣe “python” “main.py”, ṣugbọn nkan miiran, tabi fi awọn igbẹkẹle sii lati faili miiran - lẹhinna awọn ipele ti tẹlẹ yoo tun lo bi kaṣe kan.

aworan - eyi ni apoti ti eiyan, awọn apoti ti ṣe ifilọlẹ lati aworan naa. Ti o ba wo Docker lati oju wiwo ti oluṣakoso package (bi ẹnipe a n ṣiṣẹ pẹlu awọn idii tabi awọn idii rpm), lẹhinna aworan jẹ pataki package rpm kan. Nipasẹ yum fi sori ẹrọ, a le fi ohun elo naa sori ẹrọ, yọ kuro, wa ninu ibi ipamọ, ṣe igbasilẹ rẹ. O jẹ nipa kanna nibi: awọn apoti ti wa ni ifilọlẹ lati aworan naa, wọn ti fipamọ sinu iforukọsilẹ Docker (bii yum, ninu ibi ipamọ), ati pe aworan kọọkan ni hash SHA-256, orukọ kan ati aami kan.

A ṣe itumọ aworan ni ibamu si awọn ilana lati Dockerfile. Ilana kọọkan lati Dockerfile ṣẹda Layer tuntun kan. Awọn fẹlẹfẹlẹ le tun lo.

docker iforukọsilẹ jẹ ibi ipamọ ti awọn aworan Docker. Nipa afiwe pẹlu OS, Docker ni iforukọsilẹ boṣewa gbogbogbo - dockerhub. Ṣugbọn o le kọ ibi ipamọ tirẹ, iforukọsilẹ Docker tirẹ.

eiyan - kini o ṣe ifilọlẹ lati aworan naa. Gẹgẹbi awọn itọnisọna lati Dockerfile, a ṣe apejọ aworan naa, lẹhinna a ṣe ifilọlẹ lati aworan yii. Eiyan yii ti ya sọtọ lati awọn apoti miiran, o gbọdọ ni ohun gbogbo pataki fun ohun elo lati ṣiṣẹ. Ni akoko kanna, eiyan kan jẹ ilana kan. O ṣẹlẹ pe o ni lati ṣe awọn ilana meji, ṣugbọn eyi jẹ idakeji si imọran ti Docker.

Ibeere naa "eiyan kan - ilana kan" ni nkan ṣe pẹlu PID Namespace. Nigbati ilana kan pẹlu PID 1 ti ṣe ifilọlẹ ni Namespace, ti o ba ku lojiji, lẹhinna gbogbo eiyan naa ku paapaa. Ti awọn ilana meji ba nṣiṣẹ nibẹ: ọkan n gbe, ati ekeji ti ku, lẹhinna eiyan naa yoo tẹsiwaju lati wa laaye. Ṣugbọn eyi jẹ nipa Awọn adaṣe to dara julọ, a yoo sọrọ nipa wọn ni awọn ohun elo miiran.

O le kọ ẹkọ diẹ sii nipa awọn ẹya ati eto kikun ti iṣẹ-ẹkọ ni ọna asopọ: ”Docker fidio dajudaju».

Onkọwe: Marcel Ibraev, oluṣakoso Kubernetes ti a fọwọsi, ẹlẹrọ adaṣe ni Southbridge, agbọrọsọ ati olupilẹṣẹ ti awọn iṣẹ Slurm.

orisun: www.habr.com

Fi ọrọìwòye kun