Programiranje

Vadnica za Docker: Začnite z Dockerjem

Posode omogočajo lahek prenos prenosnih delovnih obremenitev aplikacij, na primer navideznega računalnika, vendar brez splošnih in večjih količin, ki so običajno povezane z VM-ji. S kontejnerji lahko aplikacije in storitve prosto zapakirate in prosto premikate med fizičnimi, navideznimi ali oblačnimi okolji.

Docker, sistem za ustvarjanje in upravljanje vsebnikov, ki ga je ustvaril Docker Inc., prevzame izvorno funkcijo vsebnika, ki jo najdemo v Linuxu, in jo prek vmesnika ukazne vrstice in nabora API-jev omogoči končnim uporabnikom.

Številne pogoste komponente aplikacije so zdaj na voljo v predpakiranih vsebnikih Docker, kar olajša uvajanje sveženj programske opreme kot ločenih komponent (model mikro storitev). Kljub temu pa pomaga vedeti, kako se kosi prilegajo od znotraj navzven.

Tako v tem priročniku namestim spletni strežnik Apache v Dockerjev vsebnik in raziščem, kako Docker deluje na tej poti.

Namestite Docker

Ubuntu uporabljam kot temelj gradnje Dockerja. Ubuntu ni le priljubljena in široko uporabljena distribucija, ampak skupina Docker sama uporablja Ubuntu za razvoj, Docker pa podpira Ubuntu Server od različice 12.04 in novejše. Zaradi poenostavitve začnem z navodili, ko uporabljam novo namestitev Ubuntuja 16.04.

Pripravite Ubuntu Linux za Docker

Najprej je treba pridobiti pravilno različico jedra in njegove glave:

$ sudo apt-get install --install-priporoča linux-generic-hwe-16.04

Ta postopek lahko traja nekaj časa in bo po ponovnem zagonu potreben, ko končate:

$ sudo znova zaženite

Pozneje boste morda morali nadgraditi tudi druge pakete v sistemu:

$ sudo apt-get posodobitev

$ sudo apt-get nadgradnja

Namestite Docker v Ubuntu

Namestitev Dockerja na distribucije CentOS, Fedora, Debian, Ubuntu in Raspbian Linux je enostavna s pomočjo skripte lupine, ki jo lahko prenesete s //get.docker.com/. Za to boste potrebovali curl ukaz. Če želite dobiti najnovejšo različico curl:

sudo apt-get namestite kodro

Ko enkrat curl nameščen, prenesite namestitveni skript in ga nastavite, da se izvaja:

curl -s //get.docker.com | sudo sh

Ko se skript konča z namestitvijo, se prikaže opomba, kot je naslednja, s podrobnostmi o namestitvi različice Dockerja, tako odjemalske kot strežniške komponente:

Spodaj si oglejte podrobnosti o dodajanju nekorenskih uporabnikov v Docker. To je priročno storiti, če pa to storite, je priporočljivo ustvariti nekorenskega uporabnika posebej za delo z Dockerjem in za nobeno drugo funkcijo. Zaradi te vadnice pa ostajam pri uporabi sudo za zagon Dockerja prek privilegiranega uporabnika.

Zdaj lahko preizkusite osnovni Dockerjev vsebnik:

$ sudo docker zažene -i -t ubuntu / bin / bash

Ta ukaz prenese generično sliko Docker Ubuntu (v skladu z ubuntu parameter) in zaženite / bin / bash ukaz v tem vsebniku. The -jaz in -t možnosti odprejo standardni vhod oziroma psevdo TTY.

Če je uspešen, bi morali videti ime gostitelja v ukaznem pozivu, da se spremeni v nekaj takega root @ 216b04387924: / #, ki označuje ID številko (in ime gostitelja) vašega novega zagnanega vsebnika. Če želite zapustiti, vnesite izhod, enako kot bi zapustili katero koli sejo lupine.

Zdaj bi morali imeti na svojem strežniku funkcionalno namestitev Dockerja. Lahko ga preizkusite in dobite osnovne informacije s pomočjo informacije o dockerju ukaz:

$ sudo docker info

Rezultat informacije o dockerju ukaz med drugimi ustreznimi informacijami prikazuje število vsebnikov in slik. Upoštevajte, da je lahko precej dolgotrajen; ta primer prikazuje samo zadnjo od dveh strani.

Zadnja sprememba, ki jo boste morali izvesti, če uporabljate požarni zid Ubuntu UFW, je omogočanje posredovanja paketov. Ali UFW deluje, lahko preverite tako, da vnesete naslednje:

$ sudo ufw status

Če ukaz vrne status neaktivnega, lahko preskočite naslednji korak. V nasprotnem primeru boste morali urediti konfiguracijsko datoteko UFW / etc / default / ufw in spremeniti politiko za posredovanje iz POPUST do SPREJEM. Če želite to narediti z urejevalnikom Nano, vnesite naslednje:

$ sudo nano / etc / default / ufw

In spremenite to vrstico:

DEFAULT_FORWARD_POLICY = "PAD"

Za to:

DEFAULT_FORWARD_POLICY = "SPREJMI"

Datoteko shranite in zaženite:

$ sudo ufw ponovno naloži

Delo s slikami Docker in vsebniki Docker

Docker zabojniki so veliko bolj učinkoviti kot virtualni stroji. Kadar vsebnik ne izvaja postopka, je popolnoma v mirovanju. Za vsebnike Dockerja lahko mislite, da so samostojni procesi - kadar se ne izvajajo aktivno, razen shranjevanja ne porabijo nobenih drugih virov.

Aktivne in neaktivne vsebnike si lahko ogledate s pomočjo docker ps ukaz:

# Ta ukaz bo prikazal VSE vsebnike v sistemu

$ sudo docker ps -a

# Tu bodo prikazani samo RUNNING vsebniki

$ sudo docker ps

Vse ukaze, ki so na voljo, si lahko ogledate s preprostim vnosom docker. Za posodobljeno sestavo vseh ukazov, njihovih možnosti in popolne opise glejte uradno dokumentacijo odjemalca ukazne vrstice.

Ko sem tekel docker run prej ta ukaz samodejno potegnil slika vsebnika Ubuntu iz registrske storitve Docker Hub. Večino časa pa boste želeli slike kontejnerjev v lokalni predpomnilnik potegniti pred časom in ne na zahtevo. Če želite to narediti, uporabite docker pull, Všečkaj to:

$ sudo docker pull ubuntu

Celoten seznam slik in skladišč, ki jih je mogoče iskati, je na voljo na Docker Hub.

Slike Dockerja v primerjavi s posodami

Na tej točki je vredno razložiti, kako slike, vsebniki in postopek vlečenja / potiskanja delujejo skupaj.

Docker posode so zgrajene iz slike, ki so v bistvu lupine operacijskih sistemov, ki vsebujejo potrebne binarne datoteke in knjižnice za zagon aplikacij v vsebniku.

Slike so označene zoznake, v bistvu metapodatki, ki omogočajo enostavno shranjevanje in vlečenje različnih različic slike. Seveda je eno sliko mogoče povezati z več oznakami: ubuntu: 16.04, ubuntu: xenial-20171201, ubuntu: xenial, ubuntu: najnovejši.

Ko sem tipkal docker vleči ubuntu prej sem iz repozitorija Ubuntu potegnil privzeto sliko Ubuntu, ki je slika označena najnovejši. Z drugimi besedami, ukaz docker vleči ubuntu je enakovredno docker pull ubuntu: najnovejši in (v času pisanja tega) docker pull ubuntu: xenial

Če sem vtipkal:

$ sudo docker pull -a ubuntu

Jaz bi puledl vse slike ( -a flag) v odlagališču Ubuntu v moj lokalni sistem. Večinoma pa boste želeli privzeto sliko ali določeno različico. Če želite na primer sliko za Ubuntu Saucy Salamander, jo uporabite docker pull -a ubuntu: pogumen da s tega repoja pridobim sliko s to oznako.

Enaka logika za repo posnetki in oznakami velja za druge manipulacije s slikami. Če bi potegnil drzen po zgornjem primeru bi ga zagnali s tipkanjem sudo docker zaženi -i -t ubuntu: pogumen / bin / bash. Če tipkatesudo docker slika rm ubuntu, da odstranite ubuntu slika, bo odstranila samo sliko, ki je označena najnovejši . Če želite odstraniti slike, ki niso privzete, na primer Ubuntu Saucy, morate vključiti ustrezno oznako:

sudo docker slika rm ubuntu: pogumen

Dockerjeva slika in potek dela vsebnika

Nazaj na delo s slikami. Ko izvlečete sliko, kakršna koli že je, iz nje ustvarite aktivni vsebnik (kot sem že pokazal) z izvajanjem docker run ukaz. Ko dodate programsko opremo in spremenite vse nastavitve v vsebniku, lahko iz teh sprememb ustvarite novo sliko z uporabo docker storiti ukaz.

Pomembno je omeniti, da Docker shranjuje delte ali spremembe samo na slikah, ki so zgrajene iz drugih slik. Ko ustvarjate lastne slike, so v novi sliki shranjene samo spremembe, ki jih naredite na osnovni sliki, ki se poveže z osnovno sliko za vse njene odvisnosti. Tako lahko ustvarite slike, ki imajo navidezno velikost 266 MB, vendar zaradi te učinkovitosti na disku zavzamejo le nekaj megabajtov.

Popolnoma konfigurirane vsebnike lahko nato potisnete navzgor do osrednjega repozitorija, da jih uporabite drugje v organizaciji ali celo javno delite. Na ta način lahko razvijalec aplikacije objavi javni vsebnik za aplikacijo ali pa ustvarite zasebne repozitorije za shranjevanje vseh vsebnikov, ki jih interno uporablja vaša organizacija.

Iz vsebnika ustvarite novo sliko Dockerja

Zdaj, ko bolje razumete, kako delujejo slike in vsebniki, nastavimo vsebnik spletnega strežnika Apache in ga naredimo trajnega.

Začnite z novim vsebnikom Docker

Najprej morate zgraditi nov zabojnik. To lahko storite na nekaj načinov, a ker morate zagnati nekaj ukazov, zaženite korensko lupino v novem vsebniku:

$ sudo docker zaženi -i -t --name apache_web ubuntu / bin / bash

Tako se ustvari nov vsebnik z edinstvenim ID-jem in imenom apache_web. Omogoča vam tudi korensko lupino, ker ste jo navedli / bin / bash kot ukaz za zagon. Zdaj namestite spletni strežnik Apache z apt-get:

root @ d7c8f02c3c8c: / # apt-get update

root @ d7c8f02c3c8c: / # apt-get namestite apache2

Upoštevajte, da vam ni treba uporabljati sudo, ker deluje kot root znotraj posode. Upoštevajte, da vi naredi treba teči apt-get posodobitev, ker je spet seznam paketov znotraj posode ni enak tistemu zunaj njega.

Običajno apt-get se prikaže izhod in paket Apache2 je nameščen v vašem novem vsebniku. Ko je namestitev končana, zaženite Apache, namestite curl in preizkusite namestitev, vse iz vsebnika:

root @ d7c8f02c3c8c: / # service apache2 start

root @ d7c8f02c3c8c: / # apt-get install curl

root @ d7c8f02c3c8c: / # curl // localhost

Po zadnjem ukazu bi morali videti konzolo HTML privzete strani Apache v konzoli. To pomeni, da je naš strežnik Apache nameščen in deluje v vašem vsebniku.

Če bi to počeli v produkcijskem okolju, bi nato Apache konfigurirali po svojih zahtevah in namestili aplikacijo, da bo služil. Docker letd imenike zunaj vsebnika preslika na poti znotraj njega, zato je en pristop, da svojo spletno aplikacijo shranite v imenik na gostitelju in jo s preslikavo omogočite vidni vsebniku.

Ustvarite zagonski skript za vsebnik Docker

Ne pozabite, da se Dockerjev vsebnik izvaja le, dokler so njegovi procesi ali procesi aktivni. Torej, če se postopek, ki ga zaženete ob prvem zagonu vsebnika, premakne v ozadje, kot sistemski demon, bo Docker zaustavil vsebnik. Zato morate ob zagonu vsebnika v ospredju zagnati Apache, tako da vsebnik ne zapusti takoj, ko se zažene.

Ustvarite skript, startapache.sh, v / usr / local / sbin:

# Morda boste morali najprej namestiti Nano znotraj vsebnika

root @ d7c8f02c3c8c: / # apt-get install nano

root @ d7c8f02c3c8c: / # nano /usr/local/sbin/startapache.sh

V datoteko startapache.sh dodajte te vrstice:

#! / bin / bash

. / etc / apache2 / envvars

/ usr / sbin / apache2 -D OZADJE

Napišite spremembe in shranite datoteko. Nato ga naredite izvedljiv:

root @ d7c8f02c3c8c: / # chmod + x /usr/local/sbin/startapache.sh

Vse to, kar naredi majhen skript, je, da vnese ustrezne spremenljivke okolja za Apache in v ospredju zažene postopek Apache.

Končali ste s spreminjanjem vsebine vsebnika, tako da ga lahko zapustite s tipkanjem izhod. Ko zapustite posodo, se bo posoda ustavila.

Zaprite vsebnik, da bo ustvaril novo sliko Dockerja

Zdaj moraš zavezati vsebnik, da shranite spremembe, ki ste jih naredili:

$ sudo docker objavi apache_web local: apache_web

S prevzemom boste vsebnik shranili kot novo sliko in vrnili enolični ID. Argument lokalno: apache_web bo povzročil, da se zaveza shrani v lokalno repozitorij z imenom lokalno z oznako apache_web.

To lahko vidite tako, da zaženete ukaz slike sudo dockerja:

REPOSITORY TAG IMAGE ID Ustvarjena VIRTUALNA VELIKOST

lokalni apache_web d95238078ab0 pred 4 minutami 284,1 MB

Upoštevajte, da se bodo natančne podrobnosti vaše slike - ID slike, velikost vsebnika - razlikovale od mojega primera.

Docker posode so zasnovane tako, danespremenljiv. Kadar koli v vsebnik vnesete spremembe, se rezultati zapišejo v povsem nov vsebnik, nikoli v izvirnik. Če želite zamenjati Apache z recimo Nginxom, začnete z izvirnikom ubuntu: najnovejši vsebniku dodajte Nginx in rezultate shranite kot povsem nov vsebnik z imenom nekako lokalno: nginx.

Razumevanje osnov Dockerjevega mreženja

Zdaj, ko imate našo sliko, lahko zaženete naš vsebnik in začnete prikazovati strani. Preden pa to storite, naj si vzamem trenutek, da razložim, kako Docker ravna z mreženjem.

Ko je Docker nameščen, ustvari tri navidezna omrežja, ki jih lahko uporabljajo vsebniki Dockerja:

  • mostu: To je omrežje, na katerega se vsebniki privzeto povezujejo. Premostitveno omrežje omogoča vsebnikom neposreden pogovor, ne pa tudi gostiteljskemu sistemu.
  • gostitelj: To omrežje omogoča, da gostitelj neposredno vidi vsebnike, kot da bi se katere koli aplikacije v njih izvajale kot lokalne omrežne storitve.
  • nobenega: To je v bistvu nično ali povratno omrežje. Posoda, povezana z nikomer, ne vidi ničesar drugega kot samo sebe.

Če želite zagnati vsebnik in omogočiti komunikacijo z drugimi vsebniki in zunanjim svetom, morate vrata iz tega vsebnika ročno preslikati na gostitelja. Zaradi mojega primera lahko to storite v ukazni vrstici, ko zaženete novo ustvarjeni vsebnik:

$ sudo docker run -d -p 8080: 80 --name apache local: apache_web /usr/local/sbin/startapache.sh

Copyright sl.verticalshadows.com 2024

$config[zx-auto] not found$config[zx-overlay] not found