Docker ulertzea

Hainbat hilabete daramatzat Docker erabiltzen web proiektuen garapen/entrega prozesua egituratzeko. Habrakhabr irakurleei dockerri buruzko sarrera-artikuluaren itzulpena eskaintzen diet - "Docker ulertzen".

Zer da docker?

Docker aplikazioak garatzeko, entregatzeko eta ustiatzeko plataforma irekia da. Docker zure aplikazioak azkarrago entregatzeko diseinatuta dago. Docker-ekin, zure aplikazioa zure azpiegituratik desakopla dezakezu eta azpiegitura kudeatutako aplikazio gisa trata dezakezu. Docker-ek zure kodea azkarrago bidaltzen, azkarrago probatzen, aplikazioak azkarrago bidaltzen eta kodea idazten eta kodea exekutatzen arteko denbora murrizten laguntzen dizu. Docker-ek edukiontzi arin birtualizazio plataforma baten bidez egiten du, zure aplikazioak kudeatzen eta ostatatzen laguntzen dizuten prozesu eta utilitateak erabiliz.

Bere oinarrian, docker-ek ia edozein aplikazio exekutatzeko aukera ematen du, edukiontzi batean modu seguruan isolatuta. Isolamendu seguruak edukiontzi asko ostalari berean aldi berean exekutatzeko aukera ematen du. Edukiontziaren izaera arinek, hipervisor baten zama gehigarririk gabe ibiltzen dena, zure hardwareari etekin handiagoa ateratzeko aukera ematen dizu.

Edukiontzien birtualizazio plataforma eta tresnak erabilgarriak izan daitezke kasu hauetan:

  • zure aplikazioa (eta erabiltzen dituzun osagaiak) docker edukiontzietan ontziratu;
  • edukiontzi hauek banatu eta entregatu zure taldeei garatzeko eta probatzeko;
  • edukiontzi hauek zure ekoizpen guneetan jartzea, bai datu-zentroetan, bai hodeietan.

Zertarako erabil dezaket docker?

Argitaratu azkar zure aplikazioak

Docker bikaina da garapen-zikloa antolatzeko. Docker-ek garatzaileek tokiko edukiontziak exekutatu ditzakete aplikazio eta zerbitzuekin. Horrek, ondoren, etengabeko integrazio eta inplementazio lan-fluxuaren prozesuarekin integratzeko aukera ematen du.

Adibidez, zure garatzaileek lokalean kodea idazten dute eta beren garapen pila (Docker-eko irudien multzoa) partekatzen dute lankideekin. Prest daudenean, kodea eta edukiontziak proba gunera eramaten dituzte eta beharrezko probak egiten dituzte. Proba gunetik, kodea eta irudiak bidal ditzakete ekoizpenera.

Eratzea eta zabaltzea errazagoa

Docker edukiontzietan oinarritutako plataformak zure karga erabilgarria eramatea errazten du. Docker edukiontziak zure tokiko makinan exekutatu daitezke, benetako edo datu-zentro bateko makina birtualean edo hodeian.

Docker-en eramangarritasun eta izaera arinek zure lan-karga dinamikoki kudeatzea errazten du. Docker erabil dezakezu zure aplikazioa edo zerbitzuak zabaltzeko edo itzaltzeko. Docker-en abiadurak denbora ia errealean egin daiteke.

Karga handiagoak eta karga erabilgarriak

Docker arina eta azkarra da. Hipervisorean oinarritutako makina birtualen alternatiba erresistentea eta errentagarria eskaintzen du. Bereziki erabilgarria da karga handiko inguruneetan, adibidez, zure hodeia edo plataforma-zerbitzu gisa sortzen duzunean. Baina aplikazio txiki eta ertainetarako ere erabilgarria da, dituzun baliabideei etekin handiagoa atera nahi diezunean.

Dockerren osagai nagusiak

Docker-ek bi osagai nagusi ditu:

  • Docker: kode irekiko birtualizazio plataforma;
  • Docker Hub: Docker edukiontziak banatzeko eta kudeatzeko gure plataforma-zerbitzu gisa.

Ohar! Docker Apache 2.0 lizentziapean banatzen da.

Docker arkitektura

Docker-ek bezero-zerbitzariaren arkitektura erabiltzen du. Docker bezeroa Docker deabruarekin komunikatzen da, eta horrek zure edukiontziak sortu, exekutatu eta banatzeko zama hartzen du. Bezeroa eta zerbitzaria sistema berean exekutatu daitezke, bezeroa urruneko docker daemon batera konekta dezakezu. Bezeroa eta zerbitzaria socket edo RESTful API baten bidez komunikatzen dira.

Docker ulertzea

Docker deabrua

Diagraman ikusten den bezala, deabrua ostalari makinan exekutatzen da. Erabiltzaileak ez du zerbitzariarekin zuzenean elkarreragiten, baina bezeroa erabiltzen du horretarako.

Docker bezeroa

Docker bezeroa, docker programa, Dockerren interfaze nagusia da. Erabiltzailearen aginduak jasotzen ditu eta docker deabruarekin elkarreragin egiten du.

Docker barruan

Docker zertan datzan ulertzeko, hiru osagai ezagutu behar dituzu:

  • irudiak
  • erregistroa
  • edukiontzi

irudiak

Docker irudia irakurtzeko soilik den txantiloia da. Adibidez, irudiak Ubuntu sistema eragilea izan dezake Apache eta bertan aplikazio bat. Irudiak edukiontziak sortzeko erabiltzen dira. Docker-ek irudi berriak sortzea, lehendik daudenak eguneratzea edo beste pertsona batzuek sortutako irudiak deskargatu ditzakezu. Irudiak docker eraikuntza baten osagaiak dira.

Erregistroa

Docker erregistroak irudiak gordetzen ditu. Erregistro publiko eta pribatuak daude, zeinetatik irudiak deskargatu edo igo ditzakezu. Docker erregistro publikoa da Docker zentroa. Bertan gordetako irudi bilduma izugarria dago. Dakizuenez, irudiak zuk sortu ditzakezu edo besteek sortutako irudiak erabil ditzakezu. Erregistroak banaketa-osagai bat dira.

edukiontzi

Edukiontziak direktorioen antzekoak dira. Edukiontziek aplikazioak exekutatzeko behar duen guztia dauka. Edukiontzi bakoitza irudi batetik sortzen da. Edukiontziak sortu, abiarazi, gelditu, migratu edo ezabatu daitezke. Edukiontzi bakoitza isolatuta dago eta aplikaziorako plataforma segurua eskaintzen du. Ontziak lanaren osagaiak dira.

Beraz, nola funtzionatzen du Docker-ek?

Orain arte badakigu:

  • gure aplikazioak kokatuta dauden irudiak sor ditzakegu;
  • irudietatik edukiontziak sor ditzakegu aplikazioak exekutatzeko;
  • Irudiak Docker Hub edo beste irudi-erregistro baten bidez banatu ditzakegu.

Ikus dezagun nola uztartzen diren osagai hauek.

Nola funtzionatzen du irudiak?

Dagoeneko badakigu irudi bat irakurtzeko soilik den txantiloia dela eta bertatik edukiontzi bat sortzen den. Irudi bakoitza maila multzo batez osatuta dago. Docker-ek erabiltzen du sindikatuko fitxategi sistema maila hauek irudi bakarrean konbinatzeko. Union fitxategi-sistemak fitxategi-sistema desberdinetako fitxategiak eta direktorioak (adar desberdinak) gardentasunez gainjartzea ahalbidetzen du, fitxategi-sistema koherente bat sortuz.

Docker arina izatearen arrazoietako bat honelako geruzak erabiltzen dituelako da. Irudia aldatzen duzunean, adibidez, aplikazio bat eguneratzean, geruza berri bat sortzen da. Beraz, irudi osoa ordezkatu edo berreraiki gabe, makina birtual batekin egin beharko zenukeen bezala, geruza bakarrik gehitzen edo eguneratzen da. Eta ez duzu irudi berri osoa banatu behar, eguneratzea baino ez da banatzen, irudiak banatzea errazago eta azkarrago eginez.

Irudi bakoitzaren muinean oinarrizko irudi bat dago. Adibidez, ubuntu, Ubunturen oinarrizko irudia, edo fedora, Fedora banaketaren oinarrizko irudia. Irudiak oinarri gisa ere erabil ditzakezu irudi berriak sortzeko. Adibidez, apache irudi bat baduzu, zure web aplikazioetarako oinarrizko irudi gisa erabil dezakezu.

Ohar! Docker-ek normalean Docker Hub erregistrotik ateratzen ditu irudiak.

Docker irudiak oinarrizko irudi hauetatik sor daitezke; irudi hauek sortzeko urratsei argibideak deitzen diegu. Argibide bakoitzak irudi edo maila berri bat sortzen du. Jarraibideak hauek izango dira:

  • exekutatu komandoa
  • fitxategi edo direktorio bat gehitzea
  • ingurune aldagai bat sortzea
  • Irudi honen edukiontzia abiarazten denean exekutatu behar den argibideak

Argibide hauek fitxategi batean gordetzen dira Dockerfile. Docker-ek hau irakurtzen du Dockerfile, irudia eraikitzean, argibide hauek exekutatzen ditu eta azken irudia itzultzen du.

Nola funtzionatzen du docker erregistroak?

Erregistroa docker irudien biltegi bat da. Irudia sortu ondoren, Docker Hub erregistro publikoan edo zure erregistro pertsonalean argitaratu dezakezu.

Docker bezeroarekin, dagoeneko argitaratutako irudiak bilatu eta zure docker makinara deskarga ditzakezu edukiontziak sortzeko.

Docker Hub-ek irudi-biltegi publiko eta pribatuak eskaintzen ditu. Biltegi publikoetatik irudiak bilatzea eta deskargatzea guztion eskura dago. Biltegiratze pribatuen edukia ez da bilaketa-emaitzetan sartzen. Eta zuk eta zure erabiltzaileek soilik jaso ditzakezue irudi horiek eta haietatik edukiontziak sortu.

Nola funtzionatzen du edukiontzi batek?

Edukiontzi bat sistema eragile batek, erabiltzaile-fitxategiek eta metadatuek osatzen dute. Dakigunez, edukiontzi bakoitza irudi batetik sortzen da. Irudi honek ontzian zer dagoen, zer prozesu hasi behar den, edukiontzia noiz hasten den eta beste konfigurazio-datu batzuk esaten dizkio dockerri. Docker-en irudia irakurtzeko soilik da. Docker-ek edukiontzi bat abiarazten duenean, irakurketa/idazketa geruza bat sortzen du irudiaren gainean (lehen esan bezala union fitxategi-sistema erabiliz) eta bertan aplikazioa exekutatu daiteke.

Zer gertatzen da edukiontzia hasten denean?

Edo programa erabiliz docker, edo RESTful APIa erabiliz, docker bezeroak docker deabruari edukiontzia abiarazteko esaten dio.

$ sudo docker run -i -t ubuntu /bin/bash

Ikus dezagun komando honi. Bezeroa komandoa erabiliz abiarazten da docker, aukerarekin run, edukiontzi berri bat martxan jarriko dela dio. Edukiontzi bat exekutatzeko gutxieneko baldintzak ezaugarri hauek dira:

  • zein irudi erabili edukiontzia sortzeko. Gure kasuan ubuntu
  • edukiontzia abiarazten denean exekutatu nahi duzun komandoa. Gure kasuan /bin/bash

Zer gertatzen da kaputxa azpian komando hau exekutatzen dugunean?

Docker-ek, ordenan, honako hau egiten du:

  • ubuntu irudia deskargatzen du: docker-ek irudien erabilgarritasuna egiaztatzen du ubuntu tokiko makinan, eta ez badago, deskargatu hemendik Docker zentroa. Irudi bat badago, edukiontzi bat sortzeko erabiltzen du;
  • edukiontzi bat sortzen du: irudia jasotzen denean, docker-ek edukiontzi bat sortzeko erabiltzen du;
  • fitxategi-sistema hasieratzen du eta irakurtzeko soilik maila muntatzen du: edukiontzia fitxategi-sisteman sortzen da eta irudia irakurtzeko soilik mailara gehitzen da;
  • sarea/zubia hasieratzen du: docker makina ostalariarekin komunikatzeko aukera ematen duen sare interfaze bat sortzen du;
  • IP helbidea ezartzea: helbidea aurkitzen eta ezartzen du;
  • Zehaztutako prozesua hasten da: zure aplikazioa abiarazten du;
  • Zure aplikazioaren irteera prozesatu eta ekoizten du: zure aplikazioaren sarrera, irteera eta errore-jario estandarrak konektatu eta erregistratzen ditu, zure aplikazioa nola funtzionatzen duen jarrai dezazun.

Orain funtzionatzen duen edukiontzi bat duzu. Zure edukiontzia kudeatu dezakezu, zure aplikazioarekin elkarreragin. Aplikazioa gelditzea erabakitzen duzunean, ezabatu edukiontzia.

Erabilitako teknologiak

Docker Go-n idatzita dago eta Linux kernelaren ezaugarri batzuk erabiltzen ditu goiko funtzionaltasuna ezartzeko.

Izen-espazioak

Docker-ek teknologia erabiltzen du namespaces lan-espazio isolatuak antolatzeko, edukiontziak deitzen ditugunak. Edukiontzi bat hasten dugunean, docker-ek edukiontzi horretarako izen-espazio multzo bat sortzen du.

Horrek geruza isolatu bat sortzen du, edukiontziaren alderdi bakoitza bere izen-espazioan exekutatzen delarik eta kanpoko sistemarako sarbidea ez duelarik.

Docker-ek erabiltzen dituen izen-espazio batzuen zerrenda:

  • pid: prozesua isolatzeko;
  • net: sareko interfazeak kudeatzeko;
  • ipc: IPC baliabideak kudeatzeko. (ICP: InterProccess Communication);
  • mnt: muntaketa puntuak kudeatzeko;
  • utc: nukleoa eta kontrolaren bertsioaren sorrera isolatzeko (UTC: Unix denbora partekatzeko sistema).

Kontrol-taldeak

Docker-ek teknologia ere erabiltzen du cgroups edo kontrol-taldeak. Aplikazio bat modu isolatuan exekutatzeko gakoa aplikazioari eman nahi dituzun baliabideak soilik eskaintzea da. Honek edukiontziak auzokide onak izango direla ziurtatzen du. Kontrol-taldeek erabilgarri dauden hardware-baliabideak partekatzeko aukera ematen dute eta, behar izanez gero, mugak eta murrizketak ezarri. Adibidez, mugatu edukiontziaren memoria kopurua.

Union File System

Union File Sysem edo UnionFS geruzak sortuz funtzionatzen duen fitxategi sistema bat da, oso arina eta azkarra bihurtuz. Docker-ek UnionFS erabiltzen du edukiontzia eraikitzen den blokeak sortzeko. Docker-ek UnionFSren hainbat aldaera erabil ditzake, besteak beste: AUFS, btrfs, vfs eta DeviceMapper.

Edukiontzi formatuak

Docker-ek osagai hauek edukiontzi formatua deitzen dugun bilgarri batean konbinatzen ditu. Formatu lehenetsia deitzen da libcontainer. Docker-ek Linux-en edukiontzi formatu tradizionala ere onartzen du LXC. Etorkizunean, Docker-ek beste edukiontzi formatu batzuk onar ditzake. Adibidez, BSD Jails edo Solaris Zones-ekin integratzea.

Iturria: www.habr.com

Gehitu iruzkin berria