Kontainerrekin hasten

Kontainerrak

1 Sarrera

Gaur egun oso ohikoa da kontainer-sistemak erabiltzea, eta ezagunena software garapenaren munduan Docker da. Sistema honek hainbat abantaila dakartza (aurrerago ikusiko ditugu), eta horri esker, besteak beste, produkzioko ingurunean erabilitako bertsioak garapen-faseetan erabilitako berberak direla egiaztatu dezakegu.

Dokumentu honetan Docker kontainer-sisteman oinarritutako sistema baten instalazioa eta konfigurazioa azalduko dira, zerbitzuak abiarazi ahal izateko eta ezagutu beharreko zenbait konfigurazio egiteko.

2 Kontainer-sistemak

Kontainer-sistemak birtualizazio-metodo bat dira (“sistema eragile mailako birtualizazioa” bezala ezagutua), eta horren bidez posible da sistema eragilearen nukleoaren birtualizazio-geruza baten gainean hainbat “erabiltzaile-espazio” instantzia exekutatzea.

“Erabiltzaile-espazio” horiei (bertan aplikazioak, zerbitzuak… exekutatuko dira) kontainerrak deitzen zaie, eta benetako zerbitzari bat bezala izan daitezkeen arren, sistema eragilearen kernel-ak eskaintzen duen isolamendu-mekanismo baten menpe daude. Horrez gain, baliabide-mugak aplika daitezke, hala nola espazioa, memoria, disko-sarbidea…

Kontainer bar zerbitzuen exekuziorako espazio bat da, eta baliabide-mugak (memoria, disko-sarbidea…) aplika dakizkioke.

Erabiltzaile baten ikuspegitik, zerbitzu bat makina birtual batean edo kontainer batean exekutatzea antzekoa da. Aldiz, sistema-administratzaile edo garatzaile baten ikuspegitik, kontaineren erabilerak hainbat abantaila dakartza, eta horiek hurrengo ataletan ikusiko ditugu.

2.1 Historia pixka bat

Kontainerrak erabiliz aplikazioak hedatzea gaur egun oso modan dagoen arren, ez da kontzeptu berria, 80ko hamarkadatik existitzen baita UNIX sistemetan chroot kontzeptuarekin.

Chroot, “chroot kaiolak” bezala ere ezaguna, komandoak direktorio baten barruan exekutatzea ahalbidetzen zuen, hasiera batean ibilbide horretatik irten ezin zela suposatuz. Segurtasun-murrizketa oso gutxi zituen, baina kontainer-sistemarako lehen urratsa izan zen.

LXC 2008an sortu zen, Linux kernelaren hainbat funtzionaltasun erabiliz prozesu desberdinak exekutatu eta bere sare-espazioa izan zezakeen ingurune birtual bat eskaintzeko. LXC-rekin batera tresna ugari sortu ziren kontainer hauek kontrolatzeko, baita txantiloiak sortzeko eta LXC-rekin programazio-lengoaia desberdinetatik interakzioa ahalbidetzen duen API bat ere.

Beste teknologia batzuk ere egon dira Linuxen, hala nola OpenVz, baina guk Dockerri erreparatuko diogu, gaur egun ezagunena baita.

2.2 Zer da kontainer bat eta nola sortzen da

Docker azpiegituraren barruan kontainer bat zer den eta nola sortzen den ulertzeko, hainbat kontzeptu bereizi behar ditugu:

  • Docker irudia
  • Docker kontainerra

Ondoren xehetasun handiagoz azalduko dira.

2.2.1 Docker irudiak

Kontainer bat sortzeko “irudi” bat erabiltzea beharrezkoa da, hau da, aplikazioaren kodea eta exekutatzeko behar dituen mendekotasun guztiak biltzen dituen fitxategi immutagarria (aldatu ezin dena). Horrela, azkar eta modu fidagarrian exekutatu daiteke, edozein ingurunean.

Irudiak, bere jatorri irakurketa-soilekoari esker, “txantiloi” gisa har daitezke, aplikazio bat exekutatzeko behar dituen ingurune osoa, une jakin bateko ordezkaritza direlako. Konsistentzia hori Docker-en ezaugarri nagusietako bat da.

Irudi batek interesatzen zaigun zerbitzua eta haren mendekotasunak ditu, eta exekutatzen den zerbitzaritik independenteak dira.

Irudi bat beste irudi batzuk oinarri gisa erabiliz sor daiteke. Adibidez, PHPMyAdmin irudiak PHPMyAdmin aplikazioa biltzen du PHP (8.1-apache bertsioa) irudiaren gainean, eta honek berriz Debian (11-slim bertsioa) irudia erabiltzen du.

PHPMyAdmin-ek erabilitako irudien hierarkia. Iturria.

Sortutako irudiei gehienetan etiketak (tags) eransten zaizkie bertsioak edo barne-ezaugarriak bereizteko. Sortzaile bakoitzak bere intereseko etiketak sortzen ditu. Adibidez:

  • latest: Sortutako azken irudiari deritzo.
  • php:8.1-apache: Irudi honetan PHPren bertsioa 8.1 dela eta Apache ere baduela adierazten du.

Erabili ditzakegu irudi publikoak komunitateak igotako irudiak gordetzen dituen registry publiko baten bidez deskargatuz. Gehien erabiltzen den registry nagusia Docker Hub da.

Docker irudiak publikoak edo pribatuak izan daitezke, eta registry izeneko biltegi batean gordetzen dira; ezagunena Docker Hub da

Gure irudi pribatuak sor ditzakegu, eta horiek gure ekipoetan gorde edo guk sortutako registry pribatu batean eduki ditzakegu (ordainpeko zerbitzuak ere badaude).

2.2.2 Docker kontainerrak

Docker exekuzio-denborako ingurune birtualizatu bat, non erabiltzaileek aplikazioak isolatu ditzaketen kontainer bat da. Kontainer hauek unitate trinkoak eta eramangarriak dira, eta baliabideen mugaketa-sistema aplika dakieke.

Kontainer bat irudi baten bidez sortzen da; irudi horren exekutagarri den bertsioa da, ingurune birtualizatu batean sortuta.

Kontainer bat irudi baten bidez sortzen da eta haren exekutagarri den bertsioa da. Horretarako, irudi immutagarriaren gainean idazketa-geruza bat sortzen da, eta hor idatzi daitezke datuak. Irudi base beraren bidez kontainer mugagabeak sor daitezke.

Kontainer baten barneko irudia

Idazketa-geruza ez da iraunkorra eta kontainerra ezabatzean galtzen da, hau da, kontainer baten datuak ezabatzen dira kontainer bera ezabatzean. Portaera hau saihesteko, datuen bolumen iraunkorra erabil daiteke, horrela datu horiek ez dira galduko.

Kontainer baten barruan sortutako datuak ezabatzen dira kontainerra ezabatzean

2.3 Kontainerrak vs. Makina birtualak

Makina birtualen erabilera oso hedatua dago, gero eta errazagoa baita hauek sortzea. Honek ez du esan nahi beti aukera onena denik; beraz, konparaketa bat egingo da, makina birtualekin eta kontainer-sistemekin garapena egiterakoan, kontuan hartu beharreko alderdi desberdinak aztertuz.

2.3.1 Azpiegitura

Makina birtualak sortzeak aukera ematen digu ingurune isolatuak sortzeko, bertan nahi dugun Sistema Eragilea instalatzeko eta, horrekin batera, behar dugun softwarea eta zerbitzuak instalatzeko.

Makina birtualak hardware-mailan birtualizatzen dira; horretarako beharrezkoa da Sistema Eragile bat hipervisorearekin, birtualizazioa ahalbidetzeko. Bestalde, kontainerrak aplikazio-geruzan birtualizatzen dira, eta horrek sistema askoz arinago bihurtzen du, baliabide horiek kontainer barruan exekutatu nahi ditugun zerbitzuetan erabil daitezen.

Azpiegitura: Makina Birtualak vs Docker

Irudian konparaketa bat ikus daiteke: 3 aplikazio desberdin makina birtualetan edo kontainer desberdinetan martxan jarriz nola geratuko litzatekeen azpiegitura.

Irudian ikus daitekeenez, zerbitzu bakoitza makina birtual bereizi batean izatean, sistema eragile osoa birtualizatu behar da, eta horrek baliabide-kostua (RAM memoria eta disko gogorra) eta konfigurazioan eta segurtasunean denbora-kostua dakar.

Kontainerrak erabiliz azpiegitura nabarmen sinplifikatzen da

Bestalde, kontainer-sistema batean, kontainer bakoitza zerbitzu isolatu bat da, eta hasiera batean bere parametroak konfiguratzeaz bakarrik arduratu beharko gara.

2.3.2 Garapenean dauden abantailak

Aplikazio bat garatzerakoan ohikoa da probak egitea liburutegi, framework edo programazio-lengoaia beraren bertsio desberdinak erabiliz. Horrela, gure aplikazioa bateragarria den ala ez ikus dezakegu.

Makina birtualak erabiltzean, gure banaketak (distribución) dituen bertsioen menpe gaude, eta baliteke bertsio berriak edo paraleloan beste bertsio batzuk ezin instalatzea.

Adibidez, gaur egun PHP-ren azken bertsioa 8.4.11 da eta Apache-ren bertsioa 2.4.65:

  • Debian 12-n soilik PHP 8.2.29 eta Apache 2.4.62 instala daitezke.
  • Ubuntu 24.04-n PHP 8.3.6 eta Apache 2.4.58 daude eskuragarri.

Docker erabiliz, interesatzen zaigun zerbitzuaren bertsio desberdinekin kontainerrak aldi berean martxan jar ditzakegu, gure aplikazioa/zerbitzua bateragarria den ala ez egiaztatzeko.

Docker erabiliz, bertsio desberdinekin zerbitzuak aldi berean martxan jar daitezke.

Bestalde, garatzaile batek sistema eragile desberdin bat erabili nahi badu, ez du kezkatu beharko bere banaketak bertsio berdinak dituen ala ez. Eta Windows/Mac erabiltzen badu, ez du zertan bertsio zehatzak instalatzen ibili.

2.3.3 Ekoizpenerako abantailak

Aurreko atalari lotuta, ekoizpenean (producción) derrigorrezkoa da garapenean erabilitako bertsio berberak erabiltzea bateragarritasuna (compatibilidad) bermatzeko.

Ekoizpenean (producción) bateragarritasuna bermatzeko, beti erabili behar dira garapenean erabilitako zerbitzuen bertsio berberak.

Zerbitzari bat eguneratuta ez badago, edo zerbitzari berean aplikazio desberdinak baditugu eta horietako bakoitzak softwarearen bertsio desberdinak behar baditu, makina birtualen ingurune batean oso konplexua bihurtzen da, ohikoena makina birtual berriak instalatu behar izatea baita.

Ez da beti posible zerbitzari berean software berdinaren bertsio desberdinak edukitzea.

Kontainer-ingurune batean, lehen azaldu den bezala, ez daukago arazo hori.

2.3.4 Azkartasuna zabalkundean

Aurreko guztiarekin lotuta, garapen/ekoizpen ingurune baten zabalkundea (despliegue) azkarragoa da kontainerrak erabiliz, zein sistema eragile erabiltzen ari garen kontuan hartu gabe.

Kontainerrekin zabalkundea azkarragoa da.

Aurrerago ikusiko da nola jarri martxan zerbitzu desberdinak komando bakar baten bidez.

Docker

3 Docker

Docker 2013an sortutako Software Libreko proiektu bat da, aplikazioak eta zerbitzuak kontainerren bidez modu azkar eta errazean hedatzeko aukera ematen duena, aurrerago ikusiko dugun bezala.

Kontainer hauek abstrakzio-geruza bat eskaintzen dute eta aplikazioak sistema eragilearen gainerako ataletatik isolatzeko aukera ematen dute, Linux kernelaren ezaugarri jakin batzuk erabiliz.

Kontainer barruan, honako isolamendu mailak azpimarra daitezke:

  • Prozesu zuhaitza
  • Muntatutako fitxategi-sistemak
  • Erabiltzailearen IDa
  • Baliabideen isolamendua (PUZ/CPU, memoria, S/I blokeak…)
  • Sare isolatua

Beste edozein software motatan bezala, Dockerrek ezaugarri hauek guztiak erabiltzeko, beste aplikazio eta zerbitzu batzuetan oinarritzen da.

Dockerrek erabiltzen dituen teknologia. Iturria: Wikipedia

2015ean Docker enpresak Open Container Initiative sortu zuen, gaur egun Linux Foundation-en menpe dagoen proiektua, sistema eragile mailako birtualizaziorako estandar ireki bat diseinatzeko asmoarekin.

3.1 Instalazioa

Sistema eragilearen arabera, Docker modu ezberdinetan instala daiteke. GNU/Linux sistema eragileetan banaketa bakoitzak bere pakete propioa dauka instalazioa egiteko.

Docker instalazioa Ubuntu-n

ruben@vega:~$ sudo apt install docker.io

Ubuntu eta Debian-en pakete-izena “docker.io” da.

3.1.1 Windows eta/edo Mac-en instalazioa

Windows eta MacOS sistemetan Docker Desktop instalatzeko aukera dago; bertsio honek makina birtual bat erabiltzen du instalazioa errazteko. Hala ere, CLI ere instalatzen da, eta aurrerago ikusiko ditugun komandoak erabiltzeko aukera ematen du.

Docker Desktop

Windows kasuan, BIOS/UEFI-n birtualizazioaren luzapenak gaituta izatea beharrezkoa da, eta bi aukera hauetako bat konfiguratu behar da Docker Desktop instalatu aurretik:

  • WSL2 erabiltzea.
  • UHyper-V eta Windows kontainer-sistema erabiltzea.

3.2 Konfigurazioa

Instalazioa egin ondoren ikusiko dugu Docker zerbitzuak interfaze berri bat sortu duela gure makinan, zeinaren IPa 172.17.0.1/16 den, lehenetsitako helbideratzearen arabera.

IP berria

ruben@vega:~$ ip a
...
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
    link/ether 02:42:9c:1f:e2:90 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
      valid_lft forever preferred_lft forever

IP honek zubi lana egingo du (makina birtualetan gertatzen den antzera) kontainer berriak abiatzen ditugunean. Kontainerrak 172.17.0.0/16 sarearen barruan egongo dira, hau da, ekipoaren sare nagusitik isolatuta.

Abiatu ditugun kontainerrak 172.17.0.0/16 sarean egongo dira

3.3 Docker erabiltzea pribilegiorik gabeko erabiltzaile batekin

Docker erabiltzeko root/administratzaile baimenik ez duen erabiltzaile batekin, erabiltzaile hori talde baten barruan gehitu behar da. Docker non erabiltzen dugunaren arabera, modu batean edo bestean egin beharko dugu.

3.3.1 Linux

Kasu honetan, erabiltzaileak izan behar duen taldea “docker” da, eta erabiltzaileari modu ezberdinetan gehi diezaiokegu:

  • /etc/group fitxategia editatuz, eta erabiltzailea taldean gehituz
  • Ondoren jartzen ditugun komandoak exekutatuz:

Gehitu docker taldea erabiltzaileari

ruben@vega:~$ sudo addgroup ruben docker
[sudo] password for ruben:
Adding user `ruben' to group `docker' ...
Adding user ruben to group docker
Done.

ruben@vega:~$ newgrp docker

Hemendik aurrera, Docker erabili ahal izango da taldera gehitu diogun erabiltzailearekin.

3.3.2 Windows

Windowsen erabiltzaile batek Docker Desktop erabili ahal izateko, “docker-users” taldekoa izan behar du. Gehitzeko, administratzaile baimenekin PowerShell batetik exekutatuko dugu:

Gehitu docker-users taldea erabiltzaileari

PS C:\Users\ruben> net localgroup "docker-users" "usuario" /add

3.4 Lehen urratsak

docker komandoak aukera asko ditu, beraz gomendagarria da parametro gabe exekutatzea. Horrela aukera guztiak eta bakoitzaren laguntza sinplifikatu bat ikus daitezke.

Docker komandoaren aukera batzuk

ruben@vega:~$ docker
Usage:  docker [OPTIONS] COMMAND

Management Commands:
builder     Manage builds
completion  Generate the autocompletion script for the specified shell
config      Manage Docker configs
container   Manage containers
context     Manage contexts
image       Manage images
manifest    Manage Docker image manifests and manifest lists
network     Manage networks
node        Manage Swarm nodes
plugin      Manage plugins
secret      Manage Docker secrets
service     Manage services
stack       Manage Docker stacks
swarm       Manage Swarm
system      Manage Docker
trust       Manage trust on Docker images
volume      Manage volumes

Commands:
...

Aukera hauetako bakoitzari --help parametroa gehi dakioke laguntza erakusteko. Moztu den bigarren atal batean komando gehiago sartzen dira.

Docker zerbitzua martxan dagoela ziurtatzeko, docker info erabil dezakegu, zerbitzuari buruzko informazio ugari erakutsiko diguna. Baina benetan nahi duguna bada egiaztatzea ea kontainerren bat martxan dagoen, errazagoa da docker ps erabiltzea (hau da docker container ls-en bertsio sinplifikatua):

Docker eta abiarazitako kontainerren egoera egiaztatzea

ruben@vega:~$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

ruben@vega:~$ docker container ls
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Kasu honetan, ez dago kontainerrik abiarazita, eta zerrendako zutabeen goiburuak soilik erakusten dira.

3.5 Gure lehen kontainerra abiarazten

Orain gure lehen kontainerra sortzeko unea da. Horretarako, kontsola erabiltzen ari garenez, docker komandoa erabili behar da parametro sorta batekin. Kasu honetan, Apache HTTPD zerbitzua abiaraztea aukeratu da:

Lehen kontainerra abiarazten

ruben@vega:~$ docker run -p 80:80 httpd
AH00558: httpd: Could not reliably determine the server's ...
AH00558: httpd: Could not reliably determine the server's ...
[Fri Mar 24 18:25:14.194246 2023] [mpm_event:notice] ...
[Fri Mar 24 18:25:14.194347 2023] [core:notice] [pid  ...
172.17.0.1 - - [24/Mar/2023:18:25:41 +0000] "GET / HTTP/1.1" 304 -

Apache zerbitzuaren log-ak ikusten ditugu abiaraztean, eta nabigatzailean http://localhost helbidera joanez gero, hauxe erakusten du:

Eta komandoak zer egiten duen ulertzeko, parametroak hauek dira:

  • docker: Docker kontsolako bezeroa.
  • run: Komando bat exekutatzen du kontainer berri batean (eta ez badago sortzen du).
  • -p 80:80: Zerbitzariaren 80 portuan argitaratzen du kontainerrean erabiltzen den 80 portua. Pentsa daiteke port-forward bezala egitea dela firewall batean.
  • httpd: Abiaraziko den kontainerraren irudia da. Kasu honetan, Apache HTTPD zerbitzariaren irudia da.

Eta docker-aren egoerak zer erakusten duen begiratuz gero, kontainerra abiarazita agertzen dela ikus dezakegu.

Docker eta abiarazitako kontainerren egoera egiaztatzea

ruben@vega:~$ docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS               NAMES
a1c3362b0d6c   httpd     "httpd-..."   3 seconds ago   Up 2 seconds   0.0.0.0:80->80/tcp  great

PORTS zutabean ikus daiteke nola agertzen den 0.0.0.0:80 portua (sistema eragileko edozein IP-rentzat 80 portuan entzuten duena), eta hori kontainerraren barneko 80/TCP portura birbideratzea dela.

3.6 Kontainerrak backgroundean eta aukera gehiago

Aurreko adibidean ikus daitekeenez, kontainerra lehen planoan geratzen da, Apache-ren log-ak erakutsiz. Honek garapenean gertatzen ari dena ikusteko balio dezake, baina ideia ona da kontainerra background moduan abiaraztea, eta behar dugunean log-ak kontsultatzea.

Jarraian Apache kontainer berri bat abiaraziko da parametro berriekin:

8080 portuan Web kontainer bat sortzea

ruben@vega:~$ docker run --name mi-apache -d -p 8080:80 httpd

Parametro berriak honako hauek dira:

  • --name mi-apache: Modu honetan kontainerari izen bat ematen zaio, sortutako kontainer guztien artean azkar identifikatzeko.
  • -d: Parametro honek komandoa detach moduan exekutatzea ahalbidetzen du, eta horrela kontainerraren exekuzioa background-era bidaltzen du.
  • -p 8080:80: Kontainerrean erabiltzen den 80. ataka zerbitzarian 8080. atakara publikatzen du. Pentsa daiteke firewall batean port-forward bat egitea bezalaxe.

3.7 Kontainerrak gelditu, abiarazi eta ezabatu

Orain arte kontainerrak sortzen ikasi dugu, baina batzuetan interesgarria izan daiteke ez erabiltzen ari garen kontainer bat gelditzea, edo bere funtzioa bete duenean, ezabatzea.

3.7.1 Kontainerrak gelditzea

Kontainer bat gelditzeko, bere izena edo IDa (bakarra dena) ezagutu behar dugu. Datu hauek docker ps komandoaren bidez lor daitezke.

Horrela, honako hau exekutatu dezakegu:

Kontainerra gelditu

ruben@vega:~$ docker stop mi-apache

3.7.2 Gelditutako kontainer bat abiarazi

Kontainer bat gelditu ondoren, edo zerbitzaria berrabiarazten denean, gelditutako kontainer bat abiarazi nahi badugu, bere IDa edo izena ere ezagutu behar dugu.

Kontainer guztiak ikusteko (abiarazitakoak eta gelditutakoak), docker ps -a komandoaren bidez egin dezakegu.

Zerrenda horri esker, geldituta dagoen kontainer bat berriro abiarazi dezakegu docker start mi-apache komandoarekin, non “mi-apache” abiarazi nahi dugun kontainera den.

3.7.3 Kontainer bat ezabatu

Kontainer bat ezabatu nahi badugu, geldituta egon behar da, Docker-ek ez baitu exekuzioan dagoen kontainer bat ezabatzen utziko.

Interesgarria da proba kontainerrak edo ez erabiliko diren kontainerrak ezabatzea, baliabideak askatzeko.

Horretarako, aurreko kasuekin antzeko moduan, docker rm mi-apache komandoa erabili behar da.

4 Ingurune-aldagaiak

Kontainer batzuek aukera dute ingurune-aldagaiak jasotzeko sortzean. Aldagai hauek kontainerraren portaeran eragin dezakete, edo lehenetsi ezarpenetatik bestelako moduan abiarazi ahal izateko.

Docker irudiaren sortzaileak behar dituen ingurune-aldagaiak sor ditzake, gero bere aplikazioan erabiltzeko. Adibidez, PHPMyAdmin aplikazioaren irudia erabiliko da.

Hurrengo adibidean PHPMyAdmin kontainer bi sortuko dira, ataka, izen eta PMA_ARBITRARY ingurune-aldagaiarekin desberdinduta:

  • Lehenengo kontainera 8081 atakan egongo da, “myadmin-1” izena izango du eta ingurune-aldagaia ez da hasieratuko.
  • Bigarren kontainera 8082 atakan egongo da, “myadmin-2” izena izango du eta PMA_ARBITRARY aldagaia “1”-era hasieratuko da, PHPMyAdmin irudiaren dokumentazioan agertzen den moduan.

Horretarako, honako komando hauek exekutatu dira:

PHPMyAdmin-en bi kontainerrak sortzen

ruben@vega:~$ docker run --name myadmin-1 -d -p 8081:80 phpmyadmin

ruben@vega:~$ docker run --name myadmin-2 -e PMA_ARBITRARY=1 -d -p 8082:80 phpmyadmin

Ikusten denez, bigarren kontainerrean -e parametro berria pasatu zaio, hau da, hurrengoaren ingurune-aldagaia dela adierazten duena (ingelesez environment). Kasu honetan, ingurune-aldagaia PMA_ARBITRARY da, eta 1 balioarekin hasieratu da.

Orain gure web nabigatzailean zerbitzariaren IPko 8081 eta 8082 atakak bisitatuz gero, webak erakusten digun formularioan desberdintasun txiki bat nabarituko dugu.

8081 atakako formularioan (non aldagaia ez den hasieratu) erabiltzaile-izena eta pasahitza bakarrik sartu daitezke. Aldiz, 8082 atakako formularioan, PMA_ARBITRARY aldagaia hasieratuta, eta irudiaren dokumentazioak adierazten duen moduan, MySQL zerbitzariaren IP adierazi ahal izango dugu, konektatu nahi dugun zerbitzaria izanik.

 

Ezkerrean 8081 atakako formularioa, aldagaia hasieratu gabe. Eskuman, 8082 ataka aldagaiarekin hasieratuta.

Aldagaiek zerbitzuaren portaeran (edo sortzean) eragina izan dezaketenez, garrantzitsua da dokumentazioa irakurtzea eta erabilgarriak izan daitezkeen aldagaiak identifikatzea.

Docker irudien dokumentazioa irakurtzea gomendatzen da, ingurune-aldagai posibleak identifikatzeko eta guretzat erabilgarriak diren ikusteko.

5 Datuen bolumen iraunkorra

Orain arte Apache zerbitzua abiarazten duen irudi baten bidez kontainer bat sortu dugu, bere orrialde lehenetsia erakutsiz. Kontainer barruan gure HTML orrialdea idatzi genezake, baina kontuan izan behar dugu kontainer baten datuak kontainerra ezabatzen denean desagertzen direla.

Kontainer barruan egindako aldaketak mantendu nahi baditugu, datu-bolumenak erabiltzea beharrezkoa da. Hau ez da bestelako zerbait, sistema eragileko diskoaren bide bat kontainer barruko bide batean muntatzea baizik.

Kontainerrei esleitutako bolumen hauek bi motatakoak izan daitezke:

  • Irakurketa bakarrik: Irakurri bakarreko bolumen bat esleitzea interesgarria izan daiteke konfigurazio-fitxategiak edo ikusgai jarri nahi dugun weba pasatzerakoan.
  • Irakurketa-Idazketa: Kasu honetan bolumenean idatz daiteke. Adibidez, datu-base batek informazioa gordetzen duen direktorioa edo erabiltzaileek igotako irudiak gordetzen dituen weba.

Modu honetan, kontainer bakoitzari esleitu beharreko bolumen kopurua irudiaren, abiarazten den zerbitzuaren eta kontainer barruan sortu edo esleituko ditugun datuekin egin nahi dugunaren arabera zehaztu behar da.

Hurrengo irudian bi kontainer eta bi bolumen dituen azpiegitura ikus daiteke:

  • Web Kontainerra: Irakurri-bakarreko bolumen bat esleitzen zaio, jatorrizko bidea /opt/www-data dena, kontainer barruan /var/www/html dagoena.
  • MySQL Kontainerra: Datu-basearen datuak gordetzea beharrezkoa denez, idazketa baimentzen duen bolumen bat esleitzen zaio. Beraz, kontainer barruan /var/lib/mysql sortzen dena, benetan anfitrioi sistema eragilean /opt/mysql-data gordetzen da.
Bi bolumen adibide desberdin kontainerretan esleituta

5.1 Bolumen idazgarria gehitu kontainer bat sortzerakoan

Kontainer bat sortzerakoan bolumen bat gehitzean, lehenetsita irakurketa-idazketa moduan sortzen da. Kontainer barruan bide zehatz batean egindako edozein idazketa, fitxategia anfitrioi sistema eragileko bide adierazian sortzea ekarriko du.

Idazketa-bolumena gehitu kontainer bat sortzerakoan

ruben@vega:~$ ls /opt/mysql-data
ruben@vega:~$ docker run -d -p 3306:3306 --name mi-db \
    -v /opt/mysql-data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=my-secret-pw \
    mysql:latest
ruben@vega:~$ ls /opt/mysql-data
auto.cnf      client-key.pem      '#innodb_temp'      server-cert.pem   ...

Adibide honetan, MySQL irudia erabiliz kontainer bat sortu da, bolumen bat esleituta (lehenetsita idazketa baimentzen duen moduan esleitzen da) eta gero pasahitzarekin konektatzeko beharrezko parametro batekin.

  • -v /opt/mysql-data:/var/lib/mysql: -v parametroaren bidez kontainerrei bolumen bat pasatuko zaiela adierazten zaie. Gero, anfitrioi sistema eragileko bidea /opt/mysql-data zehazten da, kontainer barruan /var/lib/mysql muntatuko dena.

  • -e MYSQL_ROOT_PASSWORD=my-secret-pw: “-e” parametroak kontainerrei ingurune-aldagaiak pasatzeko balio du. Kasu honetan, eta MySQL irudiaren webgunean azaltzen den bezala, hau da datu-basea hasieratzen den bitartean root erabiltzailearen pasahitza esleitzeko modua.

Kontainerra sortu ondoren, eta docker ps komandoa erabiliz kontainerra martxan dagoela ziurtatu ondoren, anfitrioi sistema eragiletik edo beste edozein lekutik aurretik zehaztutako pasahitzarekin konekta daiteke.

MySQL-ren status ikusten

ruben@vega:~$ mysql -h127.0.0.1 -uroot -P3306 -p
    Enter password:
    ...
    MySQL [(none)]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0,007 sec)

5.2 Irakurketa-bakarrik moduan bolumena gehitu

Jarraian azalduko dira pausoak PHPz sortutako web sinple bat daukan kontainer bat martxan jartzeko, web hori anfitrioi sistema eragileko /opt/www-data bidean dagoena.

Irakurketa bakarreko bolumena gehitu kontainer bat sortzerakoan

ruben@vega:~$ ls /opt/www-data
index.php
ruben@vega:~$ docker run -d -p 80:80 --name mi-web \
    -v /opt/www-data:/var/www/html:ro \
    php:8.2.4-apache

Kontainer hau sortzean esleitutako parametro berria hau da:

  • -v /opt/www-data:/var/www/html:ro: Bolumen bat esleituko diogula adierazteko, anfitrioi sistema eragileko /opt/www-data bidea kontainer barruko helbidearekin lotuz eta irakurketa-bakarrik moduan ezarriz /var/www/html.

Geroago, Docker kontainer baten barruan nola sartu ikusiko dugunean, komando hau erabil daiteke kontainer barruko bidea bisitatzeko eta benetan irakurketa-bakarrik moduan dagoela egiaztatzeko.

5.3 Docker kontainer baten barruan sartzea

Normalean ez da beharrezkoa kontainer baten barruan sartzea, izan ere, aurretik esan bezala, bertan egindako aldaketa guztiak galtzen dira (bolumen iraunkor baten barruan ez bada).

Hala ere, probak egiteko edo irudi baten funtzionamendu zuzena egiaztatzeko, kontainer baten barruan sartzea interesgarria izan daiteke. Horretarako, exekutatu beharreko komandoa hau da:

Kontainer batean sartu

ruben@vega:~$ docker exec -it mi-db /bin/bash

Erabilitako parametroak hauek dira:

  • exec: Martxan dagoen kontainer baten barruan komando bat exekutatu nahi dugula adierazten du.
  • -it: Bi parametro elkartuta dira; sarrera irekita mantentzeko (modu interaktiboa) eta TTY (kontsola) bat sortzeko balio dute.
  • mi-db: Sartu nahi dugun kontainerraren izena da. Halaber, kontainerraren IDa ere adierazi daiteke.
  • /bin/bash: Exekutatu nahi dugun komandoa da. Kasu honetan, bash shell bat. Zenbait kasutan shell hau ez dago instalatuta eta /bin/sh erabili behar da.

Kontuan hartu behar da kontainer baten barruan aplikazioa/zerbitzua funtzionatzeko beharrezkoa den software minimoa bakarrik dagoela, beraz, komando asko ez dira existituko.

6 Beste komando erabilgarri batzuk

Kontainer baten informazio osoa lortzeko, bere egoera, erabilitako bolumenak, portuak, …

Kontainer baten informazioa lortu

ruben@vega:~$ docker inspect mi-db

Lokalean deskargatutako irudiak zerrendatu. Irudiak lokalean edukita, ez da berriro deskargatu beharko, eta horregatik, irudi horietako bat erabiltzen duen kontainer berri bat sortzea askoz azkarragoa izango da.

Lokalean dauden irudien zerrenda

ruben@vega:~$ docker image ls
REPOSITORY       TAG            IMAGE ID       CREATED        SIZE
php              8.2.4-apache   de23bf333100   3 days ago     460MB
httpd            latest         192d41583429   3 days ago     145MB
mysql            latest         483a8bc460a9   3 days ago     530MB

Kontainer batean erabiltzen ez den irudi bat ezabatu.

Irudi zehatz bat ezabatu

ruben@vega:~$ docker image rm httpd

Kontainer bat detached moduan dagoenean ez dira log-ak agertzen, eta horiek ikusteko komando berezi bat daukagu.

Kontainer baten logak ikusi

ruben@vega:~$ docker logs mi-web -f
172.17.0.1 - - [26/Mar/2023:18:05:29 +0000] "GET / HTTP/1.1" 200 248
172.17.0.1 - - [26/Mar/2023:18:05:29 +0000] "GET / HTTP/1.1" 200 248
172.17.0.1 - - [26/Mar/2023:18:05:29 +0000] "GET / HTTP/1.1" 200 248

Sisteman dauden bolumenak zerrendatu. Zerrendan kontainerrak (aktiboak zein geldituak) erabiltzen ari direnak edo dagoeneko existitzen ez diren kontainerretan erabili direnak agertzen dira.

Bolumenak zerrendatu

ruben@vega:~$ docker volume ls
DRIVER    VOLUME NAME
local     0d6c400a6407f5cdea81a2f0158222fdd87d7f3b3e2b5969ca466d743fc71f5c
local     1d2f52018e17af0689e070a55337154c1dd68517c54435ecc24d597f7509d43c
local     6b72797227ef4708ca23ee1dfcb4b651b42eeacefd4166b898407ad4aadda10c

Baliabide guztiak (kontainerrak, irudiak, bolumenak) garbitu nahi baditugu, eta ez badira erabiltzen ari, hurrengo komandoa erabil daiteke.

Erabili gabe dauden baliabideak ezabatu

ruben@vega:~$ docker system prune -a
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all images without at least one container associated to them
- all build cache

Are you sure you want to continue? [y/N] y

Aurreko komandoak gelditutako kontainerrak ezabatzea eragiten du

Kontainer bakoitzaren erabilera-estatistikak ezagutzeko.

Kontainerren estatistikak ikusi

ruben@vega:~$ docker stats
CONTAINER ID  NAME    CPU %   MEM USAGE / LIMIT     MEM %   NET I/O          BLOCK I/O   PIDS
2fcf97530766  mi-web  0.00%   54.62MiB / 15.47GiB   0.34%   9.44MB / 172kB   0B / 0B     6
413d6e9f590f  mi-db   0.55%   357.9MiB / 15.47GiB   2.26%   319kB / 280B     0B / 0B     38

7 Docker kontainer baten bizi-zikloa

Kontainer batek bizi-ziklo bat du, eta horretan hainbat egoera izan ditzake. Egoeren artean pasatzeko, Docker-en komando desberdinak erabili behar dira.

Kontainer baten egoerak

Irudian oinarrizko egoerak eta haietatik igarotzeko behar diren komandoak irudikatzen dira. Docker-en alternatibak

8 Docker-en alternatibak

Gaur egun Docker kontainer-sistemak sortzeko tresnarik zabalduena bada ere, 2015ean Open Container Initiative (OCI) sortu zen. Linux Fundazioaren proiektu bat da, estandar ireki bat diseinatzeko, kontainer-plataformak enpresa edo proiektu jakin bati lotuta ez egoteko.

Gaur egun hiru zehaztapen sortu dira kontainerrak garatzeko eta erabiltzeko, eta haien dokumentazioa Github eta OCIren webgunean aurki daiteke:

  • Irudi-formatua: Bola eraiki, garraiatu eta prestatu behar den irudiaren Zehaztapena da, gero kontainer sortzeko erabiliko dena.
  • Exekuzio-ingurunea: Kontainerren exekuzio-inguruneen portaera eta konfigurazio maila baxukoaren erreferentziazko zehaztapena da. Erreferentziazko programa runc da, eta normalean goi-mailako aplikazioek deitzen dute, hala nola containerd edo cri-o.
  • Banaketa: Edukiaren banaketa errazteko eta estandarizatzeko API protokoloa definitzen du. Hau registry bat (adib. Docker Hub) edo irudi-biltegi bat sortzeko zatia izango litzateke.

8.1 Containerd eta runc

Aukerarik gordinena OCIk eskaintzen dituen sistemak erabiltzea da, hau da:

  • Containerd: Kontainerren exekuziorako zerbitzua.
  • runc: kontsolako komandoa, kontainerrak sortu eta abiarazteko aukera ematen duena.

Sistema hau, “zuzena” izan arren (sistemako komandoak zuzenean erabiltzen dituelako), konplexuagoa izan daiteke. Zenbait kasutan, lan batzuk egiteko Docker-ekin edo beste alternatiba batzuekin zuzenean egiten diren ekintza batzuk hemen hainbat pausotan egin behar dira.

8.2 Nerdctl

Nerdctl containerd-rako komando-lerroko programa bat da, Docker-ekin bateragarria. nerdctl-ek bere FAQan azaltzen duen bezala, Docker-ek ez dituen baina containerd-ek dituen ezaugarri aurreratuak errazago erabiltzea eta esperimentatzea helburua da.

Komando-lerro mailan Docker-ekin bateragarria denez, Docker-ekin egiten jakin dugun edozein lan nerdctl erabiliz ere egin dezakegu:

Egiaztatu kontainerrren egoera nerdctl-rekin

ruben@vega:~$ nerdctl ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

8.3 Podman

Podman kontainerrak, irudiak, podak eta Kubernetes-en kontrola modu lokalean kudeatzeko sistema bat da. Red Hat-ek garatua da.

Podman-ek Docker Desktop-en antzeko interfaze grafikoa dauka, eta honek bezala, Windows eta MacOS inguruneetan barnean Podman exekutatuko den Linux sistema batekin makina birtual bat sortuko du.

Podman mahaigaineko aplikazioa

Docker irudiak

9 Docker irudiak sortzea

Aurretik aipatu bezala, Docker irudi bat exekutatu nahi dugun zerbitzua eta behar dituen mendekotasunak dituen fitxategi aldaezina da. Nahiz eta hub.docker.com webgunean irudi ugari egon, noizbait interesgarria izan daiteke gure irudi propioa sortzea, zerbitzu propio bat barne hartzen duena.

Irudi bat sortzeko, Dockerfile izeneko fitxategi bat sortu behar dugu, eta bertan erabil ditzakegun aukerak dokumentazio ofizialean azaltzen dira.

Halaber, gomendagarria da praktika onak erabiltzea aipatzen den webgunea kontuan hartzea irudiak sortzerakoan.

9.1 Dockerfile-eko instrukzioak

Dockerfile fitxategian erabil daitezkeen instrukzioen kopurua mugatua da, eta dokumentazioan azaltzen dira. Azpimarratzekoak honako hauek dira:

  • ADD: Irudiari fitxategi edo direktorio propioak gehitzeko balio du, zerbitzua abiaraztean eskuragarri egon daitezen. Adibidez, konfigurazio-fitxategiak edo gure aplikazioaren kodea. Interneteko URLak edo GIT errepositorioak ere erabili daitezke jatorri gisa.
  • CMD: Eduki honek adierazten du zein komando exekutatuko den edukiontzia abiaraztean. Komando honek parametroak izan ditzake. Irudia sortzean CMD bakarra egon daiteke, eta gehiago jartzen badira, azkena erabiliko da.
  • COPY: ADD-en antzekoa. Konparazio orri batean azaltzen dira bien arteko aldeak.
  • ENTRYPOINT: Edukiontzia exekutagarri gisa erabiliko denean erabiltzen da. Guk sortutako script bat izan daiteke. Dokumentazioan atal bat dago non CMD eta ENTRYPOINT-en arteko interakzioa azaltzen den.
  • ENV: Ingurune-aldagaiak ezartzeko balio du.
  • EXPOSE: Irudia abiaraztean erabiliko diren portuak (eta protokoloa) Docker-i adierazten dizkio.
  • FROM: Dockerfile bat baliozkoa izan dadin FROM direktiba batekin hasi behar du, erabiliko den oinarrizko irudia adierazteko. Normalean irudi ofizialak erabiltzen dira. Docker-ek Alpine Linux erabiltzea gomendatzen du, RAM kontsumo baxua duelako, besteak beste.
  • RUN: Edozein komando exekutatzeko instrukzioa da, eta irudiari geruza berri bat gehitzen dio.
  • VOLUME: Kanpoko bolumenak izan behar dituzten direktorioak erakusteko balio du (adibidez: datu-baseen biltegiratze direktorioak, konfigurazio direktorioak…).
  • WORKDIR: Ondoren exekutatuko diren RUN, CMD, ENTRYPOINT, COPY eta ADD komandoentzat direktorioa ezartzen du.

Beste instrukzio batzuk ere badaude, baina hauek dira irudi propio bat sortzeko oinarrizkoenak.

10 Dockerfile adibidea

Adibide gisa, gure ekipoan direktorio batean edukiko dugun Dockerfile fitxategi hau erabiliko dugu.

Dockerfile fitxategia

FROM php:8.4-apache
COPY src/ /var/www/html/

Windows Subsystem for Linux

11 Sarrera

WSL (Windows Subsystem for Linux ingelesez) Microsoft-ek garatutako bateragarritasun-geruza bat da, Linux sistemetarako sortutako exekutagarriak Windows-en modu naturalean exekutatzeko.

2019. urtetik aurrera bertsio lehenetsia 2.a da, eta horrek aldaketa asko ekarri zituen sisteman, bertsio horrek Hyper-V virtualizatzailearen azpimultzo baten bidez sortutako birtualizazio-geruza batean exekutatzen baitu. Horrek esan nahi du exekutatzen ari den kernel-a askoz bateragarriagoa dela Linux-eko binarioekin 1. bertsioan baino. Birtualizazioa erabiltzen duen arren, aurreko bertsioarekin alderatuta errendimendua ere hobetzen du.

Lehenespenez, WSL ez dator instalatuta Windows 10ean, beraz, instalazioa egin behar da nahi ditugun aplikazioak (Docker, adibidez) exekutatu ahal izateko. Windows 11 bertsioetan, ordea, bai dator instalatuta.

12 Instalazioa

Instalazioa egiteko, Windows-en bertsio bateragarria beharko dugu (10 build 19041 edo berriagoa). Gaur egun ez luke arazoa izan behar sistema eguneratuta badugu.

Instalazioa egiteko administratzaile baimenak beharko ditugu, eta erosoago egiteko PowerShell kontsolatik edo Windows terminal berritik egingo dugu. Horretarako, administratzaile baimenekin kontsola ireki eta exekutatu:

WSL instalazioa Windows 10n

PS C:\Users\ruben> wsl --install

Instalazioa egin ondoren, sistema berrabiarazi behar da aldaketak aplikatzeko eta beharrezko zerbitzuak abiarazteko. Behin berrabiarazita, leiho bat agertuko da eta bertan erabiltzailea eta pasahitza sartzeko eskatuko digu, berriki instalatutako Linux sistemarako.

Lehenespenez, instalatzen den banaketa Ubuntu da.

13 Konfigurazioak

Instalazioa egin ondoren ikusiko dugu Windows-ek zenbait konfigurazio egin dituela zerbitzu berriaren instalazioa egokitzeko.

  • Instantziak abiarazita daudenean, Hyper-V sare-interfaze berri bat sortzen da, 172.25.240.0/20 sarearekin.

  • Aurretik esan bezala, WSL-2-n instantziak benetan Hyper-V makina birtualak dira. Instantzien konfigurazioa erabiltzaileak sortzen duen AppData direktorioan dago. Adibidez, Debian-en kasuan, disko gogorra ./AppData/Local/Packages/TheDebianProject…/LocalState/ext4.vhdx barruan dago.

    AppData direktorioa lehenespenez ezkutatuta dago Windows fitxategi-arakatzailean.

  • Instantzien barruan, Windows-en disko gogorra atzitu daiteke /mnt/c-tik edo dagokion unitatetik.

  • Windows-etik, fitxategi-arakatzailearen bidez, instantzien fitxategi-sistemara sar daiteke, sortuta ditugun instantziak bertan agertzen baitira.

WSL ekosistema osoaren konfigurazio orokorra egiteko, aplikazio baten bidez egin daiteke (2024ko udazkenetik aurrera erabilgarri):

WSL konfigurazio-aplikazioa

Aplikazio honetan alderdi interesgarri hauek aldatu daitezke:

  • WSL barruko prozesadore logikoak
  • Memoriaren gehieneko tamaina
  • Sare modua (NAT, mirrored edo proxy)

13.1 Konfigurazio aurreratua

Konfigurazio aurreratu bat egiteko, dokumentazio hau erabil daiteke, bi ikuspegitatik:

  • wsl.conf: konfigurazio-fitxategia, distribuzioetako /etc direktorioan kokatzen dena. Konfigurazio honek soilik eragina du dagokion distribuzioan. Aurrerago Docker erabiltzeko adibide bat ikusiko dugu.

  • .wslconfig: Windows erabiltzailearen direktorioan dagoen fitxategia. Fitxategi honek WSL 2-rekin instalatutako distribuzio guztiei eragingo dien konfigurazioa izango du.

14 WSL pribilegio gabeko erabiltzaileekin

WSL-k administratzaile-baimenak behar dituzten zenbait ezaugarri erabiltzen ditu. Administratzaile-baimenik ez badago, lehenespenez WSL 1 bertsioa erabiliko da soilik, eta horren ondorioz azpisistemen errendimendua okerragoa da.

Beraz, WSL2 erabili ahal izateko administratzailearen kredentzialetara sarbidea izatea beharrezkoa da eta ondorengo komandoak exekutatu behar dira:

Pribilegio gabeko erabiltzaileetan WSL2 erabiltzea]{.title}

PS C:\Users\usuario> wsl --update

PS C:\Users\usuario> wsl --set-default-version 2

15 Komando erabilgarriak

Instalazioa egin ondoren, komando batzuk erabilgarriak izan daitezke WSL erabiltzerakoan. Ez dira guztiak zehaztuko, izan ere, wsl –help komandoarekin laguntza eta aukera gehiago lortuko ditugu.

Erakutsi instala daitezkeen banaketa guztiak

PS C:\Users\ruben> wsl -l -o

Debian banaketa bat instalatu

PS C:\Users\ruben> wsl --install -d Debian

Erakutsi instalatutako banaketak

PS C:\Users\ruben> wsl -l -v

Exekutatu instalatutako banaketa bat eta sartu bertan

PS C:\Users\ruben> wsl -d Debian
ruben@DESKTOP-1RVJ3UP:/mnt/c/Users/ruben$

Amaitu/Itzali banaketa bat

PS C:\Users\ruben> wsl -t Debian

Itzali instantzia guztiak

PS C:\Users\ruben> wsl --shutdown

Ezabatu instalatutako banaketa bat

PS C:\Users\ruben> wsl --unregister Debian

Klonatu instalatutako banaketa baten instantzia

PS C:\Users\ruben> wsl --export Ubuntu ubuntu.tar

PS C:\Users\ruben> wsl --import Ubuntu2 ubuntu2_files ./ubuntu.tar

16 Azpisistemen fitxategi-sistemara sartzea

Microsoft-ek WSL-rekin abiarazten ditugun Linux-eko fitxategi-sistemetara Windows fitxategi-esploratzailearen bidez sartzeko aukera sortu du. Honek aukera ematen du fitxategiak kopiatzeko/itsasteko sortu ditugun banaketen eta oinarri-sistema beraren artean. Hurrengo irudian hiru Linux azpisistema sortuta dauden esploratzailea ikus daiteke:

Ubuntu-ko “/home/ruben” edukia Windows esploratzailetik

Bestela, azpisistema Linux-etik bertatik Windows aplikazioak exekuta ditzakegu, beraz edozein karpetan gaudela, explorer.exe . komandoa deitu dezakegu, eta horrek Windows esploratzailea irekiko du bide horretan bertan:

Linux-etik Windows esploratzailea ireki

16.1 Fitxategi-sistemen errendimendua WSL-n

WSL nola funtzionatzen duen eta fitxategi-sistemen kudeaketa Windows sistema ostalariaren eta Linux azpisistemaren artean nola egiten den ikusita, argi izan behar dugu bi fitxategi-sistema independente daudela, baina elkarreragingarriak direla:

  • Windows fitxategi-sistema: Gure Windows ordenagailuaren fitxategi-sistema da. Kontuan izan behar da, Linux azpisistemara sartzean, lehenespenez fitxategi-sistema horretan gaudela:

Linux azpisistemara sartzean, Windows fitxategi-sisteman gaude.

PS C:\Users\ruben\Desktop> wsl -d Ubuntu
ruben@DESKTOP-1RVJ3UP:/mnt/c/Users/ruben/Desktop$

Ikus daitekeen bezala, Ubuntun sartzean, gauden bidea hau da: /mnt/c/Users/ruben/Desktop, hau da, Windows fitxategi-sistema (C:) Linux-eko bidean muntatuta dagoena /mnt/c. Horregatik, Linux-etik Windows fitxategi-sistema osoa izango dugu eskuragarri bide horretatik.

  • Linux azpisistemaren fitxategi-sistema: Sortu dugun Linux makina birtualak bere fitxategi-sistema propioa dauka, edozein Linux-en bezala, / direktorioan.

Linux fitxategi-sistema errealera pasatzen gara

ruben@DESKTOP-1RVJ3UP:/mnt/c/Users/ruben/Desktop$ cd
ruben@DESKTOP-1RVJ3UP:~$ pwd
/home/ruben

Ikus daitekeen bezala, pwd komandoarekin, orain Linux errealeko fitxategi-sisteman gaude.

Linux azpisisteman aplikazioak erabiltzerakoan, gomendagarria da beti Linux-eko fitxategi-sistemaren barruan egitea, eta ez muntatutako sisteman, errendimendua askoz txikiagoa baita muntatutako sisteman. Beraz, ziurtatu behar dugu aplikazioa bide egokian dagoela.

Windows fitxategi-sistema muntatua erabiltzeak Linux azpisisteman errendimendua kaltetzen du.

17 Docker WSL barruan

Linux azpisistema batean Docker eduki nahi badugu, bi aukera bereiztu ditzakegu:

  • Docker Desktop Windows-en erabiltzea. Docker Desktop-ek WSL erabiliko du azpian, eta aukera dugu azpisistemek Docker Desktop-en instalatutako Docker engine-a erabiltzeko. Hau da Microsoft-en dokumentazioak gomendatutako modua.
  • Docker Engine Linux azpisistema baten barruan instalatzea.

Azken metodo hau behean azaltzen dugu.

17.1 Docker Engine WSLn instalatzea

Batzuetan interesgarria izan daiteke ez erabiltzea Docker Desktop, Docker-en kontrol osoa izan nahi dugulako, Linux makina birtual oso baten instalazioan bezala. Horregatik, dagokion Linux azpisistemaren funtzionamenduan aldaketa txiki bat egin behar dugu.

Docker Desktop erabiltzea errazagoa da sistema honen ordez.

Adibidez, Ubuntu banaketako Linux azpisistema sortu badugu, bertan sartu beharko gara, eta /etc/wsl.conf fitxategi bat sortu beharko dugu hurrengo edukiarekin.

wsl.conf fitxategiaren konfigurazioa

[boot]
systemd=true

Banaketatik irteten gara eta bere berrabiaraztea behartu behar dugu. Behin urrats hauek eginda, berriro instantzian sartzen bagara, systemd martxan egongo da eta, beraz, Docker Engine instalatu eta erabili ahal izango dugu ohiko moduan sortutako makina birtual baten moduan.