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:
Rezultat 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: Č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 In spremenite to vrstico: Za to: Datoteko shranite in zaženite: 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 $ sudo docker ps Vse ukaze, ki so na voljo, si lahko ogledate s preprostim vnosom Ko sem tekel Celoten seznam slik in skladišč, ki jih je mogoče iskati, je na voljo na Docker Hub. 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: Ko sem tipkal Če sem vtipkal: Jaz bi puledl vse slike ( Enaka logika za repo posnetki in oznakami velja za druge manipulacije s slikami. Če bi potegnil 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 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. Zdaj, ko bolje razumete, kako delujejo slike in vsebniki, nastavimo vsebnik spletnega strežnika Apache in ga naredimo trajnega. 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: Tako se ustvari nov vsebnik z edinstvenim ID-jem in imenom root @ d7c8f02c3c8c: / # apt-get namestite apache2 Upoštevajte, da vam ni treba uporabljati Običajno 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. 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: root @ d7c8f02c3c8c: / # apt-get install nano V datoteko startapache.sh dodajte te vrstice: . / etc / apache2 / envvars / usr / sbin / apache2 -D OZADJE Napišite spremembe in shranite datoteko. Nato ga naredite izvedljiv: 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 Zdaj moraš zavezati vsebnik, da shranite spremembe, ki ste jih naredili: S prevzemom boste vsebnik shranili kot novo sliko in vrnili enolični ID. Argument To lahko vidite tako, da zaženete ukaz 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 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: Č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 info
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.$ sudo ufw status
POPUST
do SPREJEM
. Če želite to narediti z urejevalnikom Nano, vnesite naslednje:$ sudo nano / etc / default / ufw
DEFAULT_FORWARD_POLICY = "PAD"
DEFAULT_FORWARD_POLICY = "SPREJMI"
$ sudo ufw ponovno naloži
Delo s slikami Docker in vsebniki Docker
docker ps
ukaz:# Ta ukaz bo prikazal VSE vsebnike v sistemu
$ sudo docker ps -a
# Tu bodo prikazani samo RUNNING vsebniki
docker
. Za posodobljeno sestavo vseh ukazov, njihovih možnosti in popolne opise glejte uradno dokumentacijo odjemalca ukazne vrstice.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
Slike Dockerja v primerjavi s posodami
ubuntu: 16.04
, ubuntu: xenial-20171201
, ubuntu: xenial
, ubuntu: najnovejši
.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
. $ sudo docker pull -a ubuntu
-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.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
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.Iz vsebnika ustvarite novo sliko Dockerja
Začnite z novim vsebnikom Docker
$ sudo docker zaženi -i -t --name apache_web ubuntu / bin / bash
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
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.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
Ustvarite zagonski skript za vsebnik Docker
# Morda boste morali najprej namestiti Nano znotraj vsebnika
root @ d7c8f02c3c8c: / # nano /usr/local/sbin/startapache.sh
#! / bin / bash
root @ d7c8f02c3c8c: / # chmod + x /usr/local/sbin/startapache.sh
izhod
. Ko zapustite posodo, se bo posoda ustavila.Zaprite vsebnik, da bo ustvaril novo sliko Dockerja
$ sudo docker objavi apache_web local: apache_web
lokalno: apache_web
bo povzročil, da se zaveza shrani v lokalno repozitorij z imenom lokalno
z oznako apache_web
.slike sudo dockerja
:REPOSITORY TAG IMAGE ID Ustvarjena VIRTUALNA VELIKOST
ubuntu: najnovejši
vsebniku dodajte Nginx in rezultate shranite kot povsem nov vsebnik z imenom nekako lokalno: nginx
.Razumevanje osnov Dockerjevega mreženja
$ sudo docker run -d -p 8080: 80 --name apache local: apache_web /usr/local/sbin/startapache.sh