
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.

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.

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.

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.

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.

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.

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.

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.

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):

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:

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:

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.