Docker për fillestarët: Gjithçka që duhet të dini
Docker krijon aplikacione të paketuara të quajtura kontejnerë. Çdo kontejner ofron një mjedis të izoluar të ngjashëm me një makinë virtuale (VM). Ndryshe nga VM-të, kontejnerët Docker nuk drejtojnë një sistem të plotë operativ. Ata ndajnë kernelin e hostit tuaj dhe virtualizohen në një nivel softueri.
Bazat Docker
Docker është bërë një mjet standard për zhvilluesit e softuerit dhe administratorët e sistemit. Është një mënyrë e mirë për të nisur shpejt aplikacionet pa ndikuar në pjesën tjetër të sistemit tuaj. Ju mund të aktivizoni një shërbim të ri me një komandë të vetme docker run
.
Kontejnerët përmbledhin gjithçka që nevojitet për të ekzekutuar një aplikacion, nga varësitë e paketës OS deri te kodi juaj burimor. Ju përcaktoni hapat e krijimit të një kontejneri si udhëzime në një Dockerfile
. Docker përdor Dockerfile për të ndërtuar një imazh.
Imazhet përcaktojnë softuerin e disponueshëm në kontejnerë. Kjo është shumë e barabartë me fillimin e një VM me një sistem operativ ISO. Nëse krijoni një imazh, çdo përdorues i Docker do të jetë në gjendje të nisë aplikacionin tuaj me docker run
.
Si funksionon Docker?
Kontejnerët përdorin veçoritë e kernelit të sistemit operativ për të ofruar mjedise pjesërisht të virtualizuara. Është e mundur të krijohen kontejnerë nga e para me komanda si chroot
. Kjo fillon një proces me një direktori rrënjësore të specifikuar në vend të rrënjës së sistemit. Por përdorimi i drejtpërdrejtë i veçorive të kernelit është i ngathët, i pasigurt dhe i prirur ndaj gabimeve.
Docker është një zgjidhje e plotë për prodhimin, shpërndarjen dhe përdorimin e kontejnerëve. Publikimet moderne të Docker përbëhen nga disa komponentë të pavarur. Së pari, është Docker CLI, me të cilin ndërveproni në terminalin tuaj. CLI dërgon komanda te një Daemon Docker. Kjo mund të funksionojë në nivel lokal ose në një host të largët. Daemon është përgjegjës për menaxhimin e kontejnerëve dhe imazheve nga ata janë krijuar.
Komponenti përfundimtar quhet koha e funksionimit të kontejnerit. Koha e ekzekutimit thërret veçoritë e kernelit për të nisur në të vërtetë kontejnerët. Docker është i pajtueshëm me kohëzgjatjet që i përmbahen specifikimeve OCI. Ky standard i hapur lejon ndërveprim ndërmjet mjeteve të ndryshme të kontejnerizimit.
Ju nuk keni nevojë të shqetësoheni shumë për funksionimin e brendshëm të Docker kur të filloni për herë të parë. Instalimi i docker
në sistemin tuaj do t'ju japë gjithçka që ju nevojitet për të ndërtuar dhe drejtuar kontejnerët.
Pse kaq shumë njerëz përdorin Docker?
Kontejnerët janë bërë kaq të njohur sepse zgjidhin shumë sfida të zakonshme në zhvillimin e softuerit. Aftësia për të kontejneruar një herë dhe për të ekzekutuar kudo redukton hendekun midis mjedisit tuaj të zhvillimit dhe serverëve tuaj të prodhimit.
Përdorimi i kontejnerëve ju jep besim se çdo mjedis është identik. Nëse keni një anëtar të ri të ekipit, atij i duhet vetëm të docker run
për të konfiguruar shembullin e vet të zhvillimit. Kur nisni shërbimin tuaj, mund të përdorni imazhin tuaj Docker për t'u vendosur në prodhim. Mjedisi i drejtpërdrejtë do të përputhet saktësisht me shembullin tuaj lokal, duke shmangur skenarët punon në makinën time.
Docker është më i përshtatshëm se një makinë virtuale e plotë. VM-të janë mjete për qëllime të përgjithshme të krijuara për të mbështetur çdo ngarkesë të mundshme të punës. Në të kundërt, kontejnerët janë të lehtë, të vetë-mjaftueshëm dhe më të përshtatshëm për kutitë e përdorimit. Ndërsa Docker ndan kernelin e hostit, kontejnerët kanë një ndikim të papërfillshëm në performancën e sistemit. Koha e nisjes së kontejnerit është pothuajse e menjëhershme, pasi po filloni vetëm proceset, jo një sistem të tërë operativ.
Fillimi
Docker është i disponueshëm në të gjitha shpërndarjet e njohura Linux. Ai gjithashtu funksionon në Windows dhe macOS. Ndiqni udhëzimet e konfigurimit të Docker për platformën tuaj për ta vënë atë në funksion.
Mund të kontrolloni nëse instalimi juaj po funksionon duke nisur një kontejner të thjeshtë:
docker run hello-world
Kjo do të nisë një kontejner të ri me imazhin bazë hello-world
. Imazhi lëshon disa rezultate që shpjegojnë se si të përdorni Docker. Kontejneri më pas del, duke ju kthyer në terminalin tuaj.
Krijimi i imazheve
Pasi të keni ekzekutuar hello-world
, jeni gati të krijoni imazhet tuaja Docker. Një Dockerfile përshkruan se si të ekzekutoni shërbimin tuaj duke instaluar softuerin e kërkuar dhe duke kopjuar në skedarë. Këtu është një shembull i thjeshtë duke përdorur serverin në internet Apache:
FROM httpd:latest
RUN echo "LoadModule headers_module modules/mod_headers.so" >> /usr/local/apache2/conf/httpd.conf
COPY .htaccess /var/www/html/.htaccess
COPY index.html /var/www/html/index.html
COPY css/ /var/www/html/css
Linja FROM
përcakton imazhin bazë. Në këtë rast, ne po fillojmë nga imazhi zyrtar i Apache. Docker zbaton udhëzimet e mbetura në Dockerfile tuaj në krye të imazhit bazë.
Faza RUN
ekzekuton një komandë brenda kontejnerit. Kjo mund të jetë çdo komandë e disponueshme në mjedisin e kontejnerit. Po aktivizojmë modulin headers
Apache, i cili mund të përdoret nga skedari .htaccess
për të vendosur rregullat e rrugëtimit.
Linjat përfundimtare kopjojnë skedarët HTML dhe CSS në drejtorinë tuaj të punës në imazhin e kontejnerit. Imazhi juaj tani përmban gjithçka që ju nevojitet për të drejtuar faqen tuaj të internetit.
Tani mund të ndërtoni imazhin:
docker build -t my-website:v1 .
Docker do të përdorë skedarin tuaj Docker për të ndërtuar imazhin. Do të shihni daljen në terminalin tuaj ndërsa Docker ekzekuton secilin nga udhëzimet tuaja.
-t
në komandë etiketon imazhin tuaj me një emër të caktuar (my-website:v1
). Kjo e bën më të lehtë referimin në të ardhmen. Etiketat kanë dy komponentë, të ndara me dy pika. Pjesa e parë përcakton emrin e imazhit, ndërsa e dyta zakonisht tregon versionin e saj. Nëse e hiqni dy pika, Docker do të përdorë si versionin e etiketës më të fundit
si parazgjedhje.
.
në fund të komandës i thotë Docker-it të përdorë Dockerfile në drejtorinë tuaj lokale të punës. Kjo gjithashtu përcakton kontekstin e ndërtimit, duke ju lejuar të përdorni skedarë dhe dosje në drejtorinë tuaj të punës me udhëzime COPY
në Dockerfile tuaj.
Pasi të keni krijuar imazhin tuaj, mund të nisni një kontejner duke përdorur docker run
:
docker run -d -p 8080:80 my-website:v1
Ne po përdorim disa flamuj shtesë me docker run
këtu. Flamuri -d
bën që Docker CLI të shkëputet nga kontejneri, duke e lejuar atë të funksionojë në sfond. Harta e portit përcaktohet me -p
, kështu që porti 8080 në hartën tuaj të hostit lidhet me portin 80 në kontejner. Ju duhet të shihni faqen tuaj të internetit nëse vizitoni localhost:8080
në shfletuesin tuaj.
Imazhet e dokerit formohen nga shtresat. Çdo udhëzim në Dockerfile tuaj krijon një shtresë të re. Ju mund të përdorni veçori të avancuara të ndërtimit për të referuar imazhe të shumta bazë, duke hequr shtresat ndërmjetëse nga imazhet e mëparshme.
Regjistrat e imazheve
Pasi të keni një imazh, mund ta shtyni atë në një regjistër. Regjistrat ofrojnë ruajtje të centralizuar në mënyrë që të mund të ndani kontejnerët me të tjerët. Regjistri i paracaktuar është Docker Hub.
Kur ekzekutoni një komandë që i referohet një imazhi, Docker së pari kontrollon nëse ai është i disponueshëm në nivel lokal. Nëse nuk është, do të përpiqet ta tërheqë nga Docker Hub. Mund të tërhiqni manualisht imazhe me komandën docker pull
:
docker pull httpd:latest
Nëse dëshironi të publikoni një imazh, krijoni një llogari Docker Hub. Ekzekutoni login docker
dhe shkruani emrin e përdoruesit dhe fjalëkalimin tuaj.
Më pas, etiketoni imazhin tuaj duke përdorur emrin e përdoruesit tuaj Docker Hub:
docker tag my-image:latest docker-hub-username/my-image:latest
Tani, mund ta shtyni imazhin tuaj:
docker push docker-hub-username/my-image:latest
Përdoruesit e tjerë do të jenë në gjendje të tërheqin imazhin tuaj dhe të nisin kontejnerët me të.
Ju mund të ekzekutoni regjistrin tuaj nëse keni nevojë për ruajtje private të imazheve. Disa shërbime të palëve të treta ofrojnë gjithashtu regjistra Docker si alternativa ndaj Docker Hub.
Menaxhimi i kontejnerëve tuaj
Docker CLI ka disa komanda për t'ju lejuar të menaxhoni kontejnerët tuaj që funksionojnë. Këtu janë disa nga më të dobishmet për të ditur:
Kontejnerët e listimit
docker ps
ju tregon të gjithë kontejnerët tuaj që funksionojnë. Shtimi i flamurit -a
do të tregojë gjithashtu kontejnerët e ndaluar.
Ndalimi dhe ndezja e kontejnerëve
Për të ndaluar një kontejner, ekzekutoni docker stop my-container
. Zëvendëso my-container
me emrin ose ID-në e kontejnerit. Ju mund ta merrni këtë informacion nga komanda ps
. Një kontejner i ndaluar riniset me docker start my-container
.
Kontejnerët zakonisht funksionojnë për aq kohë sa procesi i tyre kryesor qëndron i gjallë. Politikat e rinisjes kontrollojnë se çfarë ndodh kur një kontejner ndalon ose hosti juaj riniset. Kaloni --restart gjithmonë
te docker run
për të bërë një rinisje të kontejnerit menjëherë pasi të ndalojë.
Marrja e një predhe
Ju mund të ekzekutoni një komandë në një kontejner duke përdorur docker exec my-container my-command
. Kjo është e dobishme kur dëshironi të thirrni manualisht një ekzekutues që është i ndarë nga procesi kryesor i kontejnerit.
Shtoni flamurin -it
nëse keni nevojë për qasje interaktive. Kjo ju lejon të futeni në një guaskë duke ekzekutuar docker exec -it my-container sh
.
Regjistrat e monitorimit
Docker mbledh automatikisht daljen e emetuar në rrjedhat standarde të hyrjes dhe daljes së një kontejneri. Komanda docker logs my-container
do të shfaqë regjistrat e një kontejneri brenda terminalit tuaj. Flamuri --follow
krijon një transmetim të vazhdueshëm në mënyrë që të mund të shikoni regjistrat në kohë reale.
Pastrimi i Burimeve
Kontejnerët dhe imazhet e vjetra mund të grumbullohen shpejt në sistemin tuaj. Përdorni docker rm my-container
për të fshirë një kontejner me ID ose emrin e tij.
Komanda për imazhet është docker rmi my-image:latest
. Kaloni ID-në e imazhit ose emrin e plotë të etiketës. Nëse specifikoni një etiketë, imazhi nuk do të fshihet derisa të mos ketë më etiketa të caktuara. Përndryshe, etiketa e dhënë do të hiqet, por etiketat e tjera të imazhit do të mbeten të përdorshme.
Pastrimi në masë është i mundur duke përdorur komandën docker prune
. Kjo ju jep një mënyrë të thjeshtë për të hequr të gjithë kontejnerët e ndaluar dhe imazhet e tepërta.
Menaxhimi grafik
Nëse terminali nuk është gjëja juaj, mund të përdorni mjete të palëve të treta për të konfiguruar një ndërfaqe grafike për Docker. Paneli i uebit ju lejojnë të monitoroni dhe menaxhoni shpejt instalimin tuaj. Ato gjithashtu ju ndihmojnë të merrni kontrollin në distancë të kontejnerëve tuaj.
Ruajtja e vazhdueshme e të dhënave
Kontejnerët Docker janë si parazgjedhje kalimtare. Ndryshimet e bëra në sistemin e skedarëve të një kontejneri nuk do të vazhdojnë pasi kontejneri të ndalojë. Nuk është e sigurt të ekzekutosh çdo formë të sistemit të ruajtjes së skedarëve në një kontejner të nisur me një komandë bazë docker run
.
Ka disa qasje të ndryshme për menaxhimin e të dhënave të vazhdueshme. Më e zakonshme është përdorimi i një Vëllimi Docker. Vëllimet janë njësi ruajtëse që janë montuar në sistemet e skedarëve të kontejnerëve. Çdo e dhënë në një vëllim do të mbetet e paprekur pasi kontejneri i tij i lidhur ndalon, duke ju lejuar të lidhni një kontejner tjetër në të ardhmen.
Ruajtja e sigurisë
Ngarkesat e punës me docker mund të jenë më të sigurta se homologët e tyre metalikë të zhveshur, pasi Docker siguron një ndarje midis sistemit operativ dhe shërbimeve tuaja. Sidoqoftë, Docker është një çështje e mundshme sigurie, pasi zakonisht funksionon si root
dhe mund të shfrytëzohet për të ekzekutuar softuer me qëllim të keq.
Nëse po përdorni vetëm Docker si një mjet zhvillimi, instalimi i paracaktuar është përgjithësisht i sigurt për t'u përdorur. Serverët e prodhimit dhe makinat me një prizë daemon të ekspozuar ndaj rrjetit duhet të forcohen përpara se të dilni drejtpërdrejt.
Kontrolloni instalimin tuaj të Docker për të identifikuar çështjet e mundshme të sigurisë. Ka mjete të automatizuara të disponueshme që mund t'ju ndihmojnë të gjeni dobësitë dhe të sugjeroni zgjidhje. Ju gjithashtu mund të skanoni imazhe individuale të kontejnerëve për çështje që mund të shfrytëzohen nga brenda.
Puna me kontejnerë të shumtë
Komanda docker
funksionon vetëm me një kontejner në të njëjtën kohë. Ju shpesh do të dëshironi të përdorni kontejnerë në agregat. Docker Compose është një mjet që ju lejon të përcaktoni kontejnerët tuaj në mënyrë deklarative në një skedar YAML. Mund t'i nisni të gjitha me një komandë të vetme.
Kjo është e dobishme kur projekti juaj varet nga shërbime të tjera, si p.sh. një web backend që mbështetet në një server të bazës së të dhënave. Ju mund t'i përcaktoni të dy kontejnerët në docker-compose.yml
dhe të përfitoni nga menaxhimi i thjeshtë me rrjetëzimin automatik.
Këtu është një skedar i thjeshtë docker-compose.yml
:
version: "3"
services:
app:
image: app-server:latest
ports:
- 8000:80
database:
image: database-server:latest
volumes:
- database-data:/data
volumes:
database-data:
Kjo përcakton dy kontejnerë (app
dhe baza e të dhënave
). Një vëllim është krijuar për bazën e të dhënave. Kjo montohet në /data
në kontejner. Porta 80 e serverit të aplikacionit ekspozohet si 8000 në host. Ekzekutoni docker-compose up -d
për të rrotulluar të dy shërbimet, duke përfshirë rrjetin dhe volumin.
Përdorimi i Docker Compose ju lejon të shkruani përkufizime të kontejnerëve të ripërdorshëm që mund t'i ndani me të tjerët. Ju mund të vendosni një docker-compose.yml
në kontrollin e versionit tuaj në vend që zhvilluesit të mësojnë përmendësh komandat docker run
.
Ekzistojnë gjithashtu qasje të tjera për drejtimin e kontejnerëve të shumtë. Aplikacioni Docker është një zgjidhje në zhvillim që ofron një nivel tjetër abstraksioni. Diku tjetër në ekosistem, Podman është një alternativë Docker që ju lejon të krijoni pods kontejnerësh brenda terminalit tuaj.
Orkestrimi i kontejnerëve
Docker zakonisht nuk funksionon siç është në prodhim. Tani është më e zakonshme të përdoret një platformë orkestrimi si modaliteti Kubernetes ose Docker Swarm. Këto mjete janë krijuar për të trajtuar kopje të shumta të kontejnerëve, gjë që përmirëson shkallëzueshmërinë dhe besueshmërinë.
Docker është vetëm një komponent në lëvizjen më të gjerë të kontejnerizimit. Orkestruesit përdorin të njëjtat teknologji të kohëzgjatjes së kontejnerëve për të siguruar një mjedis që është më i përshtatshëm për prodhim. Përdorimi i rasteve të shumta të kontejnerëve lejon përditësimet e përsëritura, si dhe shpërndarjen nëpër makina, duke e bërë vendosjen tuaj më elastike ndaj ndryshimeve dhe ndërprerjeve. CLI i rregullt docker
synon një host dhe punon me kontejnerë individualë.
Një platformë e fuqishme për kontejnerë
Docker ju jep gjithçka që ju nevojitet për të punuar me kontejnerë. Ai është bërë një mjet kyç për zhvillimin e softuerit dhe administrimin e sistemit. Përfitimet kryesore janë rritja e izolimit dhe transportueshmërisë për shërbimet individuale.
Për t'u njohur me Docker kërkon një kuptim të koncepteve bazë të kontejnerit dhe imazhit. Ju mund t'i aplikoni këto për të krijuar imazhet dhe mjediset tuaja të specializuara që përmbajnë ngarkesën tuaj të punës.