Fonaments Docker
- Què és docker i per què usar-ho?
- Comandes bàsiques
- Escenaris per a Machine Learning
- Dev Containers de VSCode
- Exemple de workflow
- Resum
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
Concepte | Descripció |
---|---|
Image | Plantilla només lectura amb l’aplicació i l’entorn (com una fotografia). |
Container | Instància en execució d’una image (com una màquina virtual lleugera). |
Dockerfile | Fitxer amb la recepta per crear una image. |
Volumes | Directoris compartits entre host i container per emmagatzematge persistent. |
Ports | Ports de xarxa mapejats del container a l’host per comunicar-se. |
Comandes bàsiques
Execució i Creació de Containers
Tasca | Comanda | Explicació |
---|---|---|
Executar un container nou | docker run -it --rm -p 8888:8888 -v "$(pwd)":/home/jovyan/work quay.io/jupyter/base-notebook | Crea 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> bash | Obre 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
Tasca | Comanda | Explicació |
---|---|---|
Llistar containers actius | docker ps | Mostra només els containers que s’estan executant actualment. |
Llistar tots els containers | docker ps -a | Inclou tant els actius com els aturats o finalitzats. |
Llistar imatges Docker | docker images | Mostra les imatges disponibles localment, amb nom, tag i ID. |
Gestió de Containers
Tasca | Comanda | Explicació |
---|---|---|
Aturar un container | docker stop <nom_o_id> | Atura l’execució del container de forma segura (enviar senyal SIGTERM ). |
Reiniciar un container aturat | docker start <nom_o_id> | Torna a posar en marxa un container prèviament aturat. |
Eliminar un container | docker rm <nom_o_id> | Esborra un container aturat del sistema (no una imatge). |
Construcció i Gestió d’Imatges
Tasca | Comanda | Explicació |
---|---|---|
Construir una imatge | docker 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 imatges | docker images | Mostra totes les imatges que tens descarregades o creades. |
Xarxes
Tasca | Comanda | Explicació |
---|---|---|
Llistar xarxes Docker | docker network ls | Mostra totes les xarxes definides a Docker, incloent les per defecte (bridge , host , none ). |
Crear una xarxa personalitzada | docker network create my-network | Crea una nova xarxa Docker amb nom propi, útil per connectar diversos containers. |
Connectar un container a una xarxa | docker network connect my-network <nom_o_id> | Afegeix un container existent a una xarxa Docker. |
Desconnectar un container d'una xarxa | docker network disconnect my-network <nom_o_id> | Treu un container d'una xarxa Docker sense aturar-lo. |
Volums Persistents
Tasca | Comanda | Explicació |
---|---|---|
Crear un volum nou | docker volume create nom-volum | Crea un volum Docker persistent per guardar dades entre execucions. |
Llistar volums | docker volume ls | Mostra tots els volums existents al sistema. |
Utilitzar un volum en un container | docker run -v nom-volum:/ruta/dins/container ... | Munta el volum dins del container per a persistència de dades. |
Inspeccionar un volum | docker volume inspect nom-volum | Mostra detalls com la ubicació física del volum i configuració. |
Eliminar un volum | docker volume rm nom-volum | Esborra un volum (només si no està en ús per cap container). |
Neteja i Manteniment
Tasca | Comanda | Explicació |
---|---|---|
Eliminar imatges no utilitzades | docker image prune | Elimina imatges que no estan associades a cap container. |
Eliminar containers aturats | docker container prune | Neteja containers que ja no s’estan executant. |
Netejar tot el que no s’utilitza | docker system prune | Allibera 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
oenvironment.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
-
Executar container per notebooks ML:
docker run -it --rm -p 8888:8888 -v "$(pwd)":/home/jovyan/work quay.io/jupyter/base-notebook
-
Accedir a Jupyter a
http://localhost:8888
-
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
- Crea un
-
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.
- Afegeix
Resum
Aspecte | Docker CLI + Images | Dev Containers de VSCode |
---|---|---|
Configuració | Manual amb comandes docker run | Configuració .devcontainer + VSCode |
Gestió entorn | Images + volums + exec manual | Totalment integrat dins VSCode |
Experiència de desenvolupament | Editor fora + terminal separat | Editor, terminal, depurador dins container |
Ideal per | Proves ràpides i entorns lleugers | Flux complet de desenvolupament i col·laboració |