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:

  1. FROM: Defineix la imatge base.
  2. RUN: Executa una comanda durant la construcció de la imatge.
  3. COPY: Copia fitxers o directoris des del sistema de fitxers de l'amfitrió a la imatge.
  4. CMD: Especifica la comanda per defecte que s'executarà quan es llanci un contenidor.
  5. EXPOSE: Exposa un port per al contenidor.
  6. 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

  1. FROM node:14: Utilitza la imatge oficial de Node.js com a base.
  2. WORKDIR /app: Estableix /app com a directori de treball dins del contenidor.
  3. COPY package.json ./*: Copia els fitxers package.json i package-lock.json al directori de treball.
  4. RUN npm install: Executa npm install per instal·lar les dependències de l'aplicació.
  5. COPY . .: Copia tot el codi de l'aplicació al directori de treball.
  6. EXPOSE 3000: Exposa el port 3000 per accedir a l'aplicació.
  7. 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:

docker build -t my-node-app .
  • -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

  1. 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')
    
  2. Crea un fitxer requirements.txt amb el següent contingut:

    Flask==1.1.2
    
  3. 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"]
    
  4. Construeix la imatge:

    docker build -t my-python-app .
    
  5. 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!

© Copyright 2024. Tots els drets reservats