Dockeri pildi loomine Scratchist

Creating Docker Image From Scratch



Dockeri peamine eelis mis tahes muu konteineritehnoloogia ees on see, et Docker on suunatud arendajatele ja nende täiendavatele rakendustele. Kuigi sobivad konteineritehnoloogiad nagu LXC , Tsoonid ja Vanglad on suunatud operatsioonide vaatenurgast või lihtsustatult öeldes need platvormid asendavad pilves töötavaid virtuaalseid masinaid. Kui see on olemas, asendab Docker pakette ja käivitatavaid binaarfaile.

Vabalt öeldes on Docker üha enam universaalse paketihalduri moodi, mis töötab kõigil võimalikel Linuxi platvormidel. See võtab konteinerid ja kasutab neid täiesti erineva probleemi lahendamiseks, millega arendajad silmitsi seisavad. Probleem on selles, et arendajad kasutavad rakenduste kirjutamiseks oma töölaua operatsioonisüsteemi (nt Windows, macOS või Linux koos tonni töölauaga seotud pakettidega). Nende kirjutatud rakendus töötab sageli täiesti erineval opsüsteemil kuskil asuvas serveris, kus Linuxi levitamine on täiesti erinev arendaja sülearvutist.







Dockeri idee on see, et teie rakendus on pakitud Dockeri pildina. Dockeri ülesanne on see pilt teha ja seda teie jaoks konteinerrakendusena käivitada. Konteinerisse paigutamine tähendab, et rakendus ja selle sõltuvused töötavad isoleeritud keskkonnas, mis võib täielikult erineda arendaja sülearvutist ja isegi tootmisserverist. Kuni nad mõlemad toetavad Dockerit, saavad mõlemad sama rakendust käitada täpselt samal viisil.



Dockeri kujutise anatoomia

Nagu varem mainitud, töötab Dockeri rakendus kokkulepitud keskkonnas. Nüüd on küsimus selles, kuidas seda keskkonda luua? Enamik rakenduse pilte impordiks Dockeri põhipilti ja ehitaks selle peale rakenduse.



Rakendused on valmistatud tarkvara kihtidest. Wordpressi konteineri kujutis on üles ehitatud httpd konteineripildi abil, mis omakorda on ehitatud Ubuntu pildi peale. Kujutist, millele uuem pilt ehitatakse, nimetatakse Dockeri terminoloogias vanempildiks. Dockerfile'is (jõuame Dockerfile'i tähenduseni veidi hiljem) mainitakse seda vanempilti faili ülaosas, nagu allpool näidatud:





Ubuntust: 18.04
## Ülejäänud Docker -fail

See Docker -fail teisendamisel muudab teie rakenduse Dockeri pildiks (omamoodi binaarfailiks), mille saate seejärel saata registrisse, kust selle saab tõmmata, et luua uusi konteinereid mujale. Nende kõigi põhipildiks on aga Ubuntu: 18.04 ja nad töötavad nii, nagu oleks tegemist Ubuntu süsteemiga, milles nad töötavad.

Võib -olla olete seda märganud, kui proovite uut doki pilti tõmmata.



Dockeri pildi loomine Scratchist

See näitab, kui palju kihte tõmmatakse enne tegeliku rakenduse (mis võib olla vaid mõne megabaidi suurune) sisestamist.

Sel põhjusel tahaksime luua nn põhipildi. Mis ei ole ehitatud millegi muu peale. Märksõna kriimustus näitab, et see kiht ei ole millegi muu peale ehitatud. Nii nagu:

Algusest
## Ülejäänud Dcokerfile

Esmalt loome lihtsa teremaailma rakenduse ja seejärel selgitame välja, milline saab olema ülejäänud Dockerfile. Hostisüsteem on Ubuntu: 18.04 LTS ja katse jaoks kasutame Dockeri versiooni 17.12.1-ce.

Staatilise binaarfaili loomine

Dockeri konteinerid on protsesside kogum, mis töötab ülejäänud operatsioonisüsteemist eraldatuna. Ainus, millega see protsess kokku puutub, on kernel. Kernel vastutab nende protsesside ajastamise eest CPU -s, mäluhalduse ja mõne muu põhilise broneerimisülesande eest.

Kuid enamik kõrgetasemelisi rakendusi sõltub paljudest süsteemiteekidest (nt glibc, musl, klibc jne ) ja palju käitusaja sõltuvusi, näiteks Python või Node.js või Java Runtime. Rakenduse binaarfailil pole kõiki raamatukogusid saadaval, kuid käivitades käivitab see need teegid hosti operatsioonisüsteemist.

Kuna me püüame luua pilti nullist, ei saaks me neid toredusi. Seega peab meie rakendus olema staatiline fail või eraldiseisev käivitatav fail.

Alustuseks loome kausta nimega MyDockerImage ja loome selle sisse faili hello.cc.

$mkdirMyDockerImage
$CDMyDockerImage
$puudutadatere.cc

Avage hello.cc oma lemmiktekstiredaktori abil ja lisage selle sisse järgmised read.

#kaasake
kasutades nimeruumi std;
intpeamine(){
maksma<< 'Tere! See teade pärineb konteinerist n';
tagasi 0;

}

See on lihtne C ++ programm, mis prindib Tere! See sõnum…

Varem käsitletud põhjustel koostame selle staatilise lipu abil. Kasutatav kompilaator on g ++ (Ubuntu 7.3.0-16ubuntu3) 7.3.0.

Programmi kompileerimiseks käivitage samas kataloogis järgmine käsk:

$ g++ -o tere-staatilineTere.DC

See loob samas kataloogis binaarse käivitatava faili tere. See on meie staatiline fail. Kontrollige, kas see töötab ettenähtud viisil, mainides terminali failinime.

$./Tere

Nüüd oleme valmis selle lihtsa programmi konteinerisse mahutama.

Dockerfile

Dockerfile koosneb reeglite kogumist, mis võtab teie rakenduse failid (nt binaarfailid, lähtefailid jne) koos erinevate konfiguratsiooniparameetritega, nagu failisüsteemi paigutus, avatud pordid jne, ja muudab need Dockeri pildifailiks. Seejärel saate pildifaili jagada kõigiga, kes soovivad seda rakendust käivitada.

Me ei uuriks kõiki Dockerfile'i jaoks saadaolevaid võimalusi, selle asemel kirjutame väga minimalistliku Dockerfile. Looge samas kataloogis, kus asub teie tere käivitatav fail, tühi fail nimega Dockerfile.

$puudutadaDockerfile

Avage see oma lemmiktekstiredaktoriga ja kirjutage sellele järgmised read:

Algusest
LISA tere/
CMD['/Tere']

kriimustada ei ole lapsevanema pilt. Pigem näitab see Dockerile, et pilt ei ole üles ehitatud ühegi teise pildi peale. See on nullist üles ehitatud. Käsk ADD võtab staatilise binaarfaili nimega | _+_ | praegusest kataloogist ja lisab selle pildifaili juurkataloogi. Kui me selle pildi põhjal lõpuks konteineri käivitaksime, näeksime käivitatavat tervist juurkataloogis aadressil | _+_ |

Lõpuks on CMD real string /Tere seda stringi täidetakse shellikäskuna alati, kui sellest pildist luuakse konteiner, seega binaarfail, mille me oma konteinerisse lisasime ja prindime sõnumi, mille me oma rakenduses kirjutasime.

Loome pildi, kutsudes esile doki ehitamine käsk, mis läbiks Dockerfile'i sisu ja genereeriks pildi. Käivitage järgmine käsk samas kataloogis kui Dockerfile ja käivitatav kahendfail.

$doki ehitamine-siltTere .

The - tere tere lipp määrab pildi nimeks Tere ja punkt ( . ) lõpus räägib doki ehitamine otsida Dockerfile'i ja sellega seotud sisu praegust kataloogi.

Dockeri konteineri käitamine

Et kontrollida, kas äsja loodud pilt kuvatakse piltide loendis, tehke järgmist.

$doki pildid

Pange tähele, kui väike terepilt on teiste piltidega võrreldes. Igal juhul on see konteinerina kasutamiseks valmis,

$dokk jookse tere

See on kõik! Lõite oma esimese minimalistliku konteineri nullist.

Muud valikud

Kuigi piltide loomine nullist on alati võimalus, kipuvad inimesed sageli pilte looma teistest kergetest Linuxi distributsioonidest. Näiteks sellised pildid nagu alpine ja busybox on tõeliselt kerged keskkonnad, kus glibci asemel on väiksemad raamatukogud nagu musl.

Kasutades neid oma vanempildina, kasutades ALPINE: uusim tulemuseks oleksid ka väiksemad pildid. Kuna põhipiltide suurus on ainult 2–5 MB. Andke meile teada, kas on mõni Dockeriga seotud teema, mida võiksite järgmisena käsitleda. Võite meiega ühendust võtta Twitter , Facebook või tellige meid e -posti teel.