Ja saps quin problema resol Docker; toca instal·lar-lo. Aquesta lliçó t'acompanya pas a pas per la instal·lació als tres sistemes operatius habituals, explicant a cada pas què estàs fent i per què, en lloc de demanar-te que copiïs comandes a cegues. Veuràs primer la diferència fonamental entre Docker Engine i Docker Desktop —dos productes diferents que molta gent confon—, inclosa la qüestió de la llicència, que pot ser rellevant si treballes en una empresa gran. Després faràs la instal·lació completa de Docker Engine a Ubuntu/Debian des del repositori oficial, els passos posteriors imprescindibles a Linux (amb un advertiment de seguretat que no t'has de saltar), i les instal·lacions a Windows amb WSL 2 i a macOS. Acabaràs verificant que tot funciona i desxifrant, línia a línia, la sortida del teu primer contenidor.

Contingut

  1. Docker Engine i Docker Desktop: dos productes diferents
  2. La llicència de Docker Desktop a les empreses
  3. Requisits previs
  4. Instal·lació de Docker Engine a Ubuntu/Debian
  5. Passos posteriors a la instal·lació a Linux
  6. Instal·lació a Windows amb el backend WSL 2
  7. Instal·lació a macOS (Intel i Apple Silicon)
  8. Verificació: docker version, docker info i hello-world
  9. Desinstal·lar i netejar

  1. Docker Engine i Docker Desktop: dos productes diferents

Aquest és el primer punt on la gent es perd, així que anem a poc a poc.

Docker Engine és el motor: el servei que realment crea i executa contenidors, més l'eina de línia de comandes docker que hi parla. S'executa nativament només a Linux, perquè els contenidors es basen en funcionalitats del nucli de Linux. No té interfície gràfica. És el que corre als servidors.

Docker Desktop és una aplicació d'escriptori per a Windows, macOS i Linux que inclou Docker Engine dins d'una màquina virtual Linux gestionada automàticament, més una interfície gràfica, més eines addicionals (Kubernetes d'un clic, gestió d'extensions, escaneig de vulnerabilitats). A Windows i macOS és pràcticament l'única manera còmoda de treballar, perquè aquests sistemes no tenen nucli Linux: Docker Desktop els el proporciona.

Aquesta és la clau conceptual: quan executes un contenidor Linux en un Mac o a Windows, sempre hi ha una màquina virtual Linux pel mig, encara que no la vegis.

Aspecte Docker Engine Docker Desktop
Sistemes Linux natiu Windows, macOS, Linux
Interfície gràfica No
Com funciona Processos natius sobre el nucli de l'amfitrió VM Linux gestionada + GUI
Consum de recursos Mínim Notable (la VM reserva CPU/RAM)
Actualitzacions Gestor de paquets del sistema Actualitzador propi de l'app
Kubernetes integrat No (s'instal·la a part) Sí, amb un clic
Llicència Apache 2.0, gratis sempre Gratis amb condicions (vegeu l'apartat 2)
Ús típic Servidors, CI, desenvolupament a Linux Desenvolupament en portàtils Windows/macOS

A Linux tens les dues opcions. La recomanació general per aprendre i per a servidors és Docker Engine: menys capes, menys consum, i és el que trobaràs en producció. Docker Desktop com a eina de treball diària s'estudia a part, a la lliçó 07-03; aquí només l'instal·lem.

  1. La llicència de Docker Desktop a les empreses

És un detall pràctic que convé conèixer abans d'instal·lar res al portàtil de la teva empresa.

  • Docker Engine és programari lliure sota llicència Apache 2.0. És gratuït en qualsevol context, inclòs el comercial.
  • Docker Desktop és gratuït per a ús personal, educatiu, projectes de codi obert i petites empreses, però requereix una subscripció de pagament per a ús professional en organitzacions que superen un llindar (històricament, més de 250 empleats o més de 10 milions de dòlars de facturació anual; els termes exactes els fixa Docker, Inc. i convé consultar-los al seu web).

Traducció pràctica: si treballes en una empresa gran, no instal·lis Docker Desktop sense comprovar amb el teu departament d'IT si hi ha llicències. A Linux sempre pots fer servir Docker Engine sense cap restricció, i existeixen alternatives a l'escriptori que es comenten a la lliçó 07-05.

  1. Requisits previs

Sistema Requisit
Linux Distribució de 64 bits amb nucli 5.x o superior (qualsevol Ubuntu/Debian amb suport actual ho compleix) i systemd
Windows Windows 10/11 de 64 bits, amb WSL 2 habilitat i virtualització activada a la BIOS
macOS Les tres últimes versions majors de macOS; funciona en Intel i en Apple Silicon (M1 i posteriors)
Tots Com a mínim 4 GB de RAM (8 GB recomanats) i permisos d'administrador

  1. Instal·lació de Docker Engine a Ubuntu/Debian

Instal·larem des del repositori oficial de Docker, no des dels paquets que porta la distribució. Per què? Perquè el paquet docker.io d'Ubuntu sol anar unes quantes versions endarrerit i no inclou els plugins moderns (buildx, compose) que faràs servir durant tot el curs.

Pas 1: eliminar paquets antics o conflictius

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
  sudo apt remove -y $pkg
done

Aquest bucle recorre una llista de paquets que poden entrar en conflicte amb la instal·lació oficial i els desinstal·la. Si no en tens cap d'instal·lat, apt et dirà simplement que el paquet no hi és i seguirà endavant; no és un error. Fixa't que s'elimina docker-compose: és la versió antiga de Compose (la del guionet), que substituirem pel plugin modern.

Pas 2: preparar l'accés al repositori i afegir la clau GPG

sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

Desglossem cada línia:

  • apt update refresca la llista de paquets disponibles.
  • ca-certificates i curl són necessaris per descarregar de manera segura per HTTPS.
  • install -m 0755 -d /etc/apt/keyrings crea el directori on es guarden les claus de signatura de repositoris, amb permisos correctes.
  • curl -fsSL ... -o ... descarrega la clau pública GPG de Docker. Les opcions signifiquen: -f falla silenciosament davant d'errors HTTP, -s mode silenciós, -S però mostra errors, -L segueix redireccions. Aquesta clau és el que permet a apt verificar que els paquets que descarregui vénen realment de Docker i no han estat manipulats.
  • chmod a+r fa la clau llegible per tots els usuaris, que és el que apt necessita.

Si fas servir Debian en lloc d'Ubuntu, canvia ubuntu per debian a l'URL de la clau i a la del repositori del pas següent.

Pas 3: afegir el repositori a les fonts d'apt

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
  https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

Aquesta comanda escriu una línia a /etc/apt/sources.list.d/docker.list. Les parts dinàmiques són:

  • $(dpkg --print-architecture) insereix l'arquitectura de la teva màquina (amd64 o arm64), perquè apt descarregui els binaris correctes.
  • signed-by=... lliga aquest repositori a la clau que has descarregat: només s'acceptaran paquets signats amb ella.
  • $(. /etc/os-release && echo "$VERSION_CODENAME") insereix el nom en clau de la teva versió (per exemple noble a Ubuntu 24.04). Si aquest tros retorna buit, substitueix-lo a mà pel nom en clau de la teva distribució.
  • sudo tee ... > /dev/null escriu el fitxer amb permisos de root sense abocar-ne el contingut per pantalla.

L'apt update final torna a llegir les fonts, ara incloent-hi la de Docker.

Pas 4: instal·lar els paquets

sudo apt install -y \
  docker-ce \
  docker-ce-cli \
  containerd.io \
  docker-buildx-plugin \
  docker-compose-plugin

Cinc paquets, i convé saber què fa cadascun perquè reapareixeran a la lliçó 01-03:

Paquet Què és
docker-ce El daemon dockerd, el motor que crea i gestiona els contenidors (CE = Community Edition)
docker-ce-cli El client de línia de comandes docker, que envia ordres al daemon
containerd.io El runtime de contenidors de baix nivell sobre el qual se sosté dockerd
docker-buildx-plugin El constructor modern d'imatges: habilita docker buildx build
docker-compose-plugin Compose v2 com a subcomanda: habilita docker compose (sense guionet)

Els dos últims són plugins de la CLI: per això la comanda moderna és docker compose i no docker-compose. La forma amb guionet és el binari antic (Compose v1, en Python), avui retirat; només l'esmentarem per reconèixer-la en documentació vella.

  1. Passos posteriors a la instal·lació a Linux

La instal·lació deixa Docker funcionant, però només per a root. Aquests passos el deixen usable en el dia a dia.

Arrencar el servei i habilitar-lo a l'inici

sudo systemctl enable --now docker
sudo systemctl status docker
  • enable fa que el servei arrenqui automàticament a cada reinici.
  • --now a més l'arrenca en aquest mateix moment, sense esperar a reiniciar.
  • status mostra l'estat; hauries de veure una línia Active: active (running). Surt de la vista amb q.

A la majoria d'instal·lacions des del repositori oficial el servei ja queda habilitat i arrencat; executar la comanda igualment no fa cap mal i et confirma l'estat.

Fer servir Docker sense sudo: el grup docker

Per defecte, el daemon escolta en un socket Unix (/var/run/docker.sock) que pertany a l'usuari root i al grup docker. Si el teu usuari no és en aquest grup, cada comanda exigirà sudo:

sudo usermod -aG docker $USER
newgrp docker
  • usermod -aG docker $USER afegeix (-a, append) el teu usuari al grup (-G) docker. Sense -a esborraries la resta de grups del teu usuari, així que no l'ometis mai.
  • newgrp docker aplica la pertinença al grup a la sessió actual sense tancar la sessió. Alternativament, tanca la sessió i torna a entrar.

Comprova que ha funcionat executant docker version (sense sudo): si no dona error de permisos, ja està.

Advertiment de seguretat: el grup docker equival a root

Això no és un detall menor, llegeix-ho amb atenció.

Pertànyer al grup docker és equivalent a tenir permisos de root a la màquina. No és cap exageració: qui pot parlar amb el daemon pot demanar-li que arrenqui un contenidor privilegiat que munti el sistema de fitxers complet de l'amfitrió i modificar-lo a voluntat. El daemon corre com a root i executa el que li demanis.

Conseqüències pràctiques:

  • Al teu portàtil de desenvolupament, on ja tens sudo, afegir-te al grup docker és perfectament raonable i és el normal.
  • En un servidor compartit, ficar algú al grup docker és donar-li root. Tracta-ho amb la mateixa cura que un accés privilegiat.
  • Si ho necessites evitar, existeix el mode rootless de Docker, que executa el daemon amb el teu usuari sense privilegis. Té algunes limitacions i s'aborda a la lliçó 05-03, juntament amb la resta de bones pràctiques de seguretat.

  1. Instal·lació a Windows amb el backend WSL 2

A Windows, Docker Desktop se sosté en WSL 2 (Windows Subsystem for Linux 2), que proporciona un nucli Linux real dins d'una màquina virtual lleugera integrada al sistema. Aquest nucli és el que executa els teus contenidors.

Pas 1: habilitar WSL 2

Obre PowerShell com a administrador i executa:

wsl --install
wsl --set-default-version 2
wsl --update
  • wsl --install activa les característiques de Windows necessàries (WSL i Plataforma de màquina virtual) i instal·la una distribució Linux per defecte (normalment Ubuntu).
  • wsl --set-default-version 2 fixa WSL 2 com a versió per defecte. WSL 1 no serveix per a Docker: no té nucli Linux real.
  • wsl --update actualitza el nucli de WSL a l'última versió.

Reinicia l'equip quan t'ho demani. Si wsl --install falla, gairebé sempre és perquè la virtualització està desactivada a la BIOS/UEFI: busca-la com a Intel VT-x, AMD-V o SVM Mode i activa-la.

Pas 2: instal·lar Docker Desktop

Descarrega l'instal·lador des del web oficial de Docker, executa'l i, a les opcions, assegura't de deixar marcada la casella "Use WSL 2 instead of Hyper-V". En acabar, inicia Docker Desktop i espera que l'indicador de la barra d'estat es posi en verd ("Engine running").

Pas 3: configurar la integració amb les teves distribucions

A Settings → Resources → WSL Integration, activa la integració per a les distribucions de WSL que facis servir. Això fa que la comanda docker estigui disponible dins del teu terminal Ubuntu de WSL, parlant amb el mateix motor.

Un consell de rendiment que estalvia moltíssim patiment: guarda els teus projectes dins del sistema de fitxers de Linux (per exemple \\wsl$\Ubuntu\home\el-teu-usuari\projectes), no a C:\Users\.... L'accés dels contenidors a fitxers que viuen al disc de Windows travessa una capa de traducció i és notablement més lent.

Pots treballar des de PowerShell o des del terminal de WSL indistintament; les comandes docker són les mateixes.

  1. Instal·lació a macOS (Intel i Apple Silicon)

A macOS passa el mateix que a Windows: no hi ha nucli Linux, així que Docker Desktop aixeca una màquina virtual Linux lleugera (fent servir el framework de virtualització d'Apple) on viu el motor.

  1. Descarrega el .dmg correcte per al teu processador. És important:
    • Apple Silicon (M1, M2, M3, M4…) → versió arm64.
    • Intel → versió amd64. Si no ho saps, ves al menú Apple → Quant a aquest Mac, o executa uname -m al terminal (arm64 davant de x86_64).
  2. Obre el .dmg i arrossega Docker a la carpeta Aplicacions.
  3. Llança Docker des d'Aplicacions. Et demanarà la contrasenya d'administrador la primera vegada per instal·lar components privilegiats.
  4. Espera que la icona de la balena a la barra de menús deixi d'animar-se.

Una nota important per a Apple Silicon: el teu Mac és arm64, i algunes imatges antigues només es publiquen per a amd64. Docker pot executar-les mitjançant emulació (Rosetta / QEMU), però serà més lenta i ocasionalment inestable. Veuràs un avís del tipus:

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8)

No és cap fallada: és un avís que s'està emulant. Les imatges multiplataforma i com construir-les es veuen a la lliçó 05-05.

  1. Verificació: docker version, docker info i hello-world

Tant se val el sistema operatiu: aquestes tres comprovacions són la prova de foc.

docker version

docker version

Sortida (abreujada i anotada):

Client: Docker Engine - Community
 Version:           28.1.1
 API version:       1.49
 Go version:        go1.23.8
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          28.1.1
  API version:      1.49 (minimum version 1.24)
 containerd:
  Version:          1.7.27
 runc:
  Version:          1.2.5

El que és rellevant:

  • Hi ha dos blocs: Client i Server. El client és la comanda que acabes de teclejar; el servidor és el daemon. Que apareguin tots dos significa que la comunicació funciona.
  • Si només apareix Client seguit d'un error Cannot connect to the Docker daemon, el motor no està arrencat (Linux: sudo systemctl start docker) o el teu usuari no té permisos sobre el socket (revisa l'apartat 5).
  • Hi veuràs també containerd i runc: són els components de baix nivell que explicarem a la lliçó 01-03.

docker info

docker info

Sortida (extracte anotat):

Client:
 Version:    28.1.1
 Plugins:
  buildx: Docker Buildx (Docker Inc.)  v0.23.0
  compose: Docker Compose (Docker Inc.) v2.35.1

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 28.1.1
 Storage Driver: overlay2
 Cgroup Driver: systemd
 Cgroup Version: 2
 Operating System: Ubuntu 24.04.2 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 8
 Total Memory: 15.35GiB
 Docker Root Dir: /var/lib/docker

Aquí el que has de confirmar en una instal·lació acabada de fer:

  • A Plugins apareixen buildx i compose. Si no hi són, t'ha faltat instal·lar docker-buildx-plugin o docker-compose-plugin.
  • Storage Driver: overlay2 és el driver d'emmagatzematge modern i l'esperat.
  • Containers: 0 i Images: 0: normal, encara no has fet res.
  • Docker Root Dir és on el daemon guarda imatges, contenidors i volums. Si aquesta partició s'omple, Docker deixa de funcionar.

Interpretarem aquesta sortida amb més profunditat a la lliçó 01-03.

docker run hello-world

Aquest és l'examen final de la instal·lació:

docker run hello-world

Sortida completa:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
e6590344b1a5: Pull complete
Digest: sha256:940c619fbd418f9b2b1b63e25d8861f9cc1b46e3fc8b018ccfe8b78f19b8cc4f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm64v8)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

Anem línia a línia, perquè cadascuna ensenya alguna cosa:

Línia Què està passant
Unable to find image 'hello-world:latest' locally El daemon ha buscat la imatge al disc i no l'ha trobada. No és un error, és informació. Fixa't en l'etiqueta :latest, afegida automàticament en no especificar-ne cap
latest: Pulling from library/hello-world Està descarregant del registre per defecte (Docker Hub). library/ és l'espai de noms de les imatges oficials
e6590344b1a5: Pull complete S'ha descarregat una capa de la imatge. Les imatges es componen de capes; aquesta només en té una. És el tema de la lliçó 01-05
Digest: sha256:940c... L'identificador criptogràfic exacte i immutable de la imatge descarregada
Status: Downloaded newer image Confirmació que la descàrrega ha acabat
Hello from Docker! A partir d'aquí ja no parla Docker: és la sortida del programa que s'ha executat dins del contenidor
Passos 1 a 4 del missatge El mateix missatge descriu l'arquitectura: client → daemon → registre → contenidor → sortida cap al teu terminal. És exactament el flux de la lliçó 01-03

Si veus aquesta salutació, tens Docker instal·lat i funcionant. El contenidor, per cert, ja ha acabat: ha executat el seu únic procés, aquest ha imprès el text i ha mort. Continua existint en estat "aturat", com comprovaràs a la lliçó 01-04.

  1. Desinstal·lar i netejar

Per si necessites començar de zero a Ubuntu/Debian:

sudo apt purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
  • apt purge elimina els paquets i els seus fitxers de configuració.
  • Els dos rm -rf esborren les dades: totes les teves imatges, contenidors i volums. És irreversible, així que assegura-te'n abans.

A Windows i macOS, desinstal·la Docker Desktop com qualsevol altra aplicació; la mateixa app ofereix a més un botó Troubleshoot → Clean / Purge data per buidar les dades sense desinstal·lar.

Errors Habituals i Consells

  • Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? És l'error número u. Dues causes: el servei no està arrencat (sudo systemctl start docker a Linux; obrir Docker Desktop a Windows/macOS) o el teu usuari no és al grup docker. Per distingir-les, prova sudo docker version: si amb sudo funciona, és un problema de permisos, no del servei.
  • Instal·lar docker.io des dels repositoris de la distribució. Funciona per al bàsic, però sol portar una versió antiga i sense els plugins buildx i compose, amb la qual cosa la meitat del curs no et funcionarà. Fes servir el repositori oficial.
  • Fer servir docker-compose amb guionet. Si aquesta comanda existeix al teu sistema, tens instal·lada la versió 1, ja retirada. La comanda correcta el 2026 és docker compose, sense guionet, com a subcomanda de docker. Comprova-ho amb docker compose version.
  • Oblidar la -a a usermod. Escriure sudo usermod -G docker $USER (sense -a) elimina el teu usuari de tots els altres grups, inclòs sudo. És una manera ràpida de quedar-te sense permisos d'administrador. Sempre -aG.
  • Esperar contenidors de Windows a Linux, o a l'inrevés. El contenidor fa servir el nucli de l'amfitrió (o el de la VM). A Linux executes contenidors Linux, punt.
  • Consell: no reiniciïs la sessió sense necessitat. Després d'usermod, newgrp docker aplica el canvi al terminal actual. A altres terminals ja obertes continuarà fent falta reobrir-los.
  • Consell: vigila l'espai en disc. Docker Root Dir (per defecte /var/lib/docker) creix amb cada imatge que descarregues. Si tens /var en una partició petita, tingue-ho en compte des del principi. A la lliçó 01-04 veuràs docker system df i docker system prune per controlar-ho.

Exercicis

Exercici 1: instal·lació verificada

Instal·la Docker al teu sistema seguint l'apartat que et correspongui i respon, amb l'evidència de les comandes:

  1. Quina versió de Docker Engine tens al client i quina al servidor?
  2. Estan disponibles els plugins buildx i compose? En quina versió?
  3. Quin storage driver fa servir la teva instal·lació i en quin directori guarda les dades?
  4. Pots executar docker sense sudo?

Exercici 2: diagnòstic d'un error

Un company acaba d'instal·lar Docker a Ubuntu i t'escriu:

$ docker run hello-world
permission denied while trying to connect to the Docker daemon socket at
unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/_ping":
dial unix /var/run/docker.sock: connect: permission denied

Respon: (a) quina és la causa?, (b) quines dues comandes ho arreglen?, (c) per què no és bona idea resoldre-ho simplement executant sempre sudo docker ...?, i (d) quina implicació de seguretat té la solució que proposes?

Exercici 3: llegeix la sortida

Executa docker run hello-world dues vegades seguides i compara'n les dues sortides. Quines línies desapareixen a la segona execució i per què? A continuació, sense fer servir comandes que encara no coneixes, raona què deu haver passat amb els contenidors creats: quants n'hi ha?, continuen en execució?

Solucions

Solució a l'exercici 1

docker version --format '{{.Client.Version}} / {{.Server.Version}}'
docker compose version
docker buildx version
docker info --format 'Driver: {{.Driver}} | Root: {{.DockerRootDir}}'
docker run hello-world

Comentari de cada comanda:

  • docker version --format ... fa servir una plantilla Go per extreure només els dos camps que interessen, en lloc de llegir la sortida completa. Haurien de coincidir client i servidor (per exemple 28.1.1 / 28.1.1); una diferència gran entre tots dos pot provocar incompatibilitats d'API.
  • docker compose version i docker buildx version confirmen que els plugins estan instal·lats. Si responen docker: 'compose' is not a docker command, falta el paquet corresponent.
  • docker info --format ... extreu el driver d'emmagatzematge (esperat: overlay2) i el directori de dades (esperat: /var/lib/docker a Linux).
  • Que docker run hello-world funcioni sense sudo respon a la quarta pregunta.

Solució a l'exercici 2

(a) La causa és que l'usuari no pertany al grup docker i per tant no té permís de lectura/escriptura sobre el socket /var/run/docker.sock. Fixa't que l'error diu permission denied i no Cannot connect: el socket existeix i el daemon està corrent; és purament un problema de permisos.

(b) Les comandes:

sudo usermod -aG docker $USER
newgrp docker

La primera afegeix l'usuari al grup sense treure-li els altres (-a); la segona activa la pertinença a la sessió actual. Tancar la sessió i tornar a entrar és equivalent.

(c) Fer servir sudo docker sempre és incòmode i, sobretot, enganyós: els fitxers que Docker creï quedaran amb propietari root, els scripts i les eines del teu editor que invoquin docker sense sudo continuaran fallant, i no guanyes seguretat real, perquè el daemon continua executant-se com a root de totes maneres.

(d) La implicació és important: pertànyer al grup docker equival a tenir root a la màquina, perquè des del daemon es pot arrencar un contenidor privilegiat que munti i modifiqui el sistema de fitxers de l'amfitrió. En un portàtil personal és acceptable; en un servidor compartit cal tractar-ho com una concessió de privilegis, i considerar el mode rootless (lliçó 05-03).

Solució a l'exercici 3

A la segona execució desapareixen aquestes línies:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
e6590344b1a5: Pull complete
Digest: sha256:940c...
Status: Downloaded newer image for hello-world:latest

I són substituïdes directament per la salutació Hello from Docker!. El motiu és que la imatge ja és a la memòria cau local del daemon després de la primera descàrrega: no cal contactar amb Docker Hub, així que se salta tot el bloc de descàrrega i crea el contenidor immediatament. Aquesta és una primera pista d'una cosa central en Docker: la imatge es descarrega una vegada i es reutilitza tantes vegades com vulguis.

Sobre els contenidors: se n'han creat dos, un per cada docker run (recorda que run sempre crea un contenidor nou, no reutilitza l'anterior). Cap dels dos continua en execució: el procés de hello-world imprimeix el seu missatge i acaba, i quan el procés principal d'un contenidor acaba, el contenidor passa a estat Exited. Tots dos continuen existint al disc, ocupant espai, fins que els esborris. A la lliçó 01-04 els veuràs amb docker ps -a i aprendràs a eliminar-los.

Conclusió

Ja tens Docker instal·lat i verificat. Pel camí has après a distingir Docker Engine (el motor natiu de Linux, lliure i sense GUI) de Docker Desktop (l'aplicació d'escriptori amb VM inclosa per a Windows, macOS i Linux, amb condicions de llicència a les empreses grans), i saps que a Windows i macOS sempre hi ha una màquina virtual Linux per sota, perquè els contenidors necessiten un nucli Linux.

Has instal·lat els cinc paquets que importen —docker-ce, docker-ce-cli, containerd.io, docker-buildx-plugin i docker-compose-plugin—, has deixat el servei habilitat amb systemctl enable --now docker, has afegit el teu usuari al grup docker sabent que això equival a concedir root, i has desxifrat la sortida de docker version, docker info i hello-world.

En aquesta última sortida, el mateix missatge de Docker t'ha avançat el guió de la lliçó següent: el client contacta amb el daemon, el daemon descarrega la imatge del registre, crea el contenidor i retorna la sortida. A Arquitectura de Docker obriràs aquesta caixa: què és exactament el daemon, què hi pinten containerd i runc, què és el socket /var/run/docker.sock i com encaixen totes les peces en un simple docker run.

Docker: De Principiant a Avançat

Mòdul 1: Introducció a Docker

Mòdul 2: Treballant amb Imatges Docker

Mòdul 3: Contenidors Docker

Mòdul 4: Docker Compose

Mòdul 5: Conceptes Avançats de Docker

Mòdul 6: Docker en Producció

Mòdul 7: Ecosistema i Eines de Docker

© Copyright 2026. Tots els drets reservats