Guida introduttiva a Docker: inizia rapidamente a containerizzare la tua applicazione
# Guida introduttiva a Docker: inizia rapidamente a containerizzare la tua applicazione
Docker è diventato una parte indispensabile dello sviluppo e della distribuzione di software moderni. Nonostante le discussioni dilaganti su Kubernetes, Docker rimane lo strumento preferito da molte aziende per costruire, testare e distribuire applicazioni. Questo articolo ti guiderà rapidamente attraverso Docker, comprendendo i suoi concetti fondamentali e fornendo un esempio pratico per aiutarti a iniziare a containerizzare la tua applicazione.
## Concetti fondamentali di Docker
Prima di iniziare con la pratica, è essenziale comprendere alcuni concetti fondamentali di Docker:
* **Immagine (Image):** Un'immagine è un modello di sola lettura che contiene tutto il necessario per eseguire un'applicazione: codice, ambiente di runtime, strumenti di sistema, librerie e dipendenze. Simile a un'immagine di macchina virtuale, ma più leggera.
* **Contenitore (Container):** Un contenitore è un'istanza in esecuzione creata da un'immagine. È un'istanza di runtime di un'immagine e contiene l'applicazione e tutte le sue dipendenze. I contenitori sono isolati l'uno dall'altro e hanno il proprio file system, processi e spazio di rete.
* **Docker Hub:** Docker Hub è un repository di immagini pubblico da cui è possibile scaricare immagini predefinite o caricare le proprie immagini. Simile a GitHub, ma specializzato per le immagini Docker.
* **Dockerfile:** Un Dockerfile è un file di testo che contiene tutte le istruzioni per costruire un'immagine Docker. Scrivendo un Dockerfile, puoi automatizzare il processo di creazione dell'immagine.
* **Docker Compose:** Docker Compose è uno strumento per definire ed eseguire applicazioni Docker multi-container. Ti consente di configurare i servizi dell'applicazione utilizzando un file YAML, quindi utilizzare un singolo comando per avviare o arrestare tutti i servizi.
## Installazione di Docker
Innanzitutto, è necessario installare Docker. Docker fornisce pacchetti di installazione per vari sistemi operativi. Visita il [sito Web ufficiale di Docker](https://www.docker.com/get-started/) e segui le istruzioni corrispondenti per l'installazione.
Una volta completata l'installazione, puoi verificare se Docker è installato correttamente eseguendo il comando `docker --version`.
## Containerizzare una semplice applicazione Python
Creeremo una semplice applicazione Python e la containerizzeremo utilizzando Docker.
### 1. Crea l'applicazione Python
Crea un file denominato `app.py` contenente il seguente codice:
```python
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Docker!"
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0')
Questa semplice applicazione Flask restituirà "Hello, Docker!" sul percorso radice /.
2. Crea il file requirements.txt
L'applicazione dipende dalla libreria Flask, quindi dobbiamo creare un file requirements.txt per dichiarare queste dipendenze.
Flask
3. Crea il Dockerfile
Crea un file denominato Dockerfile e aggiungi il seguente contenuto:
# Usa l'immagine Python ufficiale come immagine di base
FROM python:3.9-slim-buster
# Imposta la directory di lavoro
WORKDIR /app
# Copia il file requirements.txt nella directory di lavoro
COPY requirements.txt .
# Installa le dipendenze
RUN pip install --no-cache-dir -r requirements.txt
```# 将应用程序代码复制到工作目录
COPY app.py .
# 暴露端口 5000
EXPOSE 5000
# 定义启动命令
CMD ["python", "app.py"]
Dockerfile 说明:
FROM python:3.9-slim-buster: Specifica l'immagine di base come una versione ridotta di Python 3.9.WORKDIR /app: Imposta la directory di lavoro all'interno del container su/app.COPY requirements.txt .: Copia il filerequirements.txtdalla directory corrente alla directory/appdel container.RUN pip install --no-cache-dir -r requirements.txt: Esegue il comandopipall'interno del container per installare le dipendenze specificate nel filerequirements.txt. L'opzione--no-cache-dirpuò ridurre le dimensioni dell'immagine.COPY app.py .: Copia il fileapp.pydalla directory corrente alla directory/appdel container.EXPOSE 5000: Dichiara che il container ascolterà sulla porta 5000.CMD ["python", "app.py"]: Definisce il comando da eseguire all'avvio del container.
4. Costruire l'immagine Docker
Nella directory contenente il Dockerfile, esegui il seguente comando per costruire l'immagine Docker:
docker build -t my-python-app .
docker build: Comando per costruire l'immagine.-t my-python-app: Assegna un nome all'immagine (my-python-app)..: Specifica la directory in cui si trova il Dockerfile (la directory corrente).
Il processo di costruzione potrebbe richiedere del tempo, a seconda della velocità della rete e delle dimensioni delle dipendenze.
5. Eseguire il container Docker
Utilizza il seguente comando per eseguire il container Docker:
docker run -d -p 5000:5000 my-python-app
docker run: Comando per eseguire il container.-d: Esegue il container in modalità detached (in background).-p 5000:5000: Mappa la porta 5000 dell'host alla porta 5000 del container.my-python-app: Specifica il nome dell'immagine da utilizzare.
6. Verificare l'applicazione
Nel browser, visita http://localhost:5000 e dovresti vedere "Hello, Docker!".
7. Arrestare ed eliminare il container
Utilizza il seguente comando per arrestare il container:
docker stop
`` Puoi visualizzare tramite il comando docker ps.
Utilizza il seguente comando per eliminare il container:
docker rm
Introduzione a Docker Compose
Se la tua applicazione è composta da più servizi, puoi utilizzare Docker Compose per gestirli.
1. Creare il file docker-compose.yml
Crea un file chiamato docker-compose.yml e aggiungi il seguente contenuto:
version: "3.9"
services:
web:
image: my-python-app
ports:
- "5000:5000"
docker-compose.yml 说明:
version: "3.9": Specifica la versione del file Docker Compose.services: Definisce i servizi dell'applicazione.web: Definisce un servizio chiamato "web".image: my-python-app: Specifica l'immagine utilizzata dal servizio.ports: Definisce il mapping delle porte.
2. Avviare l'applicazione
Nella directory contenente il file docker-compose.yml, esegui il seguente comando per avviare l'applicazione:
docker-compose up -d
docker-compose up: Comando per avviare l'applicazione.-d: Esegue i container in modalità detached (in background).
3. Arrestare l'applicazione
Utilizza il seguente comando per arrestare l'applicazione:
docker-compose down
Best practice per la sicurezza di Docker
Come si evince dalla discussione, la sicurezza delle immagini Docker è una questione importante. Ecco alcune best practice per la sicurezza di Docker:
- Utilizzare immagini ufficiali: Ove possibile, utilizzare le immagini fornite ufficialmente, che sono generalmente sottoposte a scansioni di sicurezza e manutenzione.
- Scansionare le immagini per individuare vulnerabilità: Utilizzare strumenti come Trivy per scansionare le immagini alla ricerca di vulnerabilità note e aggiornare tempestivamente le immagini.
- Utilizzare il principio del minimo privilegio: Evitare di eseguire i container come utente root.
- Limitare le risorse del container: Utilizzare i cgroups per limitare l'utilizzo di CPU e memoria da parte del container.
- Aggiornare regolarmente le immagini: Mantenere aggiornate le immagini per correggere le vulnerabilità di sicurezza.
- Utilizzare strumenti di scansione della sicurezza: Strumenti come Snyk, Clair, ecc. possono essere integrati nel tuo flusso CI/CD per scansionare automaticamente le vulnerabilità delle immagini.





