Docker (softwarea)

thumb|Dockerrek Linuxen kernelaren birtualizazio-gaitasunetara sartzeko interfaze desberdinak erabil ditzake.
**Docker** kode irekiko plataforma bat da, aplikazioak kontenedore izeneko ingurune isolatuetan paketatzeko, banatzeko eta exekutatzeko diseinatua. Teknologia honek sistema eragilearen kernelaren gaitasunak erabiltzen ditu —batez ere cgroups, namespaces eta UnionFS antzeko fitxategi-sistemak—, aplikazioak modu arin, eramangarri eta koherentean exekutatu ahal izateko, makina birtual oso bat martxan jarri beharrik gabe. Dockerren bidez, garatzaileek eta sistemek ingurune koherenteak sor ditzakete, aplikazio baten funtzionamendua sistemaren konfigurazioaren, mendekotasunen edo azpiegituraren aldaketen aurrean ahalik eta egonkorrena izan dadin.
thumb|Dockerren logoa

## Funtzionamendua 
Dockerren kontenedoreak aplikazio baten exekuzio-ingurune logiko eta isolatua dira. Kontenedore bakoitzak bere prozesu-espazioa, sare-konfigurazioa eta fitxategi-sistema ditu, eta, aldi berean, sistema eragilearen kernel bera partekatzen du gainerako kontenedoreekin. Horrela, kontenedoreak:

* oso azkar abiatzen dira,
* baliabide gutxiago erabiltzen dute,
* eta portaera homogeneoa mantentzen	dute plataforma desberdinetan.

Dockerrek kernelaren birtualizazio-ezaugarrietara sartzeko bi mekanismo nagusi erabiltzen ditu:

# runC / libcontainer - Dockerren	exekuzio-motor nagusia, kernelarekin zuzenean elkarreragiten duena.
# LXC edo systemd-nspawn bezalako	abstrakzio-geruzak — hainbat sistemak erabiltzen dituzten ingurune	isolatuak sortzeko aukera osagarriak.

Kontenedoreak Docker irudiak izeneko ereduen arabera sortzen dira; irudi horiek aplikazioaren kodea, konfigurazioa eta behar diren mendekotasun guztiak biltzen dituzte.

## Abantailak 
Dockerren arrakasta hainbat abantailetan oinarritzen da.

**Arintasuna:** kontenedoreak ez dira makina birtualak bezala; ez dute sistema eragile osoa exekutatzen, eta horrek baliabide gutxiago kontsumitzea eta abioko denbora laburragoak ekartzen ditu.

**Eramangarritasuna:** aplikazio bat kontenedore batean exekutatuta edozein sistema bateragarritan berdin portatuko da, izan Linux, Windows edo hodeiko plataforma bat.

**Eskalagarritasuna:** kontenedoreak azkar sortu, kopiatu eta banatu daitezke, mikrozerbitzu-arkitekturetan eta sistema banatuetan oso erabilgarriak bihurtuz.

**Isolamendua:** aplikazio bakoitzak bere ingurune logikoa du, eta horrek segurtasuna, errepikakortasuna eta gatazka gutxiago bermatzen ditu.

## Ekosistema eta Integrazioa 
Dockerrek ekosistema oso zabal eta heldua du, eta tresna ugarirekin integra daiteke:

* Hodei-plataformak: AWS, Google	Cloud, Azure, OpenStack
* Konfigurazio-kudeaketa: Ansible,	Puppet, Chef
* CI/CD sistemak: Jenkins, GitLab CI,	GitHub Actions
* Orkestrazio-plataformak:	Kubernetes, Docker Swarm

Tresna horiek kontenedoreen automatizazioa, monitorizazioa, eskalatzea eta orkestrazioa errazten dituzte.

## Historia 
Docker 2013an kaleratu zen, hasiera batean dotCloud enpresaren barne-proiektu modura. Proiektuak arrakasta berehalakoa izan zuen, eta laster bihurtu zen garatzaileentzat eta sistema-ingeniarientzat erreferentziazko estandar. Denborarekin, enpresa handiek —Red Hat, IBM, Microsoft, Google eta beste askok— ekarpen garrantzitsuak egin dituzte, eta komunitateak milaka plugin, irudi eta tresna garatu ditu. Docker Inc. enpresak teknologia hori komertzialki bultzatu zuen eta, 2015ean, runC eta Open Container Initiative (OCI) sortu zituen, kontenedoreen estandar irekia ezartzeko.

## Arkitektura 
Dockerren arkitekturak honako osagai hauek ditu:

* Docker Engine — zerbitzaria	(daemon-a) eta CLI bezeroa.
* Docker Images — aplikazioaren	egoera definitzen duten irudi geruzatuak.
* Docker Containers — irudietan	oinarritutako exekuzio-inguruneak.
* Dockerfile — irudi automatizatuak	sortzeko konfigurazio-fitxategia.
* Registries — irudiak gordetzeko	biltegiak (Docker Hub, GitHub Container Registry…).

## Segurtasuna 
Kontenedoreek kernel bera partekatzen dutenez, isolamendu-maila ez da makina birtualetan bezain sakona, baina honako mekanismoek segurtasun fidagarria eskaintzen dute:

* cgroups — baliabideen muga eta	kudeaketa
* namespaces — isolamendu logikoa
* seccomp, SELinux, AppArmor —	pribilegio-kontrola eta baimen-mugak

Segurtasun-arazo gehienak konfigurazio okerretatik datoz, ez teknologia beretik.

## Lizentzia eta erabilera baldintzak 
Docker Engine Apache License 2.0 lizentziapean banatzen da, eta Docker proiektuaren zenbait osagai GPL lizentziaren arabera. Docker Desktop, berriz, ez da doakoa tamaina jakin batetik gorako enpresentzat. Dockerfile fitxategien lizentziak fitxategiari eragiten dio, ez bertatik sortzen den kontenedore-irudiari.

## Erreferentziak 
## Kanpo estekak