Stvaranje Docker slike od ogrebotina

Creating Docker Image From Scratch



Glavna prednost Dockera u odnosu na bilo koju drugu tehnologiju kontejnerizacije je to što je Docker namijenjen programerima i njihovim aplikacijama za nadogradnju. Dok odgovarajuće tehnologije kontejnerizacije poput LXC , Zone i Zatvori ciljane su iz operativne perspektive ili, pojednostavljeno rečeno, ove platforme zamjena su za virtualne strojeve koji rade na oblaku. U tom slučaju, Docker je zamjena za pakete i izvršne binarne datoteke.

Slobodno govoreći, Docker postaje sve više poput univerzalnog upravitelja paketa koji radi na svim mogućim Linux platformama. Potrebni su spremnici i koriste ih za rješavanje potpuno drugog problema s kojim se programeri suočavaju. Problem je u tome što programeri koriste svoj stolni operacijski sustav (poput Windows -a, macOS -a ili Linuxa s tonom desktop paketa) za pisanje aplikacija. Aplikacija koju pišu često se izvodi na potpuno drugom operacijskom sustavu na poslužitelju negdje s nekom Linux distribucijom potpuno različitom od one na prijenosnom računalu razvojnog programera.







S Dockerom je ideja da vaša aplikacija dolazi pakirana kao Docker slika. Posao Dockera je uzeti ovu sliku i pokrenuti je kao kontejnersku aplikaciju za vas. Biti spremnik znači da će se aplikacija i njezine ovisnosti izvoditi u izoliranom okruženju koje se može potpuno razlikovati od prijenosnog računala razvojnog programera, pa čak i od poslužitelja za proizvodnju. Sve dok oboje podržavaju Docker, oboje mogu pokrenuti istu aplikaciju na potpuno isti način.



Anatomija Docker slike

Kao što je ranije spomenuto, Docker aplikacija će raditi u dogovorenom okruženju. Sada se postavlja pitanje kako stvoriti takvo okruženje? Većina slika aplikacija uvezla bi Docker osnovnu sliku i izgradila svoju aplikaciju na njoj.



Aplikacije se izrađuju od slojeva softvera. Slika kontejnera za wordpress izrađena je pomoću slike httpd kontejnera koja se, pak, gradi na vrhu Ubuntu slike. Slika na kojoj se gradi novija slika poznata je kao RODITELJSKA SLIKA u terminologiji Docker. U Dockerfileu (nešto kasnije ćemo doći do značenja Dockerfilea), ova se roditeljska slika spominje na vrhu datoteke kao što je prikazano u nastavku:





OD Ubuntu: 18.04
## Ostatak Docker datoteke

Ovaj Dockerdatoteka kada se izvrši pretvara vašu aplikaciju u sliku Dockera (svojevrsnu binarnu datoteku) koju zatim možete gurnuti u registar odakle se može povući za stvaranje novih spremnika na drugom mjestu. Međutim, svi će oni imati Ubuntu: 18.04 kao osnovnu sliku i raditi će kao da je Ubuntu sustav u kojem rade.

Možda ste to primijetili prilikom pokušaja povlačenja nove slike dockera.



Stvaranje Docker slike iz nule

Ovo pokazuje koliko je slojeva povučeno prije nego što se unese stvarna aplikacija (koja može biti veličine samo nekoliko megabajta).

Iz tog razloga želimo stvoriti ono što je poznato kao osnovna slika. Koji nije izgrađen povrh ničega drugog. Ključna riječ scratch koristi se za označavanje da ovaj sloj nije izgrađen na bilo čemu drugom. Ovako:

Od nule
## Ostatak datoteke Dcoker

Prvo ćemo stvoriti jednostavnu aplikaciju hello-world, a zatim shvatiti što će biti ostatak Dockerfilea. Sustav domaćina je Ubuntu: 18.04 LTS, a za eksperiment koristimo Docker verziju 17.12.1-ce.

Stvaranje statičke binarne datoteke

Docker spremnici skup su procesa koji se izvode izolirani od ostatka operacijskog sustava. Jedino s čime je taj proces u dodiru je kernel. Kernel je odgovoran za zakazivanje ovih procesa na CPU -u, upravljanje memorijom i nekoliko drugih osnovnih zadataka čuvanja rezervacija.

No većina aplikacija na visokoj razini ovisi o mnogim knjižnicama sustava (npr glibc, musl, klibc itd ) i puno ovisnosti o vremenu izvođenja poput Pythona ili Node.js -a ili Java Runtime -a. Binarni program aplikacije nema sve biblioteke dostupne u sebi, ali kad započne izvršavanje, poziva te knjižnice iz operacijskog sustava domaćina.

Budući da pokušavamo stvoriti sliku od nule, ne bismo dobili takve ljepote. Dakle, naša aplikacija mora biti statička datoteka ili samostalna izvršna datoteka.

Počnimo stvaranjem mape pod nazivom MyDockerImage i stvaranjem datoteke hello.cc unutar nje.

$mkdirMyDockerImage
$CDMyDockerImage
$dodirpozdrav.cc

Otvorite hello.cc pomoću svog omiljenog uređivača teksta i dodajte sljedeće retke u njega.

#uključi
koristeći imenski prostor std;
intglavni(){
trošak<< 'Zdravo! Ova poruka dolazi iz spremnika n';
povratak 0;

}

Ovo je jednostavan C ++ program koji ispisuje Hello! Ova poruka…

Zbog razloga o kojima smo ranije govorili, sastavit ćemo ovo pomoću statičke zastavice. Prevodilac koji se koristi je g ++ (Ubuntu 7.3.0-16ubuntu3) 7.3.0.

Za sastavljanje programa u istom direktoriju pokrenite sljedeću naredbu:

$ g++ -o zdravo-statičkizdravo.DC

Ovo stvara binarnu izvršnu datoteku hello u istom direktoriju. To je naša statička datoteka. Testirajte radi li kako je predviđeno spominjanjem naziva datoteke u terminalu.

$./zdravo

Sada smo spremni spremiti ovaj jednostavan program.

Dockerfile

Dockerfile se sastoji od skupa pravila koja preuzimaju vaše aplikacijske datoteke (poput binarnih datoteka, izvornih datoteka itd.) Zajedno s različitim konfiguracijskim parametrima poput izgleda datotečnog sustava, otvorenih portova itd. I pretvara ih u datoteku slike Docker. Zatim možete podijeliti slikovnu datoteku sa svima koji žele pokrenuti tu aplikaciju.

Nećemo se baviti svakom opcijom dostupnom za Dockerfile, već ćemo napisati vrlo minimalistički Dockerfile. U istom direktoriju, gdje se nalazi vaša izvršna datoteka hello, stvorite praznu datoteku s imenom Dockerfile.

$dodirDockerfile

Otvorite ga s vašim omiljenim uređivačem teksta i napišite mu sljedeće retke:

Od nule
DODAJ zdravo/
CMD['/zdravo']

ogrepsti nije roditeljska slika. Umjesto toga, Docker ukazuje da slika nije izgrađena na bilo kojoj drugoj slici. Izgrađen je od nule. Naredba ADD uzela bi statički binarni naziv | _+_ | iz trenutnog direktorija i dodala ga u korijenski direktorij slikovne datoteke. Kad bismo konačno pokrenuli spremnik temeljen na ovoj slici, izvršna datoteka hello vidjet će se unutar samog korijenskog direktorija na | _+_ |

Na kraju, CMD linija ima niz /zdravo ovaj će se niz izvršavati kao naredba ljuske kad god se iz ove slike stvori spremnik, dakle binarna datoteka koju smo dodali u naš spremnik i ispisala poruku koju smo napisali u našoj aplikaciji.

Izgradimo sliku pozivanjem na docker build naredba koja bi prošla kroz sadržaj Dockerfile i generirala sliku. Pokrenite sljedeću naredbu u istom direktoriju kao Dockerfile i izvršna binarna datoteka.

$docker build--označitizdravo .

The –Tag pozdrav flag postavlja naziv slike na zdravo i točka ( . ) na kraju priča docker build potražiti Dockerfile i srodni sadržaj u trenutnom direktoriju.

Pokretanje Docker spremnika

Da biste provjerili prikazuje li se slika koju smo upravo stvorili na popisu slika, pokrenite:

$docker slike

Primijetite koliko je zdrava slika mala u usporedbi s drugim slikama. U svakom slučaju, spreman je za rad kao spremnik,

$docker pokreni pozdrav

To je to! Svoj prvi minimalistički spremnik stvorili ste od nule.

Druge opcije

Iako je stvaranje slika od nule uvijek opcija, ljudi često nastoje stvoriti slike iz drugih lakih distribucija Linuxa. Na primjer, slike kao što su alpine i busybox zaista su lagana okruženja s manjim knjižnicama poput musl umjesto glibc.

Koristeći ih kao roditeljsku sliku pomoću IZ alpskog: najnovije rezultiralo bi i manjim slikama. Budući da su osnovne slike veličine samo 2-5 MB. Javite nam postoji li neka tema vezana uz Docker koju biste dalje htjeli obraditi. Možete nas kontaktirati na Cvrkut , Facebook ili se pretplatite na nas putem e -pošte.