Laisvai kalbant, „Docker“ vis labiau primena universalų paketų tvarkyklę, kuri veikia visose įmanomose „Linux“ platformose. Jis paima konteinerius ir naudoja juos sprendžiant visiškai kitokią problemą, su kuria susiduria kūrėjai. Problema ta, kad kūrėjai programoms rašyti naudoja savo darbalaukio operacinę sistemą (pvz., „Windows“, „MacOS“ ar „Linux“ su daugybe su darbalaukiu susijusių paketų). Jų parašyta programa dažnai veikia visiškai kitoje operacinėje sistemoje, esančioje serveryje, kurio Linux platinimas yra visiškai kitoks nei kūrėjo nešiojamojo kompiuterio.
„Docker“ idėja yra ta, kad jūsų programa yra supakuota kaip „Docker“ vaizdas. „Docker“ užduotis yra nufotografuoti šį vaizdą ir paleisti jį kaip konteinerinę programą. Buvimas konteineriuose reiškia, kad programa ir jos priklausomybės veiks pačioje izoliuotoje aplinkoje, kuri gali visiškai skirtis nuo kūrėjo nešiojamojo kompiuterio ir net gamybos serverio. Kol jie abu palaiko „Docker“, jie abu gali paleisti tą pačią programą lygiai taip pat.
„Docker“ vaizdo anatomija
Kaip minėta anksčiau, „Docker“ programa veiks sutartoje aplinkoje. Dabar kyla klausimas, kaip tą aplinką sukurti? Dauguma programų vaizdų importuotų „Docker“ bazinį vaizdą ir sukurtų savo programą ant jo.
Programos yra sukurtos iš programinės įrangos sluoksnių. „WordPress“ konteinerio vaizdas yra sukurtas naudojant httpd konteinerio vaizdą, kuris savo ruožtu yra pastatytas ant „Ubuntu“ vaizdo. Vaizdas, ant kurio sukurtas naujesnis vaizdas, Dockerio terminologijoje yra žinomas kaip PARENT IMAGE. „Dockerfile“ (šiek tiek vėliau suprasime, ką reiškia „Dockerfile“), šis pirminis vaizdas yra paminėtas failo viršuje, kaip parodyta žemiau:
IŠ „Ubuntu“: 18.04
## Likusi „Docker“ rinkmena
Šis „Docker“ failas, kai jis vykdomas, konvertuoja jūsų programą į „Docker“ atvaizdą (savotišką dvejetainį), kurį galite perkelti į registrą, iš kurio jį galima ištraukti, kad sukurtumėte naujus konteinerius kitur. Tačiau visi jie turės „Ubuntu: 18.04“ pagrindinį vaizdą ir veiks taip, tarsi tai būtų „Ubuntu“ sistema, kurioje jie veikia.
Galbūt tai pastebėjote bandydami ištraukti naują doko atvaizdą.
Tai rodo, kiek sluoksnių ištraukiama prieš pateikiant faktinę programą (kuri gali būti tik kelių megabaitų dydžio).
Dėl šios priežasties norėtume sukurti vadinamąjį pagrindinį įvaizdį. Kuris nėra pastatytas ant nieko kito. Raktinis žodis scratch naudojamas norint parodyti, kad šis sluoksnis nėra pastatytas ant nieko kito. Panašiai:
Nuo nulio## Likusi „Dcokerfile“
Pirmiausia sukursime paprastą „hello-world“ programą ir tada išsiaiškinsime, kas bus likusi „Dockerfile“. Pagrindinė sistema yra „Ubuntu“: 18.04 LTS, o eksperimentui naudojame „Docker“ versiją 17.12.1-ce.
Statinio dvejetainio kūrimas
„Docker“ konteineriai yra procesų rinkinys, veikiantis atskirai nuo likusios operacinės sistemos. Vienintelis dalykas, su kuriuo susijęs šis procesas, yra branduolys. Branduolys yra atsakingas už šių procesų planavimą procesoriuje, atminties tvarkymą ir keletą kitų pagrindinių rezervavimo užduočių.
Tačiau dauguma aukšto lygio programų priklauso nuo daugelio sistemos bibliotekų (pvz glibc, musl, klibc ir kt ) ir daug vykdymo laiko priklausomybių, tokių kaip „Python“ ar „Node.js“ arba „Java Runtime“. Programos dvejetainėje nėra visų bibliotekų, tačiau pradėjus vykdyti, jos iškviečia šias bibliotekas iš pagrindinės operacinės sistemos.
Kadangi mes bandome sukurti įvaizdį nuo nulio, mes negautume šių malonumų. Taigi mūsų programa turi būti statinis failas arba atskiras vykdomasis failas.
Pradėkime nuo to, kad sukuriame aplanką „MyDockerImage“ ir jame sukuriame failą „hello.cc“.
$mkdir„MyDockerImage“$CD„MyDockerImage“
$paliestisveiki.cc
Atidarykite hello.cc naudodami savo mėgstamą teksto rengyklę ir pridėkite šias eilutes.
#įtrauktinaudojant vardų srities standartą;
tarptpagrindinis(){
kaina<< 'Sveiki! Šis pranešimas siunčiamas iš sudėtinio rodinio n';
grįžti 0;
}
Tai paprasta C ++ programa, kuri spausdina Sveiki! Ši žinutė…
Dėl anksčiau aptartų priežasčių mes tai sudarysime naudodami statinę vėliavą. Naudojamas kompiliatorius yra g ++ („Ubuntu 7.3.0-16ubuntu3“) 7.3.0.
Norėdami surinkti programą, tame pačiame kataloge paleiskite šią komandą:
$ g++ -o labas-statinisSveiki.DCTai sukuria dvejetainį vykdomąjį failą sveiki tame pačiame kataloge. Tai mūsų statinis failas. Patikrinkite, ar jis veikia kaip numatyta, terminale paminint failo pavadinimą.
$./Sveiki
Dabar esame pasirengę konteinerizuoti šią paprastą programą.
Dockerfile
„Dockerfile“ susideda iš taisyklių rinkinio, kuris paima jūsų programos failus (pvz., Dvejetainius failus, šaltinio failus ir tt) kartu su įvairiais konfigūracijos parametrais, tokiais kaip failų sistemos išdėstymas, atviri prievadai ir kt., Ir paverčia juos „Docker“ vaizdo failais. Tada galite bendrinti vaizdo failą su visais, kurie nori paleisti šią programą.
Mes nesigilinsime į visas „Dockerfile“ galimybes, vietoj to parašysime labai minimalistinį „Dockerfile“. Tame pačiame kataloge, kuriame yra jūsų vykdomoji programa, sukurkite tuščią failą pavadinimu Dockerfile.
$paliestiDockerfileAtidarykite jį naudodami mėgstamą teksto rengyklę ir parašykite šias eilutes:
NUO nulioADD sveiki/
CMD['/Sveiki']
subraižyti nėra tėvų atvaizdas. Greičiau tai rodo „Docker“, kad vaizdas nėra pastatytas ant kito vaizdo. Jis pastatytas nuo nulio. ADD komanda paimtų statinį dvejetainį pavadinimą | _+_ | iš dabartinio katalogo ir pridėtų prie pagrindinio vaizdo failo katalogo. Kai pagaliau paleisime konteinerį pagal šį vaizdą, labas failas bus matomas pačiame šakniniame kataloge adresu | _+_ |
Galiausiai CMD eilutėje yra eilutė /Sveiki ši eilutė bus vykdoma kaip apvalkalo komanda, kai iš šio vaizdo bus sukurtas konteineris, taigi dvejetainis failas, kurį pridėjome prie konteinerio, ir išspausdins pranešimą, kurį parašėme savo programoje.
Sukurkime vaizdą, pasitelkdami statyti doką komandą, kuri peržiūrėtų „Dockerfile“ turinį ir sugeneruotų vaizdą. Vykdykite šią komandą tame pačiame kataloge kaip „Dockerfile“ ir vykdomoji dvejetainė programa.
$statyti doką-žymėtiSveiki .The - labas vėliava nustato vaizdo pavadinimą Sveiki ir taškas ( . ) pabaigoje pasakoja statyti doką ieškoti dabartiniame „Dockerfile“ ir susijusio turinio kataloge.
„Docker“ konteinerio paleidimas
Norėdami patikrinti, ar ką tik sukurtas vaizdas rodomas vaizdų sąraše, paleiskite:
$dokų vaizdai
Atkreipkite dėmesį, koks mažas sveikinimo vaizdas, palyginti su kitais vaizdais. Bet kokiu atveju jis yra paruoštas naudoti kaip konteineris,
$docker paleisti sveiki
Viskas! Pirmąjį minimalistinį konteinerį sukūrėte nuo nulio.
Kiti variantai
Nors kurti vaizdus nuo nulio visada yra galimybė, žmonės dažnai linkę kurti vaizdus iš kitų lengvų „Linux“ distribucijų. Pavyzdžiui, vaizdai, tokie kaip Alpių ir autobusų dėžutės, yra tikrai lengva aplinka su mažesnėmis bibliotekomis, tokiomis kaip musl, o ne „glibc“.
Naudojant juos kaip tėvų vaizdą naudojant Iš Alpių: naujausias taip pat būtų gauti mažesni vaizdai. Kadangi baziniai vaizdai yra tik 2–5 MB dydžio. Praneškite mums, ar yra kokia nors su „Docker“ susijusi tema, kurią galbūt norėsite aptarti toliau. Mus galite pasiekti „Twitter“ , Facebook arba užsiprenumeruokite mus el.