„Docker Python“ mokymo programa: kaip ją naudoti

Tai yra „Docker“ talpyklų įvadinė pamoka. Šio straipsnio pabaigoje jūs sužinosite, kaip naudoti „Docker“ savo vietiniame kompiuteryje. Kartu su „Python“ ketiname paleisti „Nginx“ ir „Redis“ konteinerius. Tuose pavyzdžiuose daroma prielaida, kad esate susipažinę su pagrindinėmis tų technologijų sąvokomis. Bus daugybė apvalkalo pavyzdžių, todėl atidarykite terminalą.

„Docker“ yra atviro kodo įrankis, kuris automatizuoja programos diegimą programinės įrangos talpykloje. Lengviausias būdas suvokti „Docker“ idėją yra palyginti ją su standartiniais gabenimo konteineriais.

Anuomet transporto įmonės susidūrė su šiais iššūkiais:

  • Kaip gabenti skirtingas (nesuderinamas) prekių rūšis (pvz., Maisto produktus ir chemikalus, arba stiklą ir plytas).
  • Kaip elgtis su įvairių dydžių pakuotėmis naudojant tą pačią transporto priemonę.

Įvedus indus, plytos galėjo būti dedamos ant stiklo, o chemikalai gali būti laikomi šalia maisto. Įvairių dydžių kroviniai gali būti dedami į standartizuotą konteinerį ir pakraunami / iškraunami ta pačia transporto priemone.

Išsiskirkite savo gaminiu tvirtas frontendas.

Samdykite kvalifikuotų JS kūrėjų komandą.

Grįžkime prie programinės įrangos kūrimas „Python“ naudojant „Docker“ konteinerius.

Kai kuriate programą, turite pateikti savo kodą kartu su visomis įmanomomis priklausomybėmis, tokiomis kaip bibliotekos, žiniatinklio serveris, duomenų bazės ir kt. Galite atsidurti situacijoje, kai programa veikia jūsų kompiuteryje, bet net nepaleis. pakopos serveryje, „dev“ arba „QA“ kompiuteryje.

Šį iššūkį galima išspręsti izoliavus programą, kad ji būtų nepriklausoma nuo sistemos.

Tradiciškai, norint išvengti šio netikėto elgesio, buvo naudojamos virtualios mašinos. Pagrindinė VM problema yra ta, kad „papildoma OS“ pagrindinės operacinės sistemos viršuje prideda gigabaitų vietos projekte. Dažniausiai jūsų serveryje bus keli VM, kurie užims dar daugiau vietos. Ir, beje, šiuo metu dauguma debesų pagrindu veikiančių serverių teikėjų ims mokestį už tą papildomą vietą. Kitas reikšmingas VM trūkumas yra lėtas įkrovimas.

„Docker“ pašalina visa tai, kas išdėstyta pirmiau, tiesiog bendrindama OS branduolį visuose konteineriuose, kurie veikia kaip atskiri pagrindinės OS procesai.

Žemiau pateiktoje diagramoje parodyta, kaip tai atrodo, naudojant „Docker“ pavyzdį.

„Docker“ mokymo programa: kas yra „Docker“ ir kaip ją naudoti su „Python 2“

Atminkite, kad „Docker“ nėra pirmoji ir ne vienintelė konteinerių platforma. Tačiau šiuo metu Dockeris yra didžiausias ir galingiausias žaidėjas rinkoje.

Trumpas privalumų sąrašas apima:

  • Spartesnis kūrimo procesas
  • Patogus programų įklijavimas
  • Tas pats elgesys vietiniuose mašinose / dev / staging / production serveriuose
  • Lengvas ir aiškus stebėjimas
  • Lengva keisti mastelį

Sistemoje nereikia diegti tokių trečiųjų šalių programų kaip „PostgreSQL“, „Redis“, „Elasticsearch“ – galite ją paleisti konteineriuose. „Docker“ taip pat suteikia galimybę vienu metu paleisti skirtingas tos pačios programos versijas. Pavyzdžiui, tarkime, kad reikia rankiniu būdu perkelti duomenis iš senesnės „Postgres“ versijos į naujesnę. Tokia situacija gali būti mikropaslaugų architektūroje, kai norite sukurti naują mikroservisą su nauja trečiosios šalies programinės įrangos versija.

Gali būti gana sudėtinga laikyti dvi skirtingas tos pačios programos versijas vienoje pagrindinėje OS. Šiuo atveju „Docker“ konteineriai gali būti puikus sprendimas – jūs gaunate izoliuotą aplinką savo programoms ir trečiosioms šalims.

Be to, priklausomai nuo jūsų kamino, galite valdyti kelias programavimo kalbos versijas „Docker“ talpyklose: pavyzdžiui, „Python 3.9“ ir „Python 3.7“.

Paraišką galite pristatyti iš vienos dalies. Daugelis programavimo kalbų, sistemos ir visos operacinės sistemos turi savo pakuočių tvarkykles. Net jei jūsų programą galima supakuoti su savo vietiniu paketų tvarkytuvu, gali būti sunku sukurti uostą kitai sistemai.

„Docker“ suteikia jums vieningą vaizdo formatą, kad galėtumėte paskirstyti savo programas skirtingose ​​pagrindinėse sistemose ir debesijos tarnybose. Galite pristatyti savo paraišką vienu gabalu ir parengti paleisti visas reikiamas priklausomybes (įtrauktas į paveikslėlį).

Padėdami kūrimo komandoms pristatyti ir diegti supakuotas programas „Python“, konteineriai gali padidinti kūrimo proceso patogumą ir greitį.

„Docker“ negali garantuoti 100% „dev“ / „inscenizacijos“ / „produkcijos“ pariteto, nes visada yra žmogiškasis faktorius. Tačiau iki beveik nulio sumažėja klaidų tikimybė, kurią sukelia skirtingos operacinių sistemų versijos, priklausomybė nuo sistemos ir kt.

Taikant tinkamą požiūrį į „Docker“ vaizdų kūrimą, jūsų programa naudos tą patį pagrindinį vaizdą su ta pačia OS versija ir reikalingomis priklausomybėmis.

Iš dėžutės turite vieningą būdą skaityti žurnalo failus iš visų veikiančių konteinerių. Jums nereikia atsiminti visų konkrečių kelių, kur jūsų programa ir jos priklausiniai saugo žurnalo failus ir rašo tinkintus kabliukus, kad tai būtų galima tvarkyti.
Galite integruoti išorinę registravimo tvarkyklę ir stebėti programų žurnalo failus vienoje vietoje.

Teisingai supakuota programa apims daugumą dvylikos veiksnių. Pagal savo konstrukciją „Docker“ verčia jus vadovautis pagrindiniais principais, tokiais kaip konfigūracija per aplinkos kintamuosius, ryšys per TCP / UDP prievadus ir kt. Ir jei tinkamai atliksite savo programą, ji bus pasirengusi keisti mastelį ne tik „Docker“.

Gimtoji „Docker“ platforma yra „Linux“, nes ji pagrįsta „Linux“ branduolio teikiamomis funkcijomis. Pavyzdžiui, tai leidžia lengvai pridėti „Docker“ „Ubuntu“ jūsų „Python“ projektams. Tačiau vis tiek galite jį paleisti „MacOS“ ir „Windows“. Vienintelis skirtumas yra tas, kad „MacOS“ ir „Windows“ sistemose „Docker“ yra sukomplektuotas į mažytę virtualią mašiną. Šiuo metu „Docker“, skirta „MacOS“ ir „Windows“, pasiekė reikšmingą naudojimo lygį ir jaučiasi labiau kaip gimtoji programa.

Čia galite peržiūrėti „Docker“ diegimo instrukcijas.
Jei naudojate „Docker“ sistemoje „Linux“, turite paleisti visas šias komandas kaip root arba pridėti savo vartotoją prie „Docker“ grupės ir iš naujo prisijungti:

sudo usermod -aG docker $(whoami)`  
  • Konteineris – veikiantis egzempliorius, apimantis reikiamą programinę įrangą. Konteineriai visada kuriami iš vaizdų. Konteineris gali atskleisti uostus ir tomus, kad galėtų sąveikauti su kitais konteineriais ir (arba) išoriniu pasauliu. Konteineriai gali būti lengvai užmušti / išimti ir vėl sukurti iš naujo per labai trumpą laiką. Konteineriai neišlaiko valstybės.
  • Vaizdas – pagrindinis kiekvieno konteinerio elementas. Kai kuriate vaizdą, kiekvienas veiksmas yra talpykloje ir jį galima pakartotinai naudoti (modelis „Copy On Write“). Priklausomai nuo vaizdo, gali prireikti šiek tiek laiko sukurti. Kita vertus, konteinerius galima pradėti kurti iškart iš vaizdų. Kai koduojate „Python“, „Docker“ vaizdai gali sumažinti konfigūracijos rūpesčius.
  • Uostas – TCP / UDP prievadas pagal pradinę reikšmę. Kad viskas būtų paprasta, tarkime, kad prievadai gali būti paveikti išorinio pasaulio (prieinami iš pagrindinės OS) arba prijungti prie kitų konteinerių, ty prieinami tik iš tų konteinerių ir nematomi išoriniam pasauliui.
  • Tomas – gali būti apibūdinamas kaip bendras aplankas. Apimtis inicijuojama, kai sukuriamas sudėtinis rodinys. Apimtys yra skirtos duomenims išsaugoti, nepriklausomai nuo konteinerio gyvavimo ciklo.
  • Registras – serveris, kuriame saugomi „Docker“ vaizdai. Tai galima palyginti su „Github“ – galite išsirinkti vaizdą iš registro, kad jį įdiegtumėte vietoje, ir vietoje pastatytus vaizdus perkelti į registrą.
  • „Docker Hub“ – „Docker Inc.“ teikiamas registras su interneto sąsaja. Jame saugoma daugybė „Docker“ vaizdų su skirtinga programine įranga. „Docker Hub“ yra „oficialių“ „Docker“ vaizdų, pagamintų „Docker“ komandos arba bendradarbiaujant su originalios programinės įrangos gamintoju, šaltinis (tai nebūtinai reiškia, kad šie „originalūs“ vaizdai yra iš oficialių programinės įrangos gamintojų). Oficialiuose vaizduose pateikiamas galimas jų pažeidžiamumas. Ši informacija yra prieinama bet kuriam prisijungusiam vartotojui. Yra tiek nemokamų, tiek mokamų sąskaitų. Kiekvienoje paskyroje galite turėti vieną privatų vaizdą ir be galo daug viešų vaizdų. „Docker“ parduotuvė – paslauga, labai panaši į „Docker Hub“. Tai turgaus vieta su reitingais, apžvalgomis ir pan. Mano asmeninė nuomonė yra tai, kad tai rinkodaros dalykai. Esu visiškai patenkinta „Docker Hub“.

„Docker“ mokymo programa: kas yra „Docker“ ir kaip ją naudoti su „Python 3“

Atėjo laikas paleisti pirmąjį konteinerį:

docker run ubuntu /bin/echo 'Hello world'  

Konsolės išvestis:

Unable to find image 'ubuntu:latest' locally  
latest: Pulling from library/ubuntu  
6b98dfc16071: Pull complete  
4001a1209541: Pull complete  
6319fc68c576: Pull complete  
b24603670dc3: Pull complete  
97f170c87c6f: Pull complete  
Digest:sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d  
Status: Downloaded newer image for ubuntu:latest  
Hello world  
  • dokininkų bėgimas yra komanda paleisti konteinerį.
  • ubuntu yra jūsų valdomas vaizdas. Pavyzdžiui, „Ubuntu“ operacinės sistemos vaizdas. Kai nurodote vaizdą, „Docker“ pirmiausia ieško vaizdo jūsų „Docker“ pagrindiniame kompiuteryje. Jei paveikslėlis neegzistuoja vietoje, vaizdas atimamas iš viešojo vaizdų registro – „Docker Hub“.
  • / bin / echo „Sveikas pasaulis“ yra komanda, kuri veiks naujame sudėtiniame rodinyje. Šis konteineris tiesiog atspausdina „Hello world“ ir sustabdo vykdymą.

Pabandykime sukurti interaktyvų apvalkalą „Docker“ talpykloje:

docker run -i -t --rm ubuntu /bin/bash  
  • -t vėliava priskiria pseudo-tty arba terminalą naujo konteinerio viduje.
  • -i vėliava leidžia užmegzti interaktyvų ryšį, paimant konteinerio standartinę įvestį (STDIN).
  • –Rm vėliava automatiškai pašalina konteinerį, kai procesas baigiamas. Pagal numatytuosius nustatymus sudėtiniai rodiniai neištrinami. Šis konteineris egzistuoja tol, kol išlaikysime „shell“ seansą, ir baigsis, kai išeisime iš seanso (pvz., SSH sesija su nuotoliniu serveriu).

Jei norite, kad konteineris veiktų pasibaigus seansui, turite jį deemonizuoti:

docker run --name daemon -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"  
  • –Pavadinimo demonas priskiria demono pavadinimą naujam konteineriui. Jei aiškiai nenurodysite vardo, „Docker“ jį sugeneruos ir priskirs automatiškai.
  • -d vėliava paleidžia konteinerį fone (ty jį daemonizuoja).

Pažiūrėkime, kokius konteinerius šiuo metu turime:

docker ps -a  

Konsolės išvestis:

CONTAINER ID  IMAGE   COMMAND                 CREATED             STATUS                         PORTS  NAMES  
1fc8cee64ec2  ubuntu  "/bin/sh -c 'while..."  32 seconds ago      Up 30 seconds                         daemon  
c006f1a02edf  ubuntu  "/bin/echo 'Hello ..."  About a minute ago  Exited (0) About a minute ago         gifted_nobel  
  • dokininkas ps yra komanda išvardyti konteinerius.
  • -a rodo visus konteinerius (be -a vėliavos ps rodys tik veikiančius konteinerius).

Ps mums parodo, kad turime du konteinerius:

  • gifted_nobel (šio konteinerio pavadinimas sugeneruotas automatiškai – jūsų mašinoje jis bus kitoks). Tai pirmasis mūsų sukurtas konteineris, kuris vieną kartą atspausdino „Hello world“.
  • deimonas – trečiasis mūsų sukurtas konteineris, kuris veikia kaip deimonas.

Pastaba: nėra antrojo konteinerio (tas, kuriame yra interaktyvus apvalkalas), nes mes nustatėme –Rm variantas. Todėl šis konteineris automatiškai ištrinamas iškart po vykdymo.

Patikrinkime žurnalus ir pažiūrėkime, ką šiuo metu veikia „deemon“ konteineris:

docker logs -f daemon  

Konsolės išvestis:

...
hello world  
hello world  
hello world  
  • dokininkų žurnalai atnešti konteinerio rąstus.
  • -f vėliava sekti žurnalo išvestį (veikia iš tikrųjų kaip uodega -f).

Dabar sustabdykime „daemon“ konteinerį:

docker stop daemon  

Įsitikinkite, kad indas sustojo.

docker ps -a  

Konsolės išvestis:

CONTAINER ID  IMAGE   COMMAND                 CREATED        STATUS                      PORTS  NAMES  
1fc8cee64ec2  ubuntu  "/bin/sh -c 'while..."  5 minutes ago  Exited (137) 5 seconds ago         daemon  
c006f1a02edf  ubuntu  "/bin/echo 'Hello ..."  6 minutes ago  Exited (0) 6 minutes ago           gifted_nobel  

Konteineris sustabdytas. Mes galime tai pradėti iš naujo:

docker start daemon  

Įsitikinkime, kad jis veikia:

docker ps -a  

Konsolės išvestis:

CONTAINER ID  IMAGE   COMMAND                 CREATED        STATUS                    PORTS  NAMES  
1fc8cee64ec2  ubuntu  "/bin/sh -c 'while..."  5 minutes ago  Up 3 seconds                     daemon  
c006f1a02edf  ubuntu  "/bin/echo 'Hello ..."  6 minutes ago  Exited (0) 7 minutes ago         gifted_nobel  

Dabar vėl jį sustabdykite ir rankiniu būdu pašalinkite visus konteinerius:

docker stop daemon  
docker rm <your first container name>  
docker rm daemon  

Norėdami pašalinti visus konteinerius, galime naudoti šią komandą:

docker rm -f $(docker ps -aq)  
  • dokininkas rm yra komanda …

Parašykite komentarą