Kas yra „Docker Container“? - Talpinkite savo programą naudodami „Docker“



„Docker Container“ yra lengvas alternatyvus „Virtual Machine“ sprendimas kuriant, diegiant ir vykdant programas talpykloje.

Na, aš tikiuosi, kad perskaitėte mano ankstesnius tinklaraščius Dokeris kur aptariau dokerio pagrindus. Čia, šiame „Docker Container“ tinklaraštyje, aptarsiu, kas yra „Docker Containers“ ir kaip jis veikia. Daugiausia dėmesio skirsime „Docker“ rankoms ir naudojimo atvejams.

Išvardinau šio „Docker Container“ tinklaraščio temas:





  • Kodėl mums reikia „Docker“ konteinerių?
  • Kaip veikia „Docker Containers“?
  • „Docker Container“ naudojimo atvejai

Kodėl mums reikia „Docker“ konteinerių?

Iki šiol tai gerai prisimenu, dirbau prie projekto. Tame projekte mes laikėmės mikropaslaugų architektūros. Tiems, kurie nežino, kas yra mikroservisas, nesijaudinkite, aš jums pateiksiu tai.

Mikropaslaugų idėja yra ta, kad tam tikrų tipų programas lengviau kurti ir prižiūrėti, kai jos yra suskaidomos į mažesnius, sudedamus komponentus, kurie veikia kartu. Kiekvienas komponentas yra sukurtas atskirai, o paskui programa yra tiesiog sudedamųjų komponentų suma.



Apsvarstykite toliau pateiktą pavyzdį:

Internetinės aplikacijos programa - „Docker Container“ - „Edureka“

Aukščiau pateiktoje diagramoje yra internetinė parduotuvė su atskiromis mikroservisomis, skirtomis vartotojo abonementui, produktų katalogui, užsakymų apdorojimui ir prekių krepšeliams.



Na, ši architektūra turi daug privalumų:

  • Net jei viena iš jūsų mikropaslaugų nepavyksta, visa jūsų programa iš esmės neturi įtakos.
  • Tai lengviau valdyti

Taip pat yra daugybė kitų pranašumų, šiame pranešime apie mikropaslaugas plačiau nenagrinėsiu. Bet netrukus aš taip pat sugalvosiu porą tinklaraščių apie mikropaslaugas.

Šioje architektūroje mes naudojome „CentOS Virtual Machines“. Tos virtualiosios mašinos buvo sukonfigūruotos rašant ilgus scenarijus. Na, tų VM konfigūravimas nebuvo vienintelė problema.

Norint sukurti tokias programas, reikia paleisti kelias mikro paslaugas vienoje mašinoje. Taigi, jei pradedate penkias iš šių paslaugų, toje mašinoje reikia penkių VM. Apsvarstykite toliau pateiktą diagramą:

Kita problema yra gana dažna, žinau, kad daugelis galite su ja susieti. Programa veikia kūrėjo nešiojamajame kompiuteryje, bet ne bandymuose ar gamyboje. Taip gali nutikti dėl to, kad nesilaikoma nuoseklios skaičiavimo aplinkos. Apsvarstykite toliau pateiktą diagramą:

Be to, buvo daugybė kitų problemų, tačiau manau, kad šių problemų pakanka, kad galėčiau paaiškinti jums „Docker Containers“ poreikį.

Sužinokite, kaip „Docker“ konteineriai yra geresni nei virtualios mašinos

Taigi, įsivaizduokite, ar aš duodu 8 GB RAM visoms savo VM ir turiu 5 mikroservisus, veikiančius skirtingose ​​virtualiose mašinose. Tokiu atveju šiems VM reikės 40 GB RAM. Na, dabar reikalauju, kad mano pagrindinio kompiuterio konfigūracijos būtų labai didelės, mano pagrindiniame kompiuteryje turėtų būti beveik 44 GB RAM. Akivaizdu, kad tai nėra tvarus tokios architektūros sprendimas, nes čia eikvoju daug išteklių.

Puiku, aš turiu daug išteklių, kuriuos galėčiau iššvaistyti, bet vis tiek susiduriu su savo programinės įrangos pristatymo gyvavimo ciklo (SDLC) nenuoseklumo problema. Turiu sukonfigūruoti šias VM teste, taip pat prod aplinkoje. Kažkur to proceso metu kai kuri programinė įranga nebuvo atnaujinta bandymo serveryje, o „Dev“ komanda naudoja atnaujintą programinės įrangos versiją. Tai sukelia konfliktus.

Ką daryti, jei naudoju 100 VM, tada kiekvieno VM sukonfigūravimas užtruks daug laiko, tuo pačiu metu jis taip pat linkęs į klaidas.

Dabar supraskime, kas yra „Docker Container“, kaip jis veikia ir kaip jis išsprendė mano problemą.

Kas yra „Docker“ konteineris?

„Docker“ yra įrankis, sukurtas palengvinti programų kūrimą, diegimą ir vykdymą naudojant konteinerius.

Galite sukurti „Docker Containers“, šiose talpyklose bus visos mano programai ar mikropriešai reikalingos binarės ir bibliotekos. Taigi jūsų paraiška yra talpykloje arba jūs sukūrėte programą. Dabar tą patį konteinerį galima naudoti „Test and Prod“ aplinkoje.

„Docker Containers“ yra lengvas „Virtual Machines“ sprendimas, kuriame naudojama pagrindinė OS. Geriausia tai, kad nereikia iš anksto skirti jokios operatyviosios atminties „Docker“ konteineriui, ji ją paims kaip reikiant. Taigi, su „Docker Container“ man nereikia jaudintis dėl išteklių švaistymo.

Supraskime dabar, kaip veikia „Docker Container“.

Kaip veikia „Docker“ konteineris?

Žemiau pateikta schema iš esmės yra būdas naudoti „Docker“. Aš manau, kad turite idėjų apie „Docker Image“ ir „Dockerfile“.

Vaikinai, aš žinau, kad diagrama atrodo šiek tiek sudėtinga, bet patikėk, kad ji nėra tokia sudėtinga. Toliau pateikiamas diagramos paaiškinimas, net po to, kai manote, kad sunku suprasti, galite pakomentuoti savo abejones, aš kuo greičiau išspręsiu tuos klausimus.

  • Kūrėjas pirmiausia įrašys projekto kodą į „Docker“ failą ir tada sukurs vaizdą iš to failo.
  • Šiame paveikslėlyje bus visas projekto kodas.
  • Dabar galite paleisti šį „Docker Image“, kad sukurtumėte tiek konteinerių, kiek norite.
  • Šį „Docker“ vaizdą galima įkelti į „Docker“ šakotuvą (iš esmės tai yra „Docker Images“ debesies saugykla, kurią galite laikyti viešą ar privačią).
  • Šį „Docker“ vaizdą „Docker“ stebulėje gali išsitraukti kitos komandos, tokios kaip QA arba „Prod“.

Tai ne tik neleidžia švaistyti išteklių, bet ir užtikrina, kad kompiuterio aplinka, esanti kūrėjo nešiojamame kompiuteryje, būtų pakartota ir kitose komandose. Dabar jaučiuosi, neturiu jums pasakyti, kodėl mums reikia Dockerio.

Tai buvo vienas iš būdų jį naudoti, spėju, kad jums, vaikinai, turi būti įdomu sužinoti, kaip aš naudoju „Docker“ spręsdama savo mikropaslaugų problemą. Leiskite jums apžvelgti tą patį.

Žemiau pateikiamas diagramos paaiškinimas:

  • Pirma, mes parašėme sudėtingus reikalavimus „Dockerfile“.
  • Tada mes jį įstumėme į „GitHub“.
  • Po to mes naudojome CI serverį (Jenkins).
  • Šis „Jenkins“ serveris ištrauks jį iš „Git“ ir sukurs tikslią aplinką. Tai bus naudojama gamybos serveriuose, taip pat bandomuosiuose serveriuose.
  • Mes ją pritaikėme etapams (Tai reiškia jūsų programinės įrangos diegimą į serverius bandymų tikslais, prieš juos visiškai įdiegiant į gamybą.) Testuotojų aplinkose.
  • Iš esmės mes pritaikėme gamybai būtent tai, ką turėjome kurdami, bandydami ir rengdami.

Iš tikrųjų bus teisinga sakyti, kad Dockeris palengvino mano gyvenimą.

Na, tai buvo mano įmonės istorija, pažvelkime į Indianos universiteto atvejo analizę. Kaip Dockeris išsprendė jų problemas.

Indianos universiteto atvejo analizė:

Indianos universitetas yra kelių miestelių valstybinių universitetų sistema Indianos valstijoje, JAV.

Problemos pareiškimas

Jie naudojo pasirinktinius scenarijus, kad įdiegtų programas VM.

Jų aplinka buvo optimizuota senoms „Java“ pagrįstoms programoms. Jų auginimo aplinka apima naujus produktus, kurie nėra vien java. Siekdamas suteikti savo studentams kuo geresnę patirtį, universitetas turėjo pradėti modernizuoti programas.

Universitetas norėjo patobulinti programų kūrimo būdą, pereidamas prie savo programoms skirtos mikroservisais pagrįstos architektūros.

Reikėjo apsaugoti studentų duomenis, pvz., SSN ir studentų sveikatos duomenis.

Sprendimas:

Visas problemas išsprendė „Docker Data Center“ (DDC), apsvarstykite toliau pateiktą diagramą:

„Docker“ patikimas registras - Jame saugomi „Docker Images“.

UCP (universali valdymo plokštuma) žiniatinklio sąsaja - Padeda valdyti visą klasterį iš vienos vietos. Paslaugos diegiamos naudojant UCP žiniatinklio vartotojo sąsają, naudojant „Docker“ vaizdus, ​​kurie saugomi DTR („Docker Trusted Registry“).

IT operacijų komandos naudoja „Universal Control Plane“, kad suteiktų „Docker“ įdiegtą programinę įrangą pagrindiniuose kompiuteriuose, o tada diegtų savo programas, nereikėdami atlikti daugybės rankinių veiksmų, kad sukurtumėte visą savo infrastruktūrą.

UCP ir DTR integruojasi su savo LDAP serveriu, kad galėtų greitai suteikti prieigą prie savo programų.

Tikiuosi, kad jūs, vaikinai, perskaitėte ankstesnius tinklaraščius, kad sužinotumėte „Docker“ pagrindus.

Dabar aš jums paaiškinsiu, kaip mes galime naudoti „Docker Compose“ kelių konteinerių programoms.

„Docker“ rankos:

Darau prielaidą, kad įdiegėte „Docker“.Aš naudosiu „Docker Compose“ šiame įraše, žemiau aš pateikiau nedidelę „Docker Compose“ įžangą.

„Docker“ kūrimas: Tai įrankis, skirtas apibrėžti ir paleisti kelių konteinerių „Docker“ programas. Naudodami „Docker Compose“, galite naudoti „Compose“ failą, kad sukonfigūruotumėte savo programos paslaugas. Tada naudodami vieną komandą galite sukurti ir paleisti visas paslaugas naudodami savo konfigūraciją.

Tarkime, kad turite kelias programas įvairiuose konteineriuose ir visi šie konteineriai yra susieti. Taigi, jūs nenorite vykdyti kiekvieno iš šių konteinerių po vieną. Bet jūs norite paleisti tuos konteinerius su viena komanda. Štai kur „Docker Compose“ yra paveikslėlis. Su juo galite paleisti kelias programas įvairiuose konteineriuose su viena komanda. y. dokininkas-komponuok.

Pavyzdys: Įsivaizduokite, kad YAML faile turite skirtingus sudėtinius rodinius: vienas naudoja žiniatinklio programą, kitas - pašto adresus, kitas - redis. Tai vadinama „Docker Compose File“, iš ten šiuos konteinerius galite paleisti viena komanda.

Paimkime dar vieną pavyzdį:

Tarkime, kad norite paskelbti tinklaraštį, tam naudosite TVS (turinio valdymo sistemą), o „WordPress“ yra plačiausiai naudojama TVS. Iš esmės jums reikia vieno „WordPress“ talpyklos ir dar vieno konteinerio kaip „MySQL“ galinei daliai, kad „MySQL“ talpykla turėtų būti susieta su „WordPress“ konteineriu. Taip pat mums reikia dar vieno „Php Myadmin“ talpyklos, kuri bus susieta su „MySQL“ duomenų baze, iš esmės ji naudojama norint pasiekti „MySQL“ duomenų bazę.

Kaip aš praktiškai įgyvendinu aukščiau pateiktą pavyzdį.

Susiję žingsniai:

  1. Įdiekite „Docker Compose“ :
  2. Įdiekite „WordPress“: Mes naudosimės pareigūnu „WordPress“ ir MariaDB „Docker“ vaizdai.
  3. Įdiekite „MariaDB“: Tai yra vienas iš populiariausių duomenų bazių serverių pasaulyje. Jį sukūrė originalūs „MySQL“ kūrėjai. „MariaDB“ yra sukurta kaip atvirojo kodo programinė įranga ir kaip reliacinė duomenų bazė suteikia SQL sąsają prieigai prie duomenų.
  4. Įdiekite „PhpMyAdmin“: Tai nemokama programinės įrangos priemonė, parašyta PHP, skirta valdyti „MySQL“ žiniatinklyje.
  5. Sukurkite „WordPress“ svetainę:

Pradėkime!

Įdiekite „Docker Compose“:

Pirmiausia įdiekite „Python Pip“:

sudo apt-get įdiekite python-pip

Dabar galite įdiegti „Docker Compose“:

sudo pip įdiekite „docker-compose“

Įdiekite „WordPress“:

Sukurkite „WordPress“ katalogą:

mkdir wordpress

Įveskite šį „WordPress“ katalogą:

CD WordPress /

Šiame kataloge sukurkite „Docker Compose YAML“ failą, tada redaguokite jį naudodami „gedit“:

sudo gedit docker-compose.yml

Įklijuokite toliau nurodytas kodo eilutes į tą „yaml“ failą:

wordpress: image: wordpress links: - wordpress_db: mysql ports: - 8080: 80 wordpress_db: image: mariadb environment: MYSQL_ROOT_PASSWORD: edureka phpmyadmin: image: corbinu / docker-phpmyadmin links: - wordpress_db: mysql ports: - 8181: 80 environment: MYSQL_USERNAME: šaknis MYSQL_ROOT_PASSWORD: edureka

Žinau, kad norite, kad paaiškinčiau šį kodą, todėl, ką darysiu, paimsiu nedideles šio kodo dalis ir paaiškinsiu, kas vyksta.

wordpress_db: ... aplinka: MYSQL_ROOT_PASSWORD: edureka ...

Tai nustatys aplinkos kintamąjį „wordpress_db“ talpykloje „MYSQL_ROOT_PASSWORD“ su jūsų norimu slaptažodžiu. „MariaDB Docker“ paveikslėlis sukonfigūruotas tikrinti, ar nėra šio aplinkos kintamojo, kai jis paleidžiamas, ir rūpinsis nustatyti DB su pagrindine paskyra su slaptažodžiu, apibrėžtu kaip MYSQL_ROOT_PASSWORD.

wordpress: ... prievadai: - 8080: 80 ...

Pirmasis prievado numeris yra pagrindinio kompiuterio prievado numeris, o antrasis prievado numeris yra konteinerio viduje esantis prievadas. Taigi, ši konfigūracija persiunčia užklausas pagrindinio kompiuterio 8080 prievadui į numatytąjį žiniatinklio serverio 80 prievadą konteinerio viduje.

phpmyadmin: image: corbinu / docker-phpmyadmin links: - wordpress_db: mysql ports: - 8181: 80 environment: MYSQL_USERNAME: root MYSQL_ROOT_PASSWORD: edureka

Tai paima bendruomenės nario corbinu „docker-phpmyadmin“, susieja jį su mūsų „wordpress_db“ konteineriu su pavadinimu „mysql“ (tai reiškia, kad iš „phpmyadmin“ konteinerio nuorodos į pagrindinio kompiuterio pavadinimą „mysql“ bus persiųstos į mūsų „wordpress_db“ konteinerį), atidengs savo 80 prievadą 8181 uoste. pagrindinę sistemą ir galiausiai nustato keletą aplinkos kintamųjų su mūsų MariaDB vartotojo vardu ir slaptažodžiu. Šis paveikslėlis automatiškai negriebia aplinkos kintamojo MYSQL_ROOT_PASSWORD iš wordpress_dbcontainer aplinkos, kaip tai daro wordpress paveikslėlis. Mes iš tikrųjų turime nukopijuoti eilutę MYSQL_ROOT_PASSWORD: edureka iš „wordpress_db“ konteinerio ir nustatyti root vartotojo vardą.

php print_r masyvas

Dabar paleiskite programų grupę:

dokininkas-komponuok -d

Tai viskas, ką turite padaryti. Tokiu būdu galite pridėti tiek konteinerių, kiek jums patinka, ir susieti juos bet kokiu būdu.

Dabar naršyklėje eikite į 8080 prievadą naudodami savo viešąjį IP arba pagrindinio kompiuterio vardą, kaip parodyta žemiau:

vietinis šeimininkas: 8080

Užpildykite šią formą ir spustelėkite „WordPress“ diegimą.

Kai jis bus baigtas, dar kartą apsilankykite savo serverio IP adresu (šį kartą naudokite 8181 prievadą, pvz., Localhost: 8181). Jus pasitiks prisijungimo ekranas „phpMyAdmin“:

Prisijunkite naudodami vartotojo vardo šaknį ir slaptažodį, kuriuos nustatėte YAML faile, ir galėsite naršyti savo duomenų bazėje. Jūs pastebėsite, kad serveryje yra „WordPress“ duomenų bazė, kurioje yra visi jūsų „WordPress“ diegimo duomenys.

Čia aš baigiu savo „Docker Container“ tinklaraštį. Tikiuosi, kad jums patiko šis įrašas. Galite patikrinti kiti tinklaraščiai serijoje, kurioje kalbama apie Dockerio pagrindus.

Jei radote šį „Docker Container“ tinklaraštį aktualų, patikrinkite sukūrė patikima internetinė mokymosi įmonė „Edureka“, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą visame pasaulyje. „Edureka DevOps“ sertifikavimo mokymo kursai padeda besimokantiesiems įgyti patirties įvairiuose „DevOps“ procesuose ir įrankiuose, pvz., „Puppet“, „Jenkins“, „Docker“, „Nagios“, „Ansible“, „Chef“, „Saltstack“ ir „GIT“, siekiant automatizuoti kelis SDLC veiksmus.

Turite man klausimą? Prašau paminėti tai komentarų skiltyje, ir aš susisieksiu su jumis.