En aquest tema, aprendrem com construir imatges Docker des de zero utilitzant Dockerfile. Les imatges són la base dels contenidors Docker, i entendre com crear-les és fonamental per a qualsevol desenvolupador que vulgui treballar amb Docker de manera eficient.
Què és una imatge Docker?
Una imatge Docker és una plantilla llegible per màquina que inclou tot el necessari per executar una aplicació: codi, biblioteques, variables d'entorn, fitxers de configuració, etc. Les imatges són immutables, el que significa que no canvien un cop creades.
Dockerfile: La base per construir imatges
Un Dockerfile és un fitxer de text que conté una sèrie d'instruccions que Docker utilitza per construir una imatge. Cada instrucció en un Dockerfile crea una nova capa en la imatge.
Estructura bàsica d'un Dockerfile
Un Dockerfile típic pot contenir les següents instruccions:
- FROM: Defineix la imatge base.
- RUN: Executa una comanda durant la construcció de la imatge.
- COPY: Copia fitxers o directoris des del sistema de fitxers de l'amfitrió a la imatge.
- CMD: Especifica la comanda per defecte que s'executarà quan es llanci un contenidor.
- EXPOSE: Exposa un port per al contenidor.
- ENV: Defineix variables d'entorn.
Exemple de Dockerfile
A continuació, es mostra un exemple senzill de Dockerfile per a una aplicació Node.js:
# Utilitza una imatge base oficial de Node.js FROM node:14 # Estableix el directori de treball dins del contenidor WORKDIR /app # Copia el fitxer package.json i package-lock.json COPY package*.json ./ # Instal·la les dependències de l'aplicació RUN npm install # Copia el codi de l'aplicació COPY . . # Exposa el port 3000 EXPOSE 3000 # Defineix la comanda per defecte per executar l'aplicació CMD ["node", "app.js"]
Explicació del Dockerfile
- FROM node:14: Utilitza la imatge oficial de Node.js com a base.
- WORKDIR /app: Estableix
/app
com a directori de treball dins del contenidor. - COPY package.json ./*: Copia els fitxers
package.json
ipackage-lock.json
al directori de treball. - RUN npm install: Executa
npm install
per instal·lar les dependències de l'aplicació. - COPY . .: Copia tot el codi de l'aplicació al directori de treball.
- EXPOSE 3000: Exposa el port 3000 per accedir a l'aplicació.
- CMD ["node", "app.js"]: Defineix la comanda per defecte per executar l'aplicació.
Construint la imatge
Per construir una imatge a partir d'un Dockerfile, utilitzem la comanda docker build
. Aquí teniu un exemple:
- -t my-node-app: Assigna el nom
my-node-app
a la imatge. - .: Indica que el Dockerfile es troba en el directori actual.
Exercici pràctic
Objectiu
Construir una imatge Docker per a una aplicació Python simple.
Passos
-
Crea un fitxer
app.py
amb el següent contingut:from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, Docker!' if __name__ == '__main__': app.run(host='0.0.0.0')
-
Crea un fitxer
requirements.txt
amb el següent contingut:Flask==1.1.2
-
Crea un Dockerfile amb el següent contingut:
# Utilitza una imatge base oficial de Python FROM python:3.8-slim # Estableix el directori de treball dins del contenidor WORKDIR /app # Copia el fitxer requirements.txt COPY requirements.txt ./ # Instal·la les dependències de l'aplicació RUN pip install --no-cache-dir -r requirements.txt # Copia el codi de l'aplicació COPY . . # Exposa el port 5000 EXPOSE 5000 # Defineix la comanda per defecte per executar l'aplicació CMD ["python", "app.py"]
-
Construeix la imatge:
docker build -t my-python-app .
-
Executa el contenidor:
docker run -p 5000:5000 my-python-app
Solució
Si has seguit els passos correctament, hauràs creat una imatge Docker per a una aplicació Python que utilitza Flask. Pots accedir a l'aplicació navegant a http://localhost:5000
i hauries de veure el missatge "Hello, Docker!".
Resum
En aquesta secció, hem après com construir imatges Docker utilitzant Dockerfile. Hem vist un exemple pràctic amb una aplicació Node.js i hem realitzat un exercici pràctic amb una aplicació Python. Ara estàs preparat per crear les teves pròpies imatges Docker per a les teves aplicacions!
Docker: De Principiant a Avançat
Mòdul 1: Introducció a Docker
- Què és Docker?
- Instal·lant Docker
- Arquitectura de Docker
- Comandes bàsiques de Docker
- Entenent les imatges de Docker
- Creant el teu primer contenidor Docker
Mòdul 2: Treballant amb imatges Docker
- Docker Hub i Repositoris
- Construint imatges Docker
- Conceptes bàsics de Dockerfile
- Gestionant imatges Docker
- Etiquetant i pujant imatges
Mòdul 3: Contenidors Docker
- Executant contenidors
- Cicle de vida del contenidor
- Gestionant contenidors
- Xarxes a Docker
- Persistència de dades amb volums
Mòdul 4: Docker Compose
- Introducció a Docker Compose
- Definint serveis a Docker Compose
- Comandes de Docker Compose
- Aplicacions multi-contenidor
- Variables d'entorn a Docker Compose
Mòdul 5: Conceptes avançats de Docker
- Exploració profunda de xarxes Docker
- Opcions d'emmagatzematge de Docker
- Millors pràctiques de seguretat de Docker
- Optimitzant imatges Docker
- Registre i monitoratge de Docker
Mòdul 6: Docker en producció
- CI/CD amb Docker
- Orquestrant contenidors amb Docker Swarm
- Introducció a Kubernetes
- Desplegant contenidors Docker a Kubernetes
- Escalat i equilibrat de càrrega