Step-by-Step Guide to Creating Your First Docker Image

Creare la tua prima immagine Docker implica definire l'ambiente e le dipendenze dell'applicazione. Questa guida passo passo ti aiuterà a scrivere un Dockerfile, costruire l'immagine ed eseguire un container senza problemi.
Indice
guida-passo-passo-per-creare-la-tua-prima-immagine-docker-2

Creating Your First Docker Image: A Comprehensive Guide

In the age of cloud computing and microservices, Docker has emerged as a leading platform for creating, deploying, and managing applications in containers. The ability to package applications and their dependencies into a single image allows for consistent environments across development, testing, and production. In this article, we will explore the process of creating your first Docker image, alongside best practices, common pitfalls, and advanced techniques.

Cos'è Docker?

Docker è una piattaforma open source che automatizza la distribuzione di applicazioni all'interno di contenitori software. Un contenitore è un pacchetto eseguibile autonomo e leggero che include tutto il necessario per eseguire un software, come codice, runtime, librerie e strumenti di sistema. Questo incapsulamento garantisce che l'applicazione venga eseguita in modo affidabile in diversi ambienti di calcolo.

Concetti Chiave

Prima di immergerci nella creazione di immagini Docker, è essenziale comprendere alcuni concetti chiave:

  • Immagine Docker: A read-only template used to create containers. Images can be built from a Dockerfile or pulled from a Docker registry.
  • Contenitore Docker: A running instance of a Docker image. Containers are isolated from each other and the host system.
  • DockerfileUn file di testo che contiene le istruzioni per costruire un'immagine Docker. Ogni istruzione nel Dockerfile crea un livello nell'immagine.
  • Docker Registry: A repository for storing and sharing Docker images. The most popular registry is Docker Hub.

Prerequisiti

Prima di iniziare, assicurati di avere quanto segue:

  1. Docker Installed: Make sure Docker is installed on your machine. Check the official Guida all'installazione di Docker per i passaggi dettagliati.
  2. Basic Understanding of Command Line: Familiarity with command-line interfaces (CLI) is necessary for executing Docker commands.
  3. Text Editor: Any text editor will work, but familiarity with code editors like Visual Studio Code or Sublime Text can enhance your experience.

Step 1: Creating a Simple Application

Per questa guida, creeremo una semplice applicazione web Python utilizzando Flask, un framework web leggero. Seguite questi passaggi:

1. Configura la Struttura del Progetto

Create a directory for your project:

mkdir my-flask-app
cd my-flask-app

In questa directory, crea i seguenti file:

  • applicazione.py: Il file principale dell'applicazione.
  • requirements.txtUn file che elenca i pacchetti Python richiesti.

2. Scrivi l'applicazione Flask

Open applicazione.py nel tuo editor di testo e aggiungi il seguente codice:

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', port=5000)

Quindi, crea il requirements.txt file and input the following line:

Flask==2.0.1

Passo 2: Scrivere il Dockerfile

Ora che abbiamo la nostra applicazione, il passo successivo è scrivere un Dockerfile che definisca come costruire la nostra immagine Docker.

1. Crea un Dockerfile

Nella stessa directory dei file dell'applicazione, crea un file denominato Dockerfile (senza alcuna estensione) e aggiungere il seguente contenuto:

# Use the official Python image from the Docker Hub as a base image
FROM python:3.9

# Set the working directory inside the container
WORKDIR /usr/src/app

# Copy the requirements file into the container
COPY requirements.txt ./

# Install the required Python packages
RUN pip install --no-cache-dir -r requirements.txt

# Copy the current directory contents into the container
COPY . .

# Expose the port the app runs on
EXPOSE 5000

# Define the command to run the application
CMD ["python", "app.py"]

Spiegazione delle istruzioni Dockerfile

  • DA python:3.9: Questa riga specifica l'immagine di base per la nostra applicazione. Stiamo utilizzando l'immagine ufficiale di Python disponibile su Docker Hub.
  • WORKDIR /usr/src/app: Sets the working directory inside the container. All subsequent commands will be executed from this location.
  • COPIA requirements.txt ./: Copies the requirements.txt file dalla directory locale alla directory di lavoro nel container.
  • ESEGUI pip install --no-cache-dir -r requirements.txt: Esegue un comando per installare i pacchetti richiesti. Il senza directory della cache L'opzione aiuta a mantenere l'immagine più piccola evitando la memorizzazione nella cache dei file di installazione.
  • COPY . .: Copies all the files from the local directory to the working directory in the container.
  • EXPOSE 5000: Documents the port on which the application will run, allowing users to know which port to access.
  • CMD ["python", "app.py"]: Specifies the default command to run when a container is launched from the image.

Step 3: Building the Docker Image

Con il nostro Dockerfile scritto, possiamo ora creare la nostra immagine Docker. Esegui il seguente comando nel tuo terminale, assicurandoti di essere nella directory del progetto:

docker build -t my-flask-app .

Spiegazione del comando

  • docker buildIl comando per creare un'immagine Docker.
  • -t my-flask-app: Il - Contrassegna e tagga l'immagine con un nome.mia app Flask).
  • .: Indica il contesto di build, che corrisponde alla directory corrente.

Step 4: Running the Docker Container

Una volta che l'immagine è stata costruita con successo, puoi eseguirla con il seguente comando:

docker run -p 5000:5000 my-flask-app

Spiegazione del comando

  • docker runIl comando per creare e avviare un container da un'immagine.
  • -p 5000:5000: Maps port 5000 on the host to port 5000 in the container, enabling access to the Flask application.
  • mia app Flask: Il nome dell'immagine da eseguire.

Dopo aver eseguito questo comando, dovresti vedere un output che indica che l'app Flask è in esecuzione. Ora puoi accedere all'applicazione nel tuo browser web navigando a http://localhost:5000.

Passo 5: Gestione delle immagini Docker e dei container

1. Elencare le immagini Docker

To view the images currently available on your machine, use the command:

immagini Docker

2. Elenco dei contenitori in esecuzione

To see the containers currently running, use:

docker ps

3. Arrestare un Container

Se devi interrompere un contenitore in esecuzione, puoi usare il suo ID del contenitore (ottenuto da docker ps):

docker stop 

Rimozione di Contenitori e Immagini

Per rimuovere un contenitore arrestato, utilizzare:

docker rm 

Per rimuovere un'immagine, utilizzare:

docker rmi my-flask-app

Best Practices for Docker Images

Creare immagini Docker potrebbe sembrare semplice; tuttavia, seguire le best practice può migliorare notevolmente efficienza, sicurezza e manutenibilità.

1. Utilizzare le immagini di base ufficiali

Preferisci sempre le immagini ufficiali di Docker Hub come immagini di base. Vengono aggiornate e mantenute regolarmente per mitigare le vulnerabilità di sicurezza.

2. Ridurre al minimo il numero di strati

Ogni istruzione in un Dockerfile crea un livello nell'immagine. Per mantenere le tue immagini leggere, combina i comandi quando possibile. Ad esempio, unisci. COPIA commands when copying multiple files.

3. Pulizia dei file intermedi

If your build process generates temporary files, remove them to keep the image size small. For example, after installing packages, clean up the cache.

4. Usa .dockerignore

Proprio come .gitignore, the .dockerignore Il file può essere utilizzato per escludere file e directory dal build context di Docker, aiutando a ridurne le dimensioni.

5. Pin Dependency Versions

Specifica sempre la versione esatta delle dipendenze nel tuo requirements.txt to avoid unexpected changes or incompatibilities when rebuilding the image.

Tecniche Avanzate

Once you’re comfortable with the basics, you may want to explore some advanced techniques that can further enhance your Docker experience.

1. Multi-Stage Builds

Le build multistadio consentono di ridurre le dimensioni dell'immagine finale utilizzando più... FROM istruzioni in un Dockerfile. Questa tecnica è vantaggiosa per compilare applicazioni in cui è necessario un ambiente di compilazione che differisce dall'ambiente di produzione.

# First stage: build
FROM python:3.9 AS builder

WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

# Second stage: production
FROM python:3.9

WORKDIR /usr/src/app
COPY --from=builder /usr/local/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages
COPY . .

EXPOSE 5000
CMD ["python", "app.py"]

2. Docker Compose

When working with multi-container applications, Docker Compose is an invaluable tool. It allows you to define and run multi-container Docker applications using a simple YAML file. Create a docker-compose.yml file per definire i tuoi servizi applicativi, reti e volumi.

3. Versioning delle tue immagini

È una buona pratica versionare le tue immagini Docker per evitare confusione. Utilizza il versionamento semantico (ad es.,)., my-flask-app:1.0.0) to label different releases and ensure that you can roll back to previous versions if necessary.

Conclusione

La creazione della tua prima immagine Docker può aprire un mondo di possibilità per distribuire applicazioni in modo coerente ed efficiente. Seguendo i passaggi di questa guida e aderendo alle best practice, sei sulla buona strada per padroneggiare Docker. Mentre esplori tecniche avanzate, il potenziale per ottimizzare e scalare le tue applicazioni continuerà a crescere.

Docker not only simplifies deployment but also enhances collaboration across development teams, allowing for a smoother transition from development to production. Whether you are developing microservices or monolithic applications, Docker is an essential tool in modern software development workflows.

Mentre continui il tuo viaggio, abbraccia il processo di apprendimento, sperimenta diverse configurazioni e sfrutta il vasto supporto della community disponibile. Buon Dockering!