Questo progetto utilizza Jenkins per automatizzare il ciclo di vita delle immagini Docker, dal build al push su un registro locale. Le operazioni principali includono:
- Configurazione di un container con Docker attivo.
- Configurazione di una pipeline Jenkins che:
- Esegue la build di un’immagine Docker.
- Tagga l’immagine in modo progressivo.
- Esegue il push dell’immagine in un registry Docker locale.
Per configurare un container con Docker attivo, basta seguire le istruzioni presenti nel file STEP_3.md
. Questo file guida alla configurazione completa di due container con Docker attivo, inclusa la creazione di un registro locale e la gestione delle immagini Docker.
Dopo aver seguito il file STEP_3.md
, è possibile verificare che Docker sia attivo all’interno del container:
-
Accedi al container tramite:
docker exec --user root -it <nome-del-container> bash
-
All’interno del container, esegui:
docker ps
Questo comando mostrerà gli stessi container in esecuzione sull’host Mac, poiché il Docker socket (/var/run/docker.sock
) è condiviso tra l’host e il container. Non è Docker in Docker, ma una condivisione diretta del socket Docker.
Dopo aver seguito lo Step 3, e aver quindi creato il registro, procediamo configurando Jenkins. Crea un container Docker specifico che abbia accesso al Docker socket e ai volumi necessari. Esegui i seguenti comandi:
- Creazione del Container:
docker run -d \ --name jenkins-container \ -p 8080:8080 -p 50000:50000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v jenkins_home:/var/jenkins_home \ jenkins/jenkins:lts
- Il Docker socket (
/var/run/docker.sock
) è montato per consentire a Jenkins di eseguire comandi Docker. - La directory
jenkins_home
viene utilizzata per mantenere i dati persistenti di Jenkins.
- Accedi all’Interfaccia di Jenkins:
Apri un browser e vai su http://localhost:8080
. Durante il primo avvio, Jenkins richiederà una chiave di sblocco. Recupera la chiave dal container con:
docker exec jenkins-container cat /var/jenkins_home/secrets/initialAdminPassword
Procedi con la configurazione guidata.
- Installazione di Docker nel Container Jenkins:
Completata la configurazione iniziale, accedi al container Jenkins come utente root
:
docker exec --user root -it jenkins-container bash
Installa Docker:
apt update && apt install docker.io
Modifica i permessi del socket Docker:
chown root:docker /var/run/docker.sock
chmod 660 /var/run/docker.sock
Aggiungi l'utente jenkins
al gruppo docker
ed esci:
usermod -aG docker jenkins
exit
Riavvia il container Jenkins:
docker restart jenkins-container
Segui questi passaggi per configurare una semplice pipeline:
- Creazione del Progetto Pipeline:
- Vai su Jenkins > Nuovo Elemento.
- Dai un nome alla pipeline e seleziona il tipo “Pipeline”.
- Definizione della Pipeline:
- Nella sezione Pipeline, seleziona “Pipeline script from SCM”.
- Configura:
- SCM: Git.
- Repository URL: Il link al repository GitHub (mettere https://github.com/lucacis8/formazione_cm).
- Ramo: */main
- Assicurati che il Jenkinsfile sia posizionato nella root del repository.
- Esegui la Pipeline:
Salva e avvia la pipeline. Controlla che tutte le fasi vengano completate con successo.
- Verifica l’immagine costruita:
Dopo l’esecuzione della pipeline, verifica che l’immagine sia stata costruita:
docker images
- Controlla il Registro Docker:
Assicurati che l’immagine sia stata pushata nel registry:
curl http://localhost:5000/v2/_catalog
Output atteso:
{"repositories":["my-app"]}
- Esegui il Container:
Puoi avviare un container basato sull’immagine:
docker run -d localhost:5000/my-app:<timestamp>
- Debugging:
- Permission Denied sul Docker Socket: Verifica i permessi del Docker socket montato nel container Jenkins.
- Immagini non disponibili: Controlla che la fase di push della pipeline non abbia errori.
Seguendo questa guida, hai configurato un ambiente Jenkins completo per automatizzare la build, il tagging e il push delle immagini Docker. Il progetto sfrutta il socket Docker condiviso per eseguire comandi Docker direttamente dal container Jenkins.