Docker attēla izveide no Scratch

Creating Docker Image From Scratch



Docker galvenā priekšrocība salīdzinājumā ar jebkuru citu konteinerizācijas tehnoloģiju ir tā, ka Docker ir paredzēts izstrādātājiem un to augšupvērstām lietojumprogrammām. Kaut arī pareizas konteinerizācijas tehnoloģijas, piemēram LXC , Zonas un Cietumi ir mērķētas no operāciju viedokļa vai, vienkāršāk sakot, šīs platformas aizstāj virtuālās mašīnas, kas darbojas mākonī. Kur tas ir, Docker aizstāj paketes un izpildāmos bināros failus.

Brīvi runājot, Docker arvien vairāk kļūst par universālu pakotņu pārvaldnieku, kas darbojas visās iespējamajās Linux platformās. Tas aizņem konteinerus un izmanto tos, lai atrisinātu pilnīgi citu problēmu, ar kuru saskaras izstrādātāji. Problēma ir tā, ka izstrādātāji lietojumu rakstīšanai izmanto savu darbvirsmas operētājsistēmu (piemēram, Windows, macOS vai Linux ar tonnu ar darbvirsmu saistītu pakotņu). Viņu rakstītā lietojumprogramma bieži darbojas pilnīgi citā operētājsistēmā uz servera kaut kur ar kādu Linux izplatīšanu, kas ir pilnīgi atšķirīga no izstrādātāja klēpjdatora.







Ar Docker ideja ir tāda, ka jūsu lietojumprogramma ir iepakota kā Docker attēls. Docker uzdevums ir uzņemt šo attēlu un palaist to kā konteinerizētu lietojumprogrammu jums. Konteinerizācija nozīmē, ka lietojumprogramma un tās atkarības darbosies izolētā vidē, kas var pilnībā atšķirties no izstrādātāja klēpjdatora un pat ražošanas servera. Kamēr viņi abi atbalsta Docker, viņi abi var palaist vienu un to pašu lietojumprogrammu tieši tādā pašā veidā.



Dokera attēla anatomija

Kā minēts iepriekš, lietotne Docker darbosies saskaņotā vidē. Tagad jautājums ir, kā mēs varam izveidot šo vidi? Lielākā daļa lietojumprogrammu attēlu importētu Docker bāzes attēlu un izveidotu savu lietojumprogrammu virs tā.



Lietojumprogrammas tiek veidotas no programmatūras slāņiem. WordPress konteinera attēls tiek veidots, izmantojot httpd konteinera attēlu, kas savukārt ir veidots virs Ubuntu attēla. Attēls, uz kura tiek veidots jaunāks attēls, Docker terminoloģijā ir pazīstams kā PARENT IMAGE. Dokumentu failā (nedaudz vēlāk mēs sapratīsim, ko nozīmē Dockerfile) šis vecāku attēls ir minēts faila augšpusē, kā parādīts zemāk:





NO Ubuntu: 18.04
## Pārējais Docker fails

Šis Docker fails, izpildot, pārvērš jūsu lietojumprogrammu par Docker attēlu (sava ​​veida bināro failu), kuru pēc tam varat pārvietot uz reģistru, no kurienes to var izvilkt, lai izveidotu jaunus konteinerus citur. Tomēr viņiem visiem būs Ubuntu: 18.04 kā pamata attēls, un tie darbosies tā, it kā tā būtu Ubuntu sistēma, kurā tie darbojas.

Iespējams, jūs to pamanījāt, mēģinot izvilkt jaunu dokstara attēlu.



Docker attēla izveide no Scratch

Tas parāda, cik slāņu tiek izvilkts, pirms tiek ieviesta faktiskā lietojumprogramma (kas var būt tikai daži megabaiti).

Šī iemesla dēļ mēs vēlētos izveidot tā dēvēto pamata attēlu. Kas nav būvēts virs visa cita. Atslēgvārds scratch tiek izmantots, lai norādītu, ka šis slānis nav veidots uz cita pamata. Tāpat kā:

No nekā
## Pārējais Dokerfails

Vispirms mēs izveidosim vienkāršu sveikas pasaules lietojumprogrammu un pēc tam izdomāsim, kas būs pārējais Dockerfile. Uzņēmēja sistēma ir Ubuntu: 18.04 LTS, un mēs eksperimentam izmantojam Docker versiju 17.12.1-ce.

Statiskā binārā izveide

Docker konteineri ir procesu kopums, kas darbojas izolēti no pārējās operētājsistēmas. Vienīgais, ar ko saskaras process, ir kodols. Kodols ir atbildīgs par šo procesu plānošanu centrālajā procesorā, atmiņas pārvaldību un dažus citus pamata rezervēšanas uzdevumus.

Bet lielākā daļa augsta līmeņa lietojumprogrammu ir atkarīgas no daudzām sistēmas bibliotēkām (piemēram glibc, musl, klibc utt ) un daudzas izpildlaika atkarības, piemēram, Python vai Node.js vai Java Runtime. Lietojumprogrammas binārajā failā nav pieejamas visas bibliotēkas, taču, uzsākot izpildi, tās tiek izsauktas no saimniekdatora operētājsistēmas.

Tā kā mēs cenšamies izveidot attēlu no nulles, mēs nesaņemsim šos jaukumus. Tātad mūsu lietojumprogrammai jābūt statiskam failam vai atsevišķam izpildāmam failam.

Sāksim, izveidojot mapi ar nosaukumu MyDockerImage un izveidojot tajā failu hello.cc.

$mkdirMyDockerImage
$CDMyDockerImage
$pieskartiessveiki.cc

Atveriet hello.cc, izmantojot savu iecienīto teksta redaktoru, un pievienojiet tam šādas rindiņas.

#iekļaut
izmantojot nosaukumvietas std;
intgalvenais(){
izmaksas<< 'Sveiki! Šis ziņojums nāk no konteinera n';
atgriezties 0;

}

Šī ir vienkārša C ++ programma, kas izdrukā Sveiki! Šī ziņa…

Iepriekš minēto iemeslu dēļ mēs to apkoposim, izmantojot statisko karogu. Izmantotais kompilators ir g ++ (Ubuntu 7.3.0-16ubuntu3) 7.3.0.

Lai apkopotu programmu, tajā pašā direktorijā palaidiet šādu komandu:

$ g++ -o labdien-statisksSveiki.DC

Tas rada bināro izpildāmo failu sveiki tajā pašā direktorijā. Tas ir mūsu statiskais fails. Pārbaudiet, vai tas darbojas, kā paredzēts, terminālī minot faila nosaukumu.

$./Sveiki

Tagad mēs esam gatavi konteinerizēt šo vienkāršo programmu.

Dockerfile

Dockerfile sastāv no noteikumu kopuma, kas ņem jūsu lietojumprogrammu failus (piemēram, bināros failus, avota failus utt.), Kā arī dažādus konfigurācijas parametrus, piemēram, failu sistēmas izkārtojumu, atklātos portus utt. Un pārvērš tos Docker attēla failā. Pēc tam varat koplietot attēla failu ar ikvienu, kurš vēlas palaist šo lietojumprogrammu.

Mēs neiedziļināsimies visās Dockerfile pieejamajās opcijās, tā vietā mēs uzrakstīsim ļoti minimālistisku Dockerfile. Tajā pašā direktorijā, kur atrodas jūsu labdien izpildāmais fails, izveidojiet tukšu failu ar nosaukumu Dockerfile.

$pieskartiesDockerfile

Atveriet to ar savu iecienītāko teksta redaktoru un ierakstiet tajā šādas rindas:

No nekā
PIEVIENOT sveiki/
CMD['/Sveiki']

ieskrāpēt nav vecāku attēls. Tas drīzāk norāda Docker, ka attēls nav veidots virs jebkura cita attēla. Tas ir veidots no nulles. ADD komanda paņemtu statisko bināro nosaukumu | _+_ | no pašreizējā direktorija un pievienotu to attēla faila saknes direktorijam. Kad mēs beidzot palaistu konteineru, pamatojoties uz šo attēlu, labdien izpildāmā fails būs redzams pašā saknes direktorijā | _+_ |

Visbeidzot, CMD līnijai ir virkne /Sveiki šī virkne tiks izpildīta kā čaulas komanda ikreiz, kad no šī attēla tiks izveidots konteiners, tādējādi binārais fails, ko pievienojām savam konteineram, un izdrukās ziņojumu, ko rakstījām savā lietotnē.

Veidosim attēlu, atsaucoties uz docker būvēt komanda, kas iet caur Dockerfile saturu un ģenerē attēlu. Palaidiet šādu komandu tajā pašā direktorijā kā Dockerfile un izpildāmā binārā.

$docker būvēt-tagiSveiki .

The - sveiki karodziņš nosaka attēla nosaukumu Sveiki un punkts ( . ) beigās stāsta docker būvēt lai apskatītu pašreizējo Dockerfile un saistītā satura direktoriju.

Docker konteinera palaišana

Lai pārbaudītu, vai mūsu izveidotais attēls tiek parādīts attēlu sarakstā, palaidiet:

$dokeru attēli

Ievērojiet, cik mazs sveiciena attēls ir salīdzinājumā ar citiem attēliem. Jebkurā gadījumā tas ir gatavs darbam kā konteiners,

$docker palaist sveiki

Tieši tā! Jūs izveidojāt savu pirmo minimālisma konteineru no nulles.

Citas iespējas

Lai gan attēlu izveide no nulles vienmēr ir iespēja, cilvēki bieži mēdz veidot attēlus no citiem vieglajiem Linux izplatījumiem. Piemēram, attēli, piemēram, Alpine un Busybox, ir patiešām viegla vide ar mazākām bibliotēkām, piemēram, musl, nevis glibc.

Izmantojot tos kā vecāku attēlu, izmantojot NO Alpu: jaunākais radītu arī mazākus attēlus. Tā kā bāzes attēli ir tikai 2–5 MB lieli. Paziņojiet mums, vai ir kāda ar Docker saistīta tēma, kuru, iespējams, vēlēsities, lai mēs apskatītu tālāk. Jūs varat mūs sasniegt Twitter , Facebook vai abonējiet mūs pa e -pastu.