Upravljanje Docker spremnikom: osnovne značajke. Docker: kontejneri su samo što se Docker sastoji od nekoliko komponenti

Docker je popularan alat koji korištenjem spremnika pruža sve što je potrebno za pokretanje aplikacija. Koristeći Docker spremnike, možete biti sigurni da će se vaša aplikacija pokrenuti jednako na bilo kojem računalu na kojem je pokrenete.

U ovom vodiču naučit ćete o odnosu između spremnika i Docker slika te kako instalirati, pokrenuti, zaustaviti i ukloniti spremnike.

Pregled

Docker slika može se smatrati predloškom koji se koristi za stvaranje spremnika. Slike obično počinju s korijenskim datotečnim sustavom, koji se zatim slojevito slažu s različitim promjenama i njihovim odgovarajućim parametrima pokretanja. Za razliku od tipičnih distribucija Linuxa, Docker slika obično sadrži samo dijelove koji su potrebni za pokretanje aplikacije. Slike nemaju statuse i ne mijenjaju se. Točnije bi bilo reći da su oni polazna točka, osnova za Docker kontejnere.

Slike oživljavaju u trenutku kada izdate naredbu docker run - ona odmah stvara spremnik dodavanjem novog sloja za čitanje i pisanje na vrhu slike. Ova kombinacija slojeva samo za čitanje (sa slojem za čitanje i pisanje dodanim na vrhu) također je poznata kao UnionFS - sustav datoteka, koji izvodi kaskadno spojeno montiranje datotečnih sustava. Kada u postojeću datoteku pokrenuti spremnik, izvrši se bilo kakva promjena, datoteka se kopira iz područja samo za čitanje u sloj za čitanje i pisanje, gdje se te promjene primjenjuju. I sada je izvorna datoteka skrivena verzijom za čitanje i pisanje, ali nije izbrisana. Takve promjene u razinama pisanja i čitanja postoje samo unutar određenog pojedinačnog spremnika. Kada se spremnik izbriše, sve promjene se također gube (osim ako nisu spremljene).

Rad s kontejnerima

Svaki put kada koristite naredbu docker run, iz slike koju navedete stvara se novi spremnik. Konkretniji primjeri bit će razmotreni u nastavku.

Korak 1: Napravite dva spremnika

Docker run naredba u nastavku stvara novi spremnik koji će koristiti Ubuntu sliku kao bazu. Prekidač -t omogućit će terminal, a -i mogućnost interakcije s njim. Da biste ušli u spremnik, možete koristiti standardnu ​​naredbu bash. Odnosno, možete unijeti:

$ docker run -ti ubuntu

$ docker run -i -t ubuntu:14.04 /bin/bash

(u drugom slučaju, pokrenut ćete naredbu /bin/bash unutar spremnika i automatski ćete biti unutar spremnika)

Naredbeni redak će potvrditi da ste unutar spremnika kao superkorisnik. Nakon znaka @ vidjet ćete ID spremnika u kojem se nalazite:

Root@11cc47339ee1:/#

Sada, pomoću naredbe echo, napravite promjene u direktoriju /tmp, a zatim provjerite jesu li promjene zapisane pomoću naredbe cat:

Echo "Example1" > /tmp/Example1.txt cat /tmp/Example1.txt

Na ekranu biste trebali vidjeti:

Sada izađite iz spremnika:

Nakon što se ova naredba izvrši i izađete iz naredbenog retka, Docker spremnik prestaje raditi. Ovo možete vidjeti ako koristite naredbu docker ps:

Među aktivnim spremnicima nećete vidjeti onaj korišten gore:

ID SPREMNIKA SLIKA NAREDBA STVARAN STATUS NAZIVI PORTOVA

Međutim, možete dodati prekidač -a da vidite sve spremnike - i pokrenute i zaustavljene - i tada će spremnik u kojem ste radili biti istaknut:

$ docker ps -a ID SPREMNIKA SLIKA NAREDBA KREATIRAN STATUS PORTOVI IMENA 11cc47339ee1 ubuntu "/bin/bash" prije 9 minuta Izašlo (127) prije 10 sekundi small_sinoussi

Kada se spremnik stvori, on ima ID i automatski generirano ime. U ovom slučaju, 11cc47339ee1 je identifikacijski broj (ID) spremnika, a small_sinoussi je generirano ime. Naredba ps -a prikazuje te podatke, kao i sliku iz koje je spremnik kreiran (u ovom slučaju ubuntu), kada je spremnik kreiran (prije 9 minuta) i koja je naredba u njemu pokrenuta ("/bin/ bash"). Također možete vidjeti status spremnika (napušten je prije 10 sekundi). Da je spremnik još uvijek aktivan, vidjeli biste status "Up" i vrijeme kada je aktivan.

Sada možete ponovno unijeti naredbu za izradu spremnika:

$ docker run -ti ubuntu

Iako naredba izgleda isto kao prošli put, stvorit će potpuno novi spremnik - imat će drugačiji ID broj, a ako pokušate pogledati sadržaj datoteke Primjer1 koju ste ranije uredili, nećete je pronaći .

Root@6e4341887b69:/# cat /tmp/Primjer1

Izlaz će biti:

Mačka: /tmp/Primjer1: Nema takve datoteke ili direktorija

Možda vam se čini da su podaci nestali, ali to naravno nije tako. Izađite iz drugog spremnika kako biste osigurali da oba spremnika (uključujući prvi s potrebnu datoteku) postoje u sustavu.

Root@6e4341887b69:/# izlaz $ docker ps -a

Izlaz će biti:

ID SPREMNIKA SLIKA NAREDBA STVORENO STATUS PRIKLJUČKA IMENA 6e4341887b69 ubuntu "/bin/bash" Prije otprilike minutu Izašlo (1) prije 6 sekundi kickass_borg 11cc47339ee1 ubuntu "/bin/bash" prije 15 minuta Izašlo (127) prije 6 minuta small_sinoussi

Korak 2: Ponovno pokrenite prvi spremnik

Kako biste ponovno pokrenuli već kreirani spremnik, morate koristiti naredbu start s dva prekidača -ai. Na kraju je potrebno napisati identifikacijski broj spremnika s kojim želite raditi ili njegov naziv. Kao rezultat toga, vaša će naredba izgledati ovako:

Docker start -ai 11cc47339ee1

Sada ste ponovno u bash ljusci unutar spremnika i možete provjeriti je li datoteka koju ste stvorili na početku članka još uvijek ovdje:

Cat /tmp/Example1.txt

Vidjet ćete na ekranu:

Sada možete izaći iz spremnika:

Na ovaj način se spremaju sve promjene unutar spremnika, čak i ako zaustavite i ponovno pokrenete spremnik. Podaci se brišu samo kada se izbriše sam spremnik. Također, gornji primjer pokazuje da promjene utječu na jedan pojedinačni spremnik (a ne na sve spremnike odjednom).

Korak 3: Uklonite obje posude

Posljednji korak je brisanje dva spremnika koja ste stvorili prateći ovaj vodič. Da biste to učinili, morate koristiti naredbu docker rm. Međutim, to utječe samo na zaustavljene kontejnere. Nakon naredbe morate navesti identifikacijski broj ili naziv jednog ili više spremnika. Na primjer, da biste izbrisali ranije stvorene spremnike, morate unijeti naredbu:

Docker rm 6e4341887b69 small_sinoussi

Zaslon će prikazati:

6e4341887b69 mali_sinoussi

Sada su oba spremnika izbrisana.

Zaključak

U ovom ste vodiču naučili o glavne ekipe za rad u Dockeru i naučio kako kreirati, zaustaviti, ponovno pokrenuti i izbrisati spremnike.

Već nekoliko mjeseci koristim Docker za strukturiranje procesa razvoja/isporuke web projekata. Čitateljima Habrakhabra nudim prijevod uvodnog članka o dockeru - “Razumijevanje dockera”.

Što je docker?

Docker je otvorena platforma za razvoj, isporuku i rad aplikacija. Docker je dizajniran za bržu isporuku vaših aplikacija. S dockerom možete odvojiti svoju aplikaciju od svoje infrastrukture i tretirati infrastrukturu kao kontrolirano aplikacijom. Docker vam pomaže brže slati kod, brže testirati, brže slati aplikacije i smanjiti vrijeme između pisanja koda i pokretanja koda. Docker to čini putem lagane platforme za virtualizaciju spremnika, koristeći procese i uslužne programe koji vam pomažu u upravljanju i hostiranju vaših aplikacija.

U svojoj srži, docker vam omogućuje pokretanje gotovo svake aplikacije, sigurno izolirane u spremniku. Sigurna izolacija omogućuje vam pokretanje više spremnika na istom hostu u isto vrijeme. Lagana priroda spremnika, koji radi bez dodatnog opterećenja hipervizora, omogućuje vam da izvučete više iz svog hardvera.

Platforma i alati za virtualizaciju spremnika mogu biti korisni u sljedećim slučajevima:

  • pakiranje vaše aplikacije (i komponenti koje koristite) u docker spremnike;
  • distribucija i isporuka ovih spremnika vašim timovima za razvoj i testiranje;
  • postavljanje ovih spremnika na vaša proizvodna mjesta, kako u podatkovnim centrima tako iu oblacima.

Za što mogu koristiti docker?

Brzo objavite svoje aplikacije

Docker je odličan za organiziranje razvojnog ciklusa. Docker omogućuje programerima pokretanje lokalnih spremnika s aplikacijama i uslugama. Što vam naknadno omogućuje integraciju s procesom kontinuirane integracije i tijek rada implementacije.

Na primjer, vaši programeri pišu kod lokalno i dijele svoj razvojni skup (skup Docker slika) s kolegama. Kad su spremni, šalju kod i spremnike na mjesto testiranja i pokreću sve potrebne testove. S mjesta testiranja mogu poslati kod i slike u proizvodnju.

Lakše postavljanje i rasklapanje

Platforma temeljena na docker kontejneru olakšava prijenos vašeg nosivost. Docker spremnici mogu se izvoditi na vašem lokalnom računalu, bilo stvarnom ili virtualnom računalu u podatkovnom centru ili u oblaku.

Prenosivost i lagana priroda dockera olakšava dinamičko upravljanje vašim radnim opterećenjem. Docker možete koristiti za implementaciju ili isključivanje svoje aplikacije ili usluga. Brzina dockera omogućuje da se to učini u gotovo stvarnom vremenu.

Veća opterećenja i više nosivosti

Docker je lagan i brz. Pruža održivu, isplativu alternativu virtualni strojevi temelji se na hipervizoru. Posebno je koristan u uvjetima velika opterećenja, na primjer, kada stvarate vlastiti oblak ili platformu kao uslugu. Ali također je koristan za male i srednje aplikacije kada želite izvući više iz resursa koje imate.

Glavne Docker komponente

Docker se sastoji od dvije glavne komponente:
  • Docker: virtualizacijska platforma otvorenog koda;
  • Docker Hub: Naša platforma-kao-usluga za distribuciju i upravljanje Docker spremnicima.
Bilješka! Docker se distribuira pod licencom Apache 2.0.

Docker arhitektura

Docker koristi arhitekturu klijent-poslužitelj. Docker klijent komunicira s Docker demonom, koji preuzima teret stvaranja, pokretanja i distribucije vaših spremnika. I klijent i poslužitelj mogu raditi na istom sustavu, možete povezati klijenta s udaljenim docker demonom. Klijent i poslužitelj komuniciraju putem utičnice ili RESTful API-ja.

Docker demon

Kao što je prikazano na dijagramu, demon radi na glavnom računalu. Korisnik ne komunicira izravno s poslužiteljem, već za to koristi klijenta.

Docker klijent

Docker klijent, docker program, glavno je sučelje za Docker. Prima naredbe od korisnika i komunicira s docker demonom.

Unutarnji docker

Da biste razumjeli od čega se docker sastoji, trebate znati o tri komponente:
  • slike
  • registar
  • spremnici

Slike

Docker slika je predložak samo za čitanje. Na primjer, slika može sadržavati operativni sustav Ubuntu s Apacheom i aplikacijom na njemu. Slike se koriste za izradu spremnika. Docker olakšava stvaranje novih slika, ažuriranje postojećih ili možete preuzeti slike koje su izradili drugi ljudi. Slike su komponente docker build-a.

Registar

Docker registar pohranjuje slike. Postoje javni i privatni registri iz kojih možete preuzimati ili postavljati slike. Javni Docker registar je Docker Hub. Tamo je pohranjena ogromna zbirka slika. Kao što znate, slike možete izraditi sami ili možete koristiti slike koje su izradili drugi. Registri su distribucijska komponenta.

Kontejneri

Kontejneri su slični imenicima. Spremnici sadrže sve što je potrebno za rad aplikacije. Svaki spremnik kreiran je iz slike. Kontejneri se mogu stvarati, pokretati, zaustavljati, migrirati ili brisati. Svaki spremnik je izoliran i pruža sigurnu platformu za aplikaciju. Kontejneri su komponente posla.

Dakle, kako Docker radi?

Za sada znamo da:
  • možemo kreirati slike u kojima se nalaze naše aplikacije;
  • možemo stvoriti spremnike od slika za pokretanje aplikacija;
  • Slike možemo distribuirati putem Docker Huba ili drugog registra slika.
Pogledajmo kako se ove komponente slažu.

Kako radi slika?

Već znamo da je slika predložak samo za čitanje iz kojeg se kreira spremnik. Svaka slika sastoji se od niza razina. Docker koristi union file system za kombiniranje ovih slojeva u jednu sliku. Unija sustav datoteka omogućuje transparentno preklapanje datoteka i direktorija iz različitih datotečnih sustava (različitih grana), stvarajući koherentan datotečni sustav.

Jedan od razloga zašto je docker lagan je zato što koristi ovakve slojeve. Kada promijenite sliku, kao što je ažuriranje aplikacije, stvara se novi sloj. Dakle, bez zamjene cijele slike ili njezine ponovne izgradnje, kao što biste možda morali učiniti s virtualnim strojem, samo se sloj dodaje ili ažurira. I ne morate distribuirati cijelu novu sliku, samo se ažuriranje distribuira, što olakšava i ubrzava distribuciju slika.

U srcu svake slike je osnovna slika. Na primjer, ubuntu, osnovna slika Ubuntua ili fedora, osnovna slika distribucije Fedora. Također možete koristiti slike kao osnovu za stvaranje novih slika. Na primjer, ako imate apache sliku, možete je koristiti kao osnovnu sliku za svoje web aplikacije.

Bilješka! Docker obično povlači slike iz registra Docker Huba.

Docker slike mogu se stvoriti iz ovih osnovnih slika; korake za izradu ovih slika nazivamo uputama. Svaka uputa stvara novu sliku ili razinu. Upute će biti sljedeće:

  • naredba za pokretanje
  • dodavanje datoteke ili direktorija
  • stvaranje varijable okoline
  • upute o tome što pokrenuti kada se spremnik ove slike pokrene

Ove su upute pohranjene u Dockerfile. Docker čita ovu Docker datoteku kada gradite sliku, izvršava ove upute i vraća konačnu sliku.

Kako radi docker registar?

Registar je spremište za docker slike. Nakon što je slika stvorena, možete je objaviti u javnom registru Docker Huba ili u svom osobnom registru.

S docker klijentom možete pretraživati ​​već objavljene slike i preuzimati ih na svoj docker stroj za izradu spremnika.

Docker Hub pruža javna i privatna spremišta slika. Pretraživanje i preuzimanje slika iz javnih repozitorija dostupno je svima. Sadržaj privatnih skladišta nije uključen u rezultate pretraživanja. I samo vi i vaši korisnici možete primati te slike i iz njih stvarati spremnike.

Kako radi spremnik?

Kontejner se sastoji od operacijski sustav, korisničke datoteke i metapodatke. Kao što znamo, svaki spremnik je stvoren od slike. Ova slika govori dockeru što se nalazi u spremniku, koji proces pokrenuti, kada se spremnik pokreće i druge konfiguracijske podatke. Docker slika je samo za čitanje. Kada docker pokrene spremnik, on stvara sloj za čitanje/pisanje na vrhu slike (koristeći union datotečni sustav kao što je prethodno navedeno) u kojem se aplikacija može pokrenuti.

Što se događa kada se spremnik pokrene?

Bilo kroz docker program ili kroz RESTful API, docker klijent govori docker demonu da pokrene spremnik.

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

Pogledajmo ovu naredbu. Klijent se pokreće pomoću naredbe docker, s opcijom pokretanja koja mu govori da pokrene novi spremnik. Minimalni zahtjevi za pokretanje spremnika su sljedeći atributi:

  • koju sliku koristiti za izradu spremnika. U našem slučaju ubuntu
  • naredbu koju želite pokrenuti kada se spremnik pokrene. U našem slučaju /bin/bash

Što se događa ispod haube kada pokrenemo ovu naredbu?

Docker radi sljedeće:

  • preuzima ubuntu sliku: docker provjerava prisutnost ubuntu slike na lokalnom računalu, a ako je nema, preuzima je s Docker Huba. Ako postoji slika, koristi je za stvaranje spremnika;
  • stvara spremnik: kada se slika primi, docker je koristi za stvaranje spremnika;
  • inicijalizira datotečni sustav i montira razinu samo za čitanje: spremnik se stvara u datotečnom sustavu i slika se dodaje na razinu samo za čitanje;
  • inicijalizira mrežu/most: stvara mrežno sučelje koje dockeru omogućuje komunikaciju s glavnim strojem;
  • Postavljanje IP adrese: pronalazi i postavlja adresu;
  • Pokreće navedeni proces: pokreće vašu aplikaciju;
  • Obrađuje i proizvodi izlaz iz vaše aplikacije: povezuje i bilježi standardni ulaz, izlaz i tok pogrešaka vaše aplikacije tako da možete pratiti kako vaša aplikacija radi.
Sada imate spremnik koji radi. Možete upravljati svojim spremnikom, komunicirati sa svojom aplikacijom. Kada odlučite zaustaviti aplikaciju, izbrišite spremnik.

Korištene tehnologije

Docker je napisan u Go-u i koristi neke značajke Linux kerneli implementirati gornju funkcionalnost.

Imenski prostori

Docker koristi tehnologiju imenskih prostora za organiziranje izoliranih radnih prostora, koje nazivamo spremnicima. Kada pokrenemo spremnik, docker stvara skup prostora imena za taj spremnik.

Ovo stvara izolirani sloj, pri čemu svaki aspekt spremnika radi u vlastitom prostoru imena i nema pristup vanjskom sustavu.

Popis nekih imenskih prostora koje docker koristi:

  • pid: izolirati proces;
  • neto: za upravljanje mrežnim sučeljima;
  • ipc: za upravljanje IPC resursima. (ICP: Međuprocesna komunikacija);
  • mnt: za upravljanje točkama montiranja;
  • utc: za izolaciju kernela i kontrolu generiranja verzije (UTC: Unix sustav dijeljenja vremena).

Kontrolne skupine

Docker također koristi cgroups ili tehnologiju kontrolnih grupa. Ključ za pokretanje aplikacije u izolaciji je osigurati aplikaciji samo one resurse koje želite pružiti. To osigurava da će kontejneri biti dobri susjedi. Kontrolne grupe omogućuju vam dijeljenje dostupnih hardverskih resursa i, ako je potrebno, postavljanje ograničenja i ograničenja. Na primjer, ograničite moguću količinu memorije za spremnik.

Union File System

Union File Sysem ili UnionFS je datotečni sustav koji radi stvaranjem slojeva, što ga čini vrlo laganim i brzim. Docker koristi UnionFS za stvaranje blokova od kojih je izgrađen spremnik. Docker može koristiti nekoliko varijanti UnionFS-a uključujući: AUFS, btrfs, vfs i DeviceMapper.

Formati spremnika

Docker kombinira te komponente u omotač koji nazivamo format spremnika. Zadani format se zove libcontainer. Docker također podržava tradicionalni format spremnika u Linuxu koristeći LXC. U budućnosti bi Docker mogao podržavati druge formate spremnika. Na primjer, integracija s BSD Jails ili Solaris Zones.

Unutar Dockera postoji samo Linux, i, eksperimentalno, FreeBSD. Izvorno radi pod Linuxom i, eksperimentalno, pod FreeBSD-om. Pod MacOSX, Windows - putem virtualnog stroja.

Docker je dvostruko izoliran. Izolacija onoga što se nalazi unutar Docker spremnika od operativnog sustava i izolacija operativnog sustava od onoga što je unutar Dockera. Izolacija podrazumijeva izolaciju svih datoteka, portova, prioriteta.

To je gotovo virtualni stroj. Skoro, ali ne sasvim.

Postoji tako nešto kao "pakao ovisnosti". Svaki softver instaliran na računalu, donosi ovisnosti(konfiguracijske datoteke, statičke datoteke koje se obično nazivaju imovina, pomoćni programi/usluge, biblioteke itd.). Broj ovih knjižnica/usluga/usluga nespojivi jedno s drugim. A s obzirom da svaka od ovih knjižnica/usluga/usluga ima svoje ovisnosti, situacija je još gora.

Na primjer, koristimo Yandex.Cocaine, koji se normalno kompajlira samo na Ubuntu 14.04 (i, očito, na Debianu 7). Ali ne pod CentOS 6, 7, Debian 8, FreeBSD 9, 10, Ubuntu 15, 16 itd. - nemoguće ga je sastaviti. Na ovim operativnim sustavima pokrećemo u Dockeru.

S druge strane, iu isto vrijeme, morate instalirati drugi, moderniji softver. A ujedno i stariji. A mi čak i ne govorimo o ozbiljno različitim verzijama Linuxa. Na primjer, jedan softver zahtijeva barem Ubuntu 14.10, dok drugi zahtijeva barem Linux 14.04.

Docker je jedan program unutar pojedinog okruženja s pojedinom verzijom operacijskog sustava. Zbog lisnatih posuda, ako koristite jedan korijen za sve, tada je veličina Docker spremnika samo nekoliko kilobajta veća od veličine binarne datoteke, radi pod Dockerom.

Dakle, imamo binarnu datoteku koja radi kao u vlastitom operativnom sustavu.

Možete reći - bah, ali to se zna odavno virtualni stroj. Ali ne, to nije istina. To su kontejneri tzv. Tamo nema mirisa nikakvog virtualnog stroja. Osim za Windows i MacOSX, gdje je rad bez virtualnog stroja još uvijek samo eksperimentalno moguć, a norma u tim operativnim sustavima je korištenje Dockera unutar potpunog virtualnog stroja.

Ali virtualni strojevi s Dockerom koriste se samo za razvoj. Za rad u proizvodnji ne koriste se virtualni strojevi s Dockerom.

Docker koristi spremnike operativnog sustava. LXC na Linuxu, Jails na FreeBSD-u. Kontejner je područje operativnog sustava koje je izolirano od glavnog dijela operativnog sustava. Spremnik ima vlastito stablo direktorija (uključujući sustav /dev, /bin, /sbin itd.), vlastito mrežni priključci itd. itd.

Ali ne koristi punu virtualizaciju. Što značajno štedi resurse. Pokrenite 100 punopravnih virtualnih strojeva Malo je vjerojatno da će raditi čak i na moćnom poslužitelju. I ovdje moguće je pokrenuti 100 Docker spremnika čak i na slabom kućnom računalu.

Istina, korištenje nepotpune virtualizacije ograničava korištenje operativnih sustava unutar spremnika. Obično je ovo posebno pripremljene verzije Linuxa ili FreeBSD-a. Upravo posebno pripremljene. Windows - u principu je nemoguće pokrenuti u kontejneru.

Kontejneri su postojali prije Dockera. Docker je, strogo govoreći, samo vrlo prikladan set alata, prikupljeni zajedno za upravljanje virtualizacijom spremnika. Ali vrlo udobno.

Zašto se ovo koristi?

Dečki iz svih vrsta Dropboxa, Facebooka i drugih divova, koji su lansirali milijun različitih programa u svojim uslugama, suočili su se s činjenicom da Nemoguće je jamčiti identične postavke operativnog sustava posvuda. A ovo je kritično.

Do te točke da savršeno napisan i testiran program na stvarnom poslužitelju počinje se ponašati nepredvidivo.

Stoga je jedan od ovih pametnjakovića iznjedrio novi koncept - svaki program na poslužiteljima radi u vlastitom individualnom okruženju, s individualnim postavkama operativnog sustava.

Štoviše - izvorno programer softvera testiranje programa u Docker spremniku, s određenim postavkama. I u istom (ili s istim postavkama) Docker spremniku, program ide na poslužitelj.

Ovaj omogućuje vam jamčenje mnogo većeg identiteta između razvojnog okruženja i okruženja za izvođenje.

Prije toga, ljudi su patili, smislili su lukave instalatere...

Nakon pljuvali su na pokušaje organiziranja okruženja u OS-u- a sada je koncept sljedeći - instalirati programe na poslužitelje zajedno s njihovim individualno konfiguriranim operativnim sustavima- odnosno unutar kontejnera. 1 spremnik = 1 OS postavka = 1 program unutra.

Drugim riječima:

  • Za otklanjanje pogrešaka trebao bi se koristiti Docker spremnik.
  • Isti Docker spremnik mora se koristiti na poslužitelju.

To vam omogućuje da se ne gnjavite s postavkama "ispod servera" lokalno na stroju programera. To vam omogućuje potpuno razvijanje na stroju programera različite programe istovremeno, koji zahtijeva nekompatibilne postavke operativnog sustava. To nam omogućuje da pružimo puno više jamstava da će se program na poslužitelju ponašati na isti način kao na stroju programera. To vam omogućuje da razvijate pod Windows/MacOSX uz praktično "transparentno" testiranje pod Linuxom.

Docker je primjenjiv na stvaranje/prilagodbu samo poslužiteljski softver za Linux(eksperimentalno pod FreeBSD-om). Nije za pametne telefone. A ako stolna računala - samo onda softver bez GUI-a.

Sve dok Docker dopušta u jednom potezu pojednostavite rad programera i administratora i poboljšajte kvalitetu rezultata- sada postoji bum u Dockeru. Izmišljeno je ogromno brdo alata za upravljanje implementacijom aplikacija kreiranih s Dockerom. Ako ste prije, da biste pokrenuli 10.000 programa na 1.000 poslužitelja, trebali najmanje 3 visokokvalificirana devops stručnjaka koji su napisali hrpa opisa kako to se može na Puppet, Salt, Chef, Ansible, a ni tada nije bilo garancija, sve se testiralo mjesecima. Sada s Dockerom čak i jedan kvalificirani devops može upravljati milijunima programa na desecima tisuća poslužitelja. Uz puno veću garanciju da će sve krenuti normalno.

Može postojati pogrešan dojam da programer priprema spremnike u Dockeru i zatim ih predaje administratoru.
Ispravna metodologija još uvijek je drugačija:

Programer doprinosi svim svojim rezultatima CI sustavu (obično putem gita)
Za svaki novi commit, CI stvara sliku za testiranje pomoću Dockera.
Ako su testovi uspješni, tada se ista Docker slika šalje na implementaciju u produkciju.
Ili, malo drugačije u prevedenim sustavima, gdje izvorni kodovi nisu potrebni u produkciji: u Dockeru se postavlja okruženje za kompilaciju, a za testiranje se postavlja druga slika s već prevedenim stvarima, koje se već šalju u produkciju.

Odnosno, uz pravilnu organizaciju materije, programer ne može/treba utjecati na to kakva će slika biti.
Ali u testnom okruženju (pokrenuto na poslužitelju, nedostupno programeru u velikim timovima) iu proizvodnji upravo se koristi ista slika.

Glavna ideja je da je ono što smo testirali upravo ono što pokrećemo na proizvodnom poslužitelju. Jedan na jedan, uključujući iste datoteke (nije isti, ali potpuno isti).

Pomoć s Docker slikom i naredbama za upravljanje spremnikom.

Pojmovi

Slika je statična verzija temeljena na određenom OS-u.

Kontejner- ovo je pokrenuta instanca slike.

Dopuštenja za pokretanje dockera

Za pokretanje Docker spremnika pod vašim korisnikom (bez sudo-a), morate biti dodani u odgovarajuću grupu:

Sudo usermod -aG docker YOU_USER

Docker servis

Upravljanje uslugom Docker:

Sudo service docker start|stop|restart|status sudo restart docker # alias

Slike

Popis dostupnih slika:

Docker slike

Preuzmite sliku (ili cijeli repozitorij) iz službenog registra (repozitorij slika):

Docker pull ubuntu:14.04

Pogledajte informacije o slici:

Docker provjeri ubuntu

Izbriši sliku:

Docker predaje CONTAINER_ID IMAGE_NAME

Kontejneri

Pažnja!

Nakon pokretanja Docker spremnika, usluge/demoni (kao što su SSH, Supervisor i drugi) neće se pokrenuti automatski! Proveo sam nekoliko sati ispravljajući grešku: " ssh_exchange_identification: pročitaj: Ponovno postavljanje veze od strane vršnjaka", prilikom pokušaja spajanja na spremnik putem SSH-a. Ali pokazalo se da se sshd demon nije pokrenuo. Morat ćete ručno pokrenuti potrebne demone ili nadzornika nakon što se spremnik pokrene:

Docker exec CONTAINER_ID bash -c "servis ssh start"

Popis svih spremnika (u radu i zaustavljenih):

Docker ps -a

Uklonite kontejner(e):

Docker rm CONTAINER_ID CONTAINER_ID

Izbriši sve spremnike:

Docker rm $(docker ps -aq)

Stvorite i pokrenite Docker spremnik s Ubuntu 14.04 u interaktivnom načinu (otvorite ljusku ovog spremnika):

Docker run -it ubuntu bash docker run [opcije] slika [naredba] -i Interaktivni način rada, zadrži STDIN otvorenim -t Dodjela/stvara pseudo-TTY koji prilaže stdin i stdout --name Ime spremnika umjesto ID-a -w Navedite radni direktorij ( --workdir) -e Postavite varijablu okruženja u spremnik -u Korisnik:grupa pod kojom bi se spremnik trebao pokrenuti -v Montirajte datoteku ili direktorij glavnog sustava u spremnik -p Proslijedi port(ove) kontejner -<порт хост-системы>:<порт контейнера>(--publish=) --entrypoint Zamjena zadane naredbe iz ENTRYPOINT Docker datoteke

Bilješka

Da biste odvojili TTY bez zaustavljanja spremnika, pritisnite Ctr + P + Ctrl + Q .

Stvorite i pokrenite Docker spremnik u demonskom načinu rada s prosljeđivanjem SSH priključka:

Docker run -itd -p 127.0.0.1:221:22 ubuntu

Stvorite i pokrenite spremnik, a zatim izbrišite ovaj spremnik nakon zaustavljanja (korisno za otklanjanje pogrešaka):

Docker run -i -t --rm ubuntu bash

Interaktivno pokrenite zaustavljeni spremnik:

Docker start -i CONTAINER_ID

Povežite se s demoniziranim spremnikom:

Docker priloži CONTAINER_ID

Docker naredbe

Upotreba: docker COMMAND docker daemon [ --help | ... ] docker [ --help | -v | --version ] Samodostatno runtime za spremnike. Opcije: --config=~/.docker Lokacija konfiguracijskih datoteka klijenta -D, --debug=false Omogući način otklanjanja pogrešaka --disable-legacy-registry=false Ne kontaktiraj naslijeđene registre -H, --host= Daemon socket( s) za povezivanje na -h, --help=false Upotreba ispisa -l, --log-level=info Postavite razinu zapisivanja --tls=false Koristi TLS; implicira --tlsverify --tlscacert=~/.docker/ca.pem Pouzdani certifikati potpisani samo od strane ovog CA --tlscert=~/.docker/cert.pem Put do datoteke TLS certifikata --tlskey=~/.docker/ ključ.pem Put do TLS ključ datoteka --tlsverify=false Koristite TLS i provjerite udaljeni -v, --version=false Ispišite informacije o verziji i zatvorite Naredbe: attach Priložite verziji spremnika koja se izvodi Izgradite sliku iz Dockerfile predaje Stvorite novu sliku iz spremnika promjene cp Kopiraj datoteke/mape između spremnika i lokalnog datotečnog sustava kreiraj Stvori novi spremnik diff Pregledaj promjene na događajima datotečnog sustava spremnika Dohvati događaje u stvarnom vremenu s poslužitelja exec Pokreni naredbu u spremniku koji radi izvoz Izvezi datotečni sustav spremnika kao povijest tar arhive Prikaži povijest slike slike Popis uvoza slika Uvoz sadržaja iz tarball-a za stvaranje informacija o slici datotečnog sustava Prikaži informacije cijelog sustava pregledaj Vrati informacije niske razine o spremniku ili ubij slike Ubij spremnik koji radi opterećenje Opterećenje slika iz tar arhive ili STDIN prijava Registrirajte se ili se prijavite u Docker registar Odjava Odjava iz Docker registra zapisnici Dohvatite zapise mreže spremnika Upravljanje Docker mrežama pauzirajte Pauzirajte sve procese unutar spremnika porta Popis mapiranja porta ili određenog mapiranja za SPREMNIK ps Popis spremnika povuci Povucite sliku ili spremište iz registra gurati gurati sliku ili repozitorij u registar preimenuj Preimenuj spremnik ponovno pokreni Ponovno pokreni spremnik rm Ukloni jedan ili više spremnika rmi Ukloni jednu ili više slika pokreni Pokreni naredbu u novom spremniku spremiti Spremiti sliku(e) u tar arhivu traži Traži Docker Hub za slike start start statistika jednog ili više zaustavljenih spremnika Prikaži live stream spremnika(a) statistike upotrebe resursa zaustavi Zaustavi aktivnu oznaku spremnika Označi sliku u repozitorij vrh Prikaži pokrenute procese spremnika poništi pauzu Poništi pauziranje svih procesa unutar volumena spremnika Upravljaj volumenima Dockera čekaj Blokirajte dok se spremnik ne zaustavi, zatim ispišite njegov izlazni kod. Pokrenite "docker COMMAND --help" za više informacija o naredbi.

Docker je najčešći sustav kontejnerizacije koji vam omogućuje pokretanje softvera potrebnog za razvoj u spremnicima bez instaliranja na lokalni sustav. U ovom materijalu analizirat ćemo upravljanje Docker spremnikom.

Docker se sastoji od nekoliko komponenti:
  1. Slika— skup softvera koji su konfigurirali programeri, a koji se preuzima sa službene web stranice
  2. Kontejner- implementacija slike - entitet na poslužitelju kreiran iz nje, spremnik ne bi trebao biti točna kopija i može se prilagoditi pomoću Dockerfilea
  3. Volumen— područje na disku koje spremnik koristi i u koje se spremaju podaci. Nakon brisanja spremnika ne ostaje nikakav softver, ali se podaci mogu koristiti u budućnosti

Preko cijele strukture na poseban je način izgrađena mreža koja omogućuje prosljeđivanje portova na željeni način i omogućavanje pristupa spremniku izvana (po defaultu radi na lokalnoj IP adresi) putem virtualnog mosta. U tom slučaju spremnik može biti dostupan i cijelom svijetu i jednoj adresi.

Upravljanje Docker spremnikom: osnovne značajke

Instalirajmo Docker na Ubuntu ili Debian poslužitelj ako već nije instaliran prema uputama. Bolje je pokretati naredbe kao neprivilegirani korisnik preko sudo

Pokretanje najjednostavnijeg spremnika pokazat će da sve radi

Osnovne naredbe za upravljanje spremnicima

Sve aktivne spremnike možete prikazati ovako:

S prekidačem -a bit će prikazani svi spremnici, uključujući i neaktivne

Dicker nasumično dodjeljuje nazive spremnicima, ako je potrebno možete izravno odrediti ime

docker run --name hello-world

Pokrećemo spremnik pod nazivom my-linux-container na temelju ubuntu slike i idemo na konzolu spremnika pomoću bash ljuske

docker run -it —name my-linux-container ubuntu bash

Za izlazak iz spremnika i povratak na glavni sustav morate izvršiti

Sve slike na temelju kojih se kreiraju kontejneri automatski se preuzimaju s hub.docker.com kada se kontejner prvi put kreira, a one koje već postoje lokalno mogu se vidjeti pokretanjem docker slika

Stvaranje spremnika iz već preuzete slike bit će mnogo brže (gotovo trenutno)

Prilikom napuštanja spremnika s izlazom, on se zaustavlja, tako da se to ne događa, možete izaći pomoću tipkovničke prečice CTRL + A + P

Možete ukloniti sve spremnike koji nisu aktivni

docker rm $(docker ps -a -f status=exited -q)

Ili ih brišite jednu po jednu

Umjesto identifikatora u zadnjoj naredbi možete navesti ime

U dockeru se spremnicima upravlja pomoću malog broja intuitivnih naredbi:

početni ID docker spremnika

docker spremnik stop ID

ID ponovnog pokretanja docker spremnika

ID inspekcije docker kontejnera

Potonji je posebno koristan; prikazuje sve informacije o spremniku, konfiguracijskim datotekama i korištenim particijama diska. Cijeli popis naredbi lako se može pronaći u pomoći ili na službenoj web stranici Docker

Stvaranje vlastite Docker slike i korištenje Dockerfilea

Slike se obično stvaraju iz postojećih korištenjem dodatnih opcija navedenih u Dockerfileu

IZ ubuntua
CMD echo "zdravo svijete"

Sada se stvara nova slika na temelju standardne ubuntu

Sliku gradimo dajući joj naziv (točka na kraju naredbe znači da se koristi trenutni direktorij, a time i Dockerfile u njemu)

docker build -t my-ubuntu.

docker slike sada će se prikazati i novostvorena slika my-ubuntu

Možete ga pokrenuti i prikazat će se na konzoli: Pozdrav svijete i to je jedina razlika u odnosu na zadanu sliku

Obično su nam potrebna složenija pravila, na primjer, moramo uključiti python3 u sliku - idemo u novi direktorij i stvorimo Dockerfile

IZ ubuntua
CMD apt-get update && apt-get install python3

Sve upute su napisane u jednom redu

docker build -t my-ubuntu-with-python3.

Kontejner lansiramo ulaskom unutra

docker run -it my-ubuntu-with-python3 bash

Unutra, kao root, trebate trčati dpkg -l | grep python3, naredba će pokazati da je paket prisutan u sustavu, što znači uspjeh



2024 wisemotors.ru. Kako radi. Željezo. Rudarstvo. Kriptovaluta.