Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Fonaments Docker

Què és docker i per què usar-ho?

  • Docker és una plataforma per paquetitzar aplicacions amb totes les seves dependències dins de containers lleugers i portables.
  • Els containers aïllen l’aplicació i el seu entorn del sistema host — solucionant problemes de “a casa em funciona però no a producció”.
  • Pots executar el mateix container a qualsevol lloc: portàtil, servidors o al núvol.

Conceptes clau de Docker

ConcepteDescripció
ImagePlantilla només lectura amb l’aplicació i l’entorn (com una fotografia).
ContainerInstància en execució d’una image (com una màquina virtual lleugera).
DockerfileFitxer amb la recepta per crear una image.
VolumesDirectoris compartits entre host i container per emmagatzematge persistent.
PortsPorts de xarxa mapejats del container a l’host per comunicar-se.

Comandes bàsiques

Execució i Creació de Containers

TascaComandaExplicació
Executar un container noudocker run -it --rm -p 8888:8888 -v "$(pwd)":/home/jovyan/work quay.io/jupyter/base-notebookCrea i executa un container interactiu:
- -it permet interacció amb el terminal.
- --rm elimina el container quan acaba.
- -p redirigeix ports.
- -v munta una carpeta local dins el container.
Accedir a un container en execuciódocker exec -it <nom_o_id> bashObre una shell bash dins d’un container ja en execució.
Executar un container existent (aturat)docker start -i <nom_o_id>Reinicia un container aturat i obre la seva sessió interactiva (-i).

Visualització d’Estat

TascaComandaExplicació
Llistar containers actiusdocker psMostra només els containers que s’estan executant actualment.
Llistar tots els containersdocker ps -aInclou tant els actius com els aturats o finalitzats.
Llistar imatges Dockerdocker imagesMostra les imatges disponibles localment, amb nom, tag i ID.

Gestió de Containers

TascaComandaExplicació
Aturar un containerdocker stop <nom_o_id>Atura l’execució del container de forma segura (enviar senyal SIGTERM).
Reiniciar un container aturatdocker start <nom_o_id>Torna a posar en marxa un container prèviament aturat.
Eliminar un containerdocker rm <nom_o_id>Esborra un container aturat del sistema (no una imatge).

Construcció i Gestió d’Imatges

TascaComandaExplicació
Construir una imatgedocker build -t image-ml .Crea una nova imatge des del Dockerfile del directori actual (.). El tag (-t) serveix per donar-li nom.
Llistar totes les imatgesdocker imagesMostra totes les imatges que tens descarregades o creades.

Xarxes

TascaComandaExplicació
Llistar xarxes Dockerdocker network lsMostra totes les xarxes definides a Docker, incloent les per defecte (bridge, host, none).
Crear una xarxa personalitzadadocker network create my-networkCrea una nova xarxa Docker amb nom propi, útil per connectar diversos containers.
Connectar un container a una xarxadocker network connect my-network <nom_o_id>Afegeix un container existent a una xarxa Docker.
Desconnectar un container d'una xarxadocker network disconnect my-network <nom_o_id>Treu un container d'una xarxa Docker sense aturar-lo.

Volums Persistents

TascaComandaExplicació
Crear un volum noudocker volume create nom-volumCrea un volum Docker persistent per guardar dades entre execucions.
Llistar volumsdocker volume lsMostra tots els volums existents al sistema.
Utilitzar un volum en un containerdocker run -v nom-volum:/ruta/dins/container ...Munta el volum dins del container per a persistència de dades.
Inspeccionar un volumdocker volume inspect nom-volumMostra detalls com la ubicació física del volum i configuració.
Eliminar un volumdocker volume rm nom-volumEsborra un volum (només si no està en ús per cap container).

Neteja i Manteniment

TascaComandaExplicació
Eliminar imatges no utilitzadesdocker image pruneElimina imatges que no estan associades a cap container.
Eliminar containers aturatsdocker container pruneNeteja containers que ja no s’estan executant.
Netejar tot el que no s’utilitzadocker system pruneAllibera espai eliminant tot el que no s’utilitza: imatges, containers, xarxes, etc.

Escenaris per a Machine Learning

Usar images Docker per a notebooks ML

  • Images oficials com quay.io/jupyter/base-notebook ofereixen un entorn preconfigurat amb Python, Jupyter, conda i llibreries ML comunes.
  • Munta la teva carpeta local dins del container per conservar notebooks i dades.
  • Mapeja el port 8888 per accedir a la interfície web de Jupyter.

Empaquetar backends FastAPI

  • Crea un Dockerfile amb la teva app FastAPI, entorn Python i dependències.
  • Exposa i mapeja el port (normalment 8000) per a proves locals.
  • Aquest container pot desplegar-se després com a microservei.

Consells per a fluxos ML

  • Utilitza volums per compartir datasets i models entre host i container.
  • Versiona les images per mantenir entorns reproducibles.
  • Combina amb DVC o Git per controlar dades i codi.
  • Gestiona dependències amb requirements.txt o environment.yml.

Dev Containers de VSCode

Què són els Dev Containers?

  • L’extensió Remote - Containers de VSCode et permet desenvolupar dins de containers Docker de forma transparent.
  • Defineixes una carpeta .devcontainer amb la configuració (devcontainer.json, Dockerfile).
  • VSCode arrenca el container i connecta tot l’entorn de l’editor:
    • Terminal integrat dins el container
    • Depuració completa
    • Extensions executant-se dins el container

Per què usar Dev Containers?

  • No cal gestionar terminals o shells separats.
  • El depurador i l’editor funcionen directament dins l’entorn del container.
  • Facilita que els estudiants utilitzin un entorn homogeni i consistent.
  • Permet canviar fàcilment entre notebooks ML i desenvolupament backend (FastAPI, etc.).

Com començar

  • Afegeix la carpeta .devcontainer al teu projecte amb la configuració.
  • Obre el projecte a VSCode i tria “Reobrir en container” (Reopen in Container).
  • VSCode construeix/inicia el container i et connecta l’editor.

Exemple de workflow

  1. Executar container per notebooks ML:

    docker run -it --rm -p 8888:8888 -v "$(pwd)":/home/jovyan/work quay.io/jupyter/base-notebook
  2. Accedir a Jupyter a http://localhost:8888

  3. Desenvolupar backend FastAPI:

    • Crea un Dockerfile amb la teva app i dependències.
    • Compila i executa:
    docker build -t fastapi-app . docker run -it --rm -p 8000:8000 -v "$(pwd)":/app fastapi-app
  4. Usar Dev Container a VSCode:

    • Afegeix .devcontainer/devcontainer.json apuntant a la image base o Dockerfile.
    • Obre projecte a VSCode → Reobrir en container → Desenvolupa amb IDE complet dins del container.

Resum

AspecteDocker CLI + ImagesDev Containers de VSCode
ConfiguracióManual amb comandes docker runConfiguració .devcontainer + VSCode
Gestió entornImages + volums + exec manualTotalment integrat dins VSCode
Experiència de desenvolupamentEditor fora + terminal separatEditor, terminal, depurador dins container
Ideal perProves ràpides i entorns lleugersFlux complet de desenvolupament i col·laboració