‫Să ne aruncăm în Dockerfile, care este de fapt o rețetă pentru crearea imaginii.
‫Până acum, toate imaginile Docker pe care le-am utilizat au fost create de la Dockerfiles unde puteți să le arătați
‫pe Docker Hub.
‫Dacă mi-ați clonat depozitul din resursele enumerate în prima secțiune, ar trebui să vedeți un fișier exemplu 1 al docarului
‫și acolo ar trebui să avem doar un fișier. Un dosar Docker.
‫Vom merge pe linie și vom vorbi despre aceste stanzuri diferite. Un Dockerfile pare să arate ca un script
‫shell, dar nu este.
‫Nu este un fișier batch, nu este un script shell. Este o limbă complet diferită de fișier
‫care este unică pentru Docker, iar numele implicit este Dockerfile cu o valoare D
‫Dar, de la linia de comandă, ori de câte ori aveți nevoie să rezolvați un
‫Dockerfile folosind comanda docker, puteți utiliza linia f. Ceea ce este de fapt comun printre multe instrumente cu Docker,
‫puteți utiliza bara f pentru a specifica un fișier diferit decât o valoare implicită.
‫Deci, primul este comanda. Comanda de la comanda este în fiecare dosar Docker. Trebuie să fie acolo.
‫În mod normal, este o distribuție minimă.
‫În acest caz este Debian.
‫Dar de multe ori în zilele noastre va fi alpin.
‫Și într-adevăr, motivul pentru care ați folosi aceste lucruri este să vă salvați timpul și durerea. Deoarece aceste distribuții minime sunt de fapt mult mai
‫mici decât CD-urile pe care le-ați folosi pentru a instala o mașină virtuală de la ele.
‫De exemplu, Ubuntu nu are nici măcar un cURL în el, în timp ce, evident, dacă ai instalat
‫o instalare completă Ubuntu pe un VM, ar fi cURL și multe alte comenzi deja instalate.
‫Deoarece toate aceste distribuții sunt imagini oficiale, înseamnă că vor fi mereu la curent cu cele mai
‫recente patch-uri de securitate și că te poți baza și ai încredere în ele.
‫Și unul dintre principalele beneficii pentru utilizarea în containere este utilizarea sistemelor lor de distribuție a pachetelor pentru a instala
‫orice software de care aveți nevoie în pachetul dvs.
‫În acest caz, folosim de fapt eliberarea Jessie, care este după colon.
‫Și, după cum vă amintiți din conversația noastră Docker Hub, există o mulțime de opțiuni diferite pe care le
‫puteți specifica aici pentru depozitul Debian.
‫Apoi, avem stanza ENV, iar ENV este pentru variabilele de mediu.
‫Este o modalitate de a seta variabilele de mediu, care sunt de fapt foarte importante
‫în containere, deoarece acestea sunt modul principal în care setăm cheile și valorile pentru construirea de containere și pentru rularea containerelor.
‫În acest caz, este de fapt setarea versiunii Nginx pe care ne-ar plăcea să o instalăm și această variabilă de mediu
‫va fi setată astfel încât toate liniile ulterioare să fie capabile să o utilizeze.
‫Acum, ca un memento din prelegerile anterioare, fiecare dintre aceste stanzas este un strat real în imaginea
‫noastră Docker.
‫Deci, ordinea lor contează, de fapt, pentru că funcționează de sus în jos.
‫După cum veți vedea prin această comandă relativ lungă aici pentru următoarea comandă. Veți vedea că pare o
‫comandă lungă.
‫Ceea ce face este să executați într-adevăr comenzi din shell în interiorul acestui container, deoarece îl construiește.
‫De obicei, veți vedea comenzi de rulare atunci când trebuie să instalați software-ul cu un depozit de pachete, sau
‫trebuie să faceți niște dezarhivări sau unele modificări de fișiere în interiorul containerului propriu-zis.
‫Comenzile de rulare pot rula, de asemenea, script-uri de shell pe care le-ați copiat mai devreme în fișier sau orice comenzi
‫pe care le puteți accesa
‫din interiorul containerului la momentul respectiv din fișier.
‫Deoarece venim din Debian, această comandă de rulare are acces la toate comenzile și binarele care ar fi
‫fost instalate cu acea versiune.
‫Și în aceasta pentru Nginx, această listă de comenzi este mai mult sau mai puțin adăugând o cheie
‫în depozit unde puteți obține pachetul pentru a instala ultimul Nginx din depozitul oficial Nginx.
‫Există câteva lucruri care sunt foarte importante în a face Dockerfiles bune și vom vorbi despre asta mai
‫mult într-o secțiune ulterioară despre care vorbim despre cele mai bune practici.
‫Dar două lucruri de remarcat.
‫Motivul pentru care adăugăm toate aceste comenzi cu amperajul dublu aici, astfel încât acestea sunt înlănțuite
‫unul după altul, se datorează faptului că, dacă vă amintiți, fiecare stanză este stratul propriu.
‫Ceea ce face acest lucru este că toate aceste comenzi se potrivesc într-un singur strat.
‫Ne salvează puțin timp.
‫Ne salvează spațiu. Și este atât de comun încât probabil veți vedea în fiecare Dockerfile pe Docker Hub.
‫Bine, pe linia 27 avem o altă comandă de alergare.
‫Aceasta se referă la îndreptarea fișierelor de jurnal la stdout și
‫la stderr.
‫Vom vedea mai târziu, modalitatea corectă de a face logarea în interiorul unui container este să nu vă conectați la un fișier jurnal. Și nu există niciun serviciu syslogd sau
‫alt serviciu syslog în interiorul
‫unui container. Docker ne ocupă de logarea noastră. Tot ce trebuie să facem în
‫interiorul containerului este să ne asigurăm că tot ceea ce dorim să fim capturați în bușteni este scuipat la stdout
‫și stderr și docerul se va ocupa de restul.
‫De fapt, există drivere care pot fi utilizate în motorul Docker Engine pentru a controla toate jurnalele pentru
‫toate containerele de pe gazda noastră.
‫Și așa e cu adevărat ceea ce vrei să faci cu ei.
‫Acesta adaugă mai multă complexitate aplicației dvs. dacă aplicația dvs. efectuează efectiv înregistrarea în sine.
‫Și atunci, dacă trebuie să vă ocupați de fișierele din fiecare container, acum aveți o problemă cu
‫privire la modul în care obțineți aceste fișiere afară, căutate și accesibile. Aici, luăm jurnalele implicite Nginx și, de fapt,
‫le facem legătura cu stdout-ul.
‫Așa că Docker îi poate captura.
‫Avem de asemenea o comandă de expunere.
‫În mod implicit, niciun port TCP sau UDP nu este
‫deschis în interiorul unui container. Nu expune nimic din container într-o rețea virtuală decât dacă l-am
‫lăsat aici.
‫Și, desigur, pentru că acesta este un server Web și proxy, acesta va expune 80 și 443.
‫Acum, această comandă expune nu înseamnă că aceste porturi vor fi deschise automat pe gazda noastră.
‫Asta este ceea ce comanda P este de fiecare dată când folosim programul de docker.
‫În sfârșit, avem CMD aici. CMD este un parametru necesar care este comanda finală
‫care va fi rulată de fiecare dată când lansați un nou container din imagine sau de fiecare dată când reporniți un container oprit.
‫Există o documentație cu adevărat excelentă cu privire la toate aceste stanzas, plus o mulțime mai mult, pe care vom merge mai târziu, pe site-ul
‫documentației Docker de la docs. docher. com, pe
‫care îl puteți găsi în resursele acestei conferințe.
‫Bine, deci acestea sunt elementele de bază, nu? Aceste cinci stanzas diferite sunt destul de normale în fiecare dosar Docker.
‫Unele dintre ele sunt necesare.
‫Unele dintre ele, cum ar fi alergarea, ENV-ul și expunerea, sunt opționale, dar sunt destul de tipice pentru majoritatea
‫containerelor pentru care veți crea imagini.