Rehellisesti sanottuna Dockerista tulee yhä enemmän universaali paketinhallinta, joka toimii kaikilla mahdollisilla Linux -alustoilla. Se vie kontteja ja käyttää niitä ratkaisemaan täysin erilaisen ongelman, jonka kehittäjät kohtaavat. Ongelmana on, että kehittäjät käyttävät työpöytäkäyttöjärjestelmäänsä (kuten Windows, macOS tai Linux, jossa on paljon työpöytäpaketteja) sovellusten kirjoittamiseen. Heidän kirjoittamansa sovellus toimii usein täysin eri käyttöjärjestelmässä palvelimella jossain Linux -jakelussa täysin eri tavalla kuin kehittäjän kannettava tietokone.
Dockerin ideana on, että sovelluksesi on pakattu Docker -kuvaksi. Dockerin tehtävä on ottaa tämä kuva ja käyttää sitä konttipohjaisena sovelluksena sinulle. Konttipakkaus tarkoittaa, että sovellus ja sen riippuvuudet toimivat eristetyssä ympäristössä, joka voi poiketa täysin kehittäjän kannettavasta tietokoneesta ja jopa tuotantopalvelimesta. Niin kauan kuin molemmat tukevat Dockeria, molemmat voivat ajaa samaa sovellusta täsmälleen samalla tavalla.
Docker -kuvan anatomia
Kuten aiemmin mainittiin, Docker -sovellus toimii sovitussa ympäristössä. Nyt kysymys kuuluu, miten luomme ympäristön? Useimmat sovelluskuvista tuovat Dockerin peruskuvan ja rakentavat sovelluksensa sen päälle.
Sovellukset tehdään ohjelmistokerroksista. Wordpress -säilön kuva on rakennettu käyttämällä httpd -säilön kuvaa, joka puolestaan on rakennettu Ubuntu -kuvan päälle. Kuva, jolle uudempi kuva on rakennettu, tunnetaan Docker -terminologiassa PARENT IMAGE -kuvana. Dockerfile -tiedostossa (saamme selville, mitä Dockerfile tarkoittaa, vähän myöhemmin) tämä pääkuva mainitaan tiedoston yläosassa alla olevan kuvan mukaisesti:
Ubuntusta: 18.04
## Loput Docker -tiedostosta
Tämä Docker -tiedosto suoritettaessa muuntaa sovelluksesi Docker -kuvaksi (eräänlaiseksi binaariksi), jonka voit siirtää rekisteriin, josta se voidaan vetää uusien säiliöiden luomiseksi muualle. Heillä kaikilla on kuitenkin Ubuntu: 18.04 peruskuvana ja ne toimivat kuin se olisi Ubuntu -järjestelmä, jossa he toimivat.
Olet ehkä huomannut tämän yrittäessäsi vetää uutta telakointikuvaa.
Tämä osoittaa, kuinka monta kerrosta vedetään ennen kuin varsinainen sovellus (joka voi olla vain muutaman megatavun kokoinen) tuodaan.
Tästä syystä haluaisimme luoda niin kutsutun peruskuvan. Joka ei ole rakennettu minkään muun päälle. Avainsanaa scratch käytetään osoittamaan, että tätä kerrosta ei ole rakennettu minkään muun päälle. Niin kuin:
Tyhjästä## Loput Dcokerfile
Luomme ensin yksinkertaisen hello-world-sovelluksen ja sitten selvitämme, mikä muu Dockerfile tulee olemaan. Isäntäjärjestelmä on Ubuntu: 18.04 LTS ja käytämme kokeilussa Docker-versiota 17.12.1-ce.
Staattisen binaarin luominen
Docker -kontit ovat kokoelma prosesseja, jotka ovat käynnissä erillään muusta käyttöjärjestelmästä. Ainoa asia, johon prosessi on yhteydessä, on ydin. Kernel vastaa näiden prosessien ajoittamisesta suorittimelle, muistinhallinnasta ja muutamasta muusta perusvarauksen säilytystehtävästä.
Mutta useimmat korkean tason sovellukset riippuvat monista järjestelmäkirjastoista (kuten glibc, musl, klibc jne ) ja paljon ajonaikaisia riippuvuuksia, kuten Python tai Node.js tai Java Runtime. Sovellusbinaarissa ei ole käytettävissä kaikkia kirjastoja, mutta kun se aloittaa suorituksen, se kutsuu kyseiset kirjastot isäntäkäyttöjärjestelmästä.
Koska yritämme luoda kuvan tyhjästä, emme saisi näitä hienoja puolia. Sovelluksemme on siis oltava staattinen tiedosto tai itsenäinen suoritettava tiedosto.
Aloitetaan luomalla MyDockerImage -kansio ja luomalla sen sisälle tiedosto hello.cc.
$mkdirMyDockerImage$CDMyDockerImage
$kosketushei.cc
Avaa hello.cc suosikkitekstieditorillasi ja lisää seuraavat rivit sen sisälle.
#sisältääkäyttämällä nimiavaruuden std;
inttärkein(){
kustannus<< 'Hei! Tämä viesti tulee säilöstä n'';
palata 0;
}
Tämä on yksinkertainen C ++ -ohjelma, joka tulostaa Hello! Tämä viesti …
Edellä käsitellyistä syistä keräämme tämän käyttämällä staattista lippua. Käytettävä kääntäjä on g ++ (Ubuntu 7.3.0-16ubuntu3) 7.3.0.
Ohjelman kääntämiseksi suorita seuraava komento samassa hakemistossa:
$ g++ -o hei-staattinenHei.DCTämä luo binäärisen suoritettavan tiedoston hei samaan hakemistoon. Se on staattinen tiedostomme. Testaa, toimiiko se tarkoitetulla tavalla mainitsemalla tiedostonimi päätelaitteessa.
$./Hei
Nyt olemme valmiita pakkaamaan tämän yksinkertaisen ohjelman.
Docker -tiedosto
Dockerfile koostuu sääntöjoukosta, joka ottaa sovellustiedostot (kuten binääritiedostot, lähdetiedostot jne.) Sekä erilaiset kokoonpanoparametrit, kuten tiedostojärjestelmän ulkoasun, avoimet portit jne. Ja muuttaa ne Docker -kuvatiedostoksi. Voit sitten jakaa kuvatiedoston kenelle tahansa, joka haluaa käyttää kyseistä sovellusta.
Emme kaivaudu kaikkiin Dockerfile -vaihtoehtoihin, vaan kirjoitamme erittäin minimalistisen Docker -tiedoston. Luo tyhjä tiedosto nimeltä samaan hakemistoon, jossa suoritettava suoritustasi sijaitsee Docker -tiedosto.
$kosketusDocker -tiedostoAvaa se suosikkitekstieditorillasi ja kirjoita siihen seuraavat rivit:
TyhjästäLISÄÄ hei/
CMD['/Hei']
naarmu ei ole vanhemman kuva. Pikemminkin se osoittaa Dockerille, että kuva ei ole rakennettu minkään muun kuvan päälle. Se on rakennettu tyhjästä. ADD -komento ottaa staattisen binaarin nimeltä | _+_ | nykyisestä hakemistosta ja lisää sen kuvatiedoston juurihakemistoon. Kun ajaisimme vihdoin säilön tämän kuvan perusteella, hei suoritettava tiedosto näkyy itse juurihakemistossa | _+_ |
Lopuksi CMD -rivillä on merkkijono /Hei tämä merkkijono suoritetaan kuorikomennona aina, kun tästä kuvasta luodaan säilö, eli binaaritiedosto, jonka lisäsimme säilöömme ja tulostamme sovelluksessamme kirjoittamamme viestin.
Rakennetaan kuva vetoamalla telakoitsijan rakentaminen komento, joka kulkee Dockerfilen sisällön läpi ja luo kuvan. Suorita seuraava komento samassa hakemistossa kuin Dockerfile ja suoritettava binääri.
$telakoitsijan rakentaminen--tagHei .The - tervehdys lippu asettaa kuvan nimeksi Hei ja piste ( . ) lopussa kertoo telakoitsijan rakentaminen etsiä Dockerfile ja siihen liittyvän sisällön nykyistä hakemistoa.
Docker -säiliön suorittaminen
Jos haluat tarkistaa, näkyykö juuri luomamme kuva kuvaluettelossa, suorita:
$telakoitsijan kuvia
Huomaa, kuinka pieni hei -kuva on verrattuna muihin kuviin. Joka tapauksessa se on valmis käytettäväksi säiliönä,
$telakoitsija juoksee hei
Se siitä! Loit ensimmäisen minimalistisen säiliön tyhjästä.
Muita vaihtoehtoja
Vaikka kuvien luominen tyhjästä on aina vaihtoehto, ihmiset usein luovat kuvia muista kevyistä Linux -distroista. Esimerkiksi alppi- ja busybox -kuvat ovat todella kevyitä ympäristöjä, joissa on pienemmät kirjastot, kuten musl glibcin sijaan.
Käyttämällä niitä vanhemman kuvana käyttämällä Alpineilta: viimeisin aiheuttaisi myös pienempiä kuvia. Peruskuvien koko on vain 2-5 Mt. Kerro meille, onko Dockeriin liittyvää aihetta, jonka haluat ehkä käsitellä seuraavaksi. Voit tavoittaa meidät osoitteessa Viserrys , Facebook tai tilaa meidät sähköpostitse.