Vuoi eseguire Jenkins in Docker ma non sei sicuro se utilizzare i volumi o mantenere i dati containerizzati? Se Jenkins è containerizzato, come si esegue il backup dei dati? È necessario eseguire il backup dell'intero contenitore? Le informazioni possono persistere al di fuori del contenitore e come? L'utilizzo di Docker Compose con i volumi potrebbe aiutarti a garantire che i tuoi dati Jenkins siano al sicuro anche in caso di guasto del contenitore Docker.
Oltre al backup dei dati, l'utilizzo dei volumi Docker consente anche di condividere i dati Jenkins tra più contenitori.
Continua a leggere perché, in questo articolo, imparerai come eseguire Jenkins utilizzando Docker e Docker Compose. Imparerai come trovare ed eventualmente eseguire il backup dei dati Jenkins all'interno e all'esterno del contenitore Docker.
Requisiti
Ci saranno molti esempi di apprendimento in questo articolo. Se vuoi seguire, avrai bisogno di:
- Un computer con Docker e Docker Compose installato. Le demo in questo articolo sono fatte in Ubuntu Server 20.04 . Puoi utilizzare Docker su Windows o macOS se preferisci.
Questo articolo non illustra come installare e configurare Docker e Docker Compose. Puoi fare riferimento alla documentazione Docker ufficiale. Il blog ATA contiene anche molti articoli relativi a Docker che potresti anche voler leggere.
Esecuzione di Jenkins in Docker
Per eseguire un'istanza Jenkins in Docker, devi prima estrarre l'immagine da un repository. In questo esempio, l'immagine Jenkins viene estratta da Docker Hub . Hai la possibilità di scaricare l'immagine prima di creare un contenitore. Oppure puoi anche eseguire un container e lasciare che Docker scarichi l'immagine al volo.
Il comando seguente eseguirà un contenitore Jenkins utilizzando docker run
comando. Il --name [NAME]
opzione è dove si assegna un nome al contenitore Docker. Se il nome del contenitore non è specificato, Docker assegna un nome casuale al contenitore.
Il -p [host-port:container-port]
opzione significa esporre la porta o le porte all'interno del contenitore al computer host. Nel codice seguente, le porte 8080 e 50000 sono esposte all'host Docker utilizzando gli stessi numeri di porta.
Infine, jenkins/jenkins:lts
significa che il contenitore da eseguire utilizzerà jenkins:lts Immagine Docker dal repository Jenkins . Puoi modificare i valori nome e porta host numeri se necessario, ma non modificare il contenitore numeri di porta.
Copia il codice qui sotto ed eseguilo sul tuo terminale.
docker run --name my-jenkins-1 -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
Dopo aver eseguito il comando precedente, Docker inizia a creare un nuovo contenitore. Una volta che il contenitore Jenkins è in esecuzione, prendi nota della password amministratore iniziale visualizzata sul terminale. La password amministratore è necessaria durante la configurazione iniziale di Jenkins.
Completamento della configurazione iniziale di Jenkins
Dopo che il contenitore Jenkins è entrato nello stato di esecuzione, ora puoi accedere alla pagina di amministrazione di Jenkins. Se ricordi dal comando che hai utilizzato per creare il container, il numero di porta è 8080. Quindi, per accedere all'istanza Jenkins, vai a HTTP://localhost:8080 .
Come puoi vedere di seguito, Sblocca Jenkins pagina richiede di inserire la password amministratore iniziale. Dovresti aver copiato la password amministratore iniziale in precedenza. Inserisci la password nella Password amministratore casella e fare clic su Continua .
Su Personalizza Jenkins pagina, avrai la possibilità di Installare i plug-in suggeriti . Questi plug-in suggeriti sono i plug-in che la comunità Jenkins installa in genere. Se hai un set preselezionato di plug-in da installare, scegli Seleziona plug-in da installare opzione.
Per semplicità, Installa i plug-in suggeriti è l'opzione selezionata per questo esempio.
I plugin verranno installati e puoi aspettare solo fino al termine dell'installazione. Come puoi vedere di seguito, sono stati installati quattordici (14) plug-in suggeriti. Il numero di plugin consigliati può aumentare o diminuire nel tempo. Quando hai installato la tua istanza Jenkins, i plug-in suggeriti potrebbero essere già diversi.
Immediatamente al termine dell'installazione dei plug-in, vedrai Crea primo utente amministratore pagina. Questa pagina è dove creerai il primo account amministratore Jenkins. Compila tutte le caselle come richiesto e fai clic su Salva e continua. Assicurati di ricordare le credenziali di amministratore che hai appena creato.
Nella Configurazione dell'istanza page è dove puoi modificare l'URL della pagina di amministrazione di Jenkins. Il valore dell'URL sarebbe in genere l'URL effettivo a cui accederanno gli utenti Jenkins. Per questo esempio, lascia il valore predefinito http://localhost:8080 e fai clic su Salva e termina .
Nella pagina di configurazione finale, vedrai la conferma che la configurazione di Jenkins è completa. Fai clic su Inizia a utilizzare Jenkins .
Quando vedi il Benvenuto in Jenkins pagina, come mostrato di seguito, quindi hai completato l'installazione di Jenkins. A questo punto, puoi iniziare a configurare Jenkins e creare nuovi elementi o progetti.
Trovare i dati Jenkins nel container
Nella sezione precedente, hai creato un contenitore Docker per eseguire un'istanza di Jenkins. I contenitori Docker, proprio come qualsiasi altra cosa su un computer, potrebbero rompersi. Se il contenitore non è disponibile per qualche motivo, anche i dati Jenkins sono spariti.
Per comprendere meglio il posizionamento dei dati Jenkins, il codice seguente utilizza docker exec
comando per elencare i contenuti della /var/jenkins_home . Il nome del contenitore Docker in questo esempio è my-jenkins-1.
docker exec my-jenkins-1 ls -l /var/jenkins_home
Di seguito puoi vedere il risultato dell'esecuzione del comando sopra. Il contenuto della /var/jenkins_home sono elencate le directory. La /var/jenkins_home contiene le impostazioni, gli utenti, i plug-in e altri elementi critici.
Backup dei dati Jenkins dal container all'host
A questo punto, hai confermato che i dati Jenkins si trovano all'interno del contenitore. Dovresti copiare i dati Jenkins dal contenitore all'host. E una volta che i dati Jenkins sono fuori dal contenitore, puoi eseguire un backup.
È positivo che Docker disponga del supporto integrato per la copia di file tra il contenitore Docker e l'host Docker. Usando il comando docker cp <container id>:/path/in/container /path/in/host
L'esempio seguente usa il docker cp
comando per copiare i dati del contenitore my-jenkins-1 in una posizione host Docker. Nota che non è nemmeno necessario che il contenitore sia in esecuzione per eseguire correttamente questo comando.
docker cp my-jenkins-1:/var/jenkins_home ~/jenkins_backup
La demo seguente mostra il comando sopra in azione. Come puoi vedere, la directory di destinazione viene creata automaticamente dal comando.
Ora che hai estratto i dati Jenkins dal contenitore, puoi forse comprimere e archiviare l'intera cartella. Potrebbe essere necessario eseguire la stessa attività ogni volta che apporti modifiche a Jenkins.
Esecuzione di Jenkins in Docker con Volume Mount
Per rendere i tuoi dati Jenkins persistenti e coerenti al di fuori del contenitore Docker, dovresti utilizzare un volume Docker .
Come spiegato nella sezione precedente, i file di configurazione di Jenkins si trovano all'interno del contenitore Docker in /var/jenkins_home . Per assicurarti che i file Jenkins vengano salvati al di fuori del contenitore, puoi utilizzare -v
opzione con docker run
comando.
Il codice seguente creerà un nuovo contenitore Docker con il nome my-jenkins-2 . Le porte 8080 e 50000 saranno esposte all'host. Inoltre, il /var/jenkins_home la directory all'interno del contenitore Docker verrà montata come volume sull'host come jenkins_home.
docker run --name my-jenkins-2 -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
Dopo aver eseguito il comando precedente, è necessario creare il nuovo contenitore Docker ed entrare nello stato di esecuzione. Puoi confermare che il contenitore è in esecuzione utilizzando il comando docker ps.
Elenco di tutti i contenitori in esecuzione
Trovare i dati Jenkins sull'host Docker
Allora, dov'è la cartella dei dati di Jenkins ora? In base al comando che hai utilizzato per creare il contenitore my-jenkins-2, il volume montato è jenkins_home . Per sapere dove si trova nel filesystem jenkins_home è possibile trovare la posizione, utilizzare il docker volume
comando.
Il comando seguente mostrerà i dettagli della jenkins_home volume sull'host Docker.
docker volume inspect jenkins_home
Lo screenshot qui sotto mostra le informazioni sulla jenkins_home volume come risultato dell'esecuzione del comando precedente.
Ora che sai dove trovare i dati Jenkins, puoi confermare esplorando la posizione del punto di montaggio. In questo esempio, la jenkins_home il punto di montaggio del volume è in /var/lib/docker/volumes/jenkins_home/_data .
Ora che i dati Jenkins persistono al di fuori del contenitore, puoi eseguire il backup della directory per la custodia. Inoltre, anche se il contenitore Jenkins viene eliminato, i dati rimarranno sull'host Docker.
Esecuzione di Jenkins utilizzando Docker Compose with Volumes
Un altro modo per eseguire Jenkins è usare docker-compose
comando. Con Docker Compose , puoi distribuire una o più istanze di Jenkins, se necessario. Ma prima di farlo, devi creare un file Docker Compose per ogni istanza.
Creazione dei file Docker Compose
Per impostazione predefinita, docker-compose
comando legge il file con il nome docker-compose.yml o docker-compose.yaml nella stessa directory di lavoro in cui immetti il comando.
Usando la tua scelta di editor di testo disponibile, apri un nuovo file vuoto. Quindi, copia il codice YAML di seguito, incollalo nel tuo editor e quindi salva docker-compose.yml file.
# docker-compose.yml
version: '3.7'
services:
jenkins:
image: jenkins/jenkins:lts
privileged: true
user: root
ports:
- 8083:8080
- 50003:50000
container_name: my-jenkins-3
volumes:
- ~/jenkins_data:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
Questo articolo non copre l'anatomia di un file Docker Compose. Puoi consultare la documentazione di riferimento del file di composizione ufficiale per capire meglio cosa significa ogni impostazione nel file di composizione.
Ma, in questo esempio, puoi suddividere le impostazioni più importanti in entrambi i file Docker Compose come elencato di seguito.
- immagine :questa è l'immagine di base da utilizzare per creare l'istanza del contenitore Docker.
- porte :qui è dove definire la mappatura delle porte tra l'host Docker e il container.
- volumi :questi sono i volumi mappati tra l'host Docker e il container.
- nome_contenitore :questo è il nome che vuoi assegnare al container che stai creando. In questo esempio, il nome del contenitore è my-jenkins-3 .
Avvio di Jenkins Container utilizzando Docker Compose
Ora che hai salvato i due file Docker Compose, ora puoi usarli per avviare le due istanze del contenitore Docker Jenkins.
Per avviare my-jenkins-3 contenitore, utilizzare il comando seguente. Nota che il comando seguente presuppone che docker-compose.yml il file si trova nella stessa directory in cui esegui il comando.
# Start the my-jenkins-3 container
docker-compose up -d
# Get the initial admin password
docker exec my-jenkins-3 cat /var/jenkins_home/secrets/initialAdminPassword
# Confirm the my-jenkins-3 container is running
docker ps
I my-jenkins-3 container quindi si avvia ed entra nello stato di esecuzione, come puoi vedere di seguito.
Naviga nell'URL http://localhost:8083 usando il tuo browser per accedere a Jenkins e completare la configurazione iniziale.
Dopo aver completato la configurazione iniziale di Jenkins per my-jenkins-3 container, puoi confermare che la cartella ~/jenkins_data è popolata con i file di dati Jenkins.
Poiché i file di dati Jenkins persistono sull'host Docker, anche se my-jenkins-3 il contenitore docker viene eliminato, la configurazione sopravvive. Per testare ulteriormente la persistenza della configurazione di Jenkins, arrestare my-jenkins-3 contenitore utilizzando il comando seguente.
docker-compose down
Nota che usando il downer-compose down
il comando elimina automaticamente il contenitore stesso.
Ora avvia my-jenkins-3 risalire usando il comando qui sotto.
docker-compose up -d
E quando accedi all'interfaccia web di Jenkins, la prima pagina che vedrai è la pagina di accesso invece della pagina di configurazione iniziale. Scoprirai che viene conservata la stessa configurazione di Jenkins, comprese le tue credenziali di accesso.
Riepilogo
In questo articolo, hai imparato come eseguire Jenkins utilizzando Docker in diversi modi. Hai imparato come eseguire Jenkins in Docker con e senza un volume montato. E hai imparato come eseguire il backup dei dati Jenkins dall'interno del container all'host.
Hai anche imparato come eseguire un'istanza Jenkins utilizzando Docker Compose con i volumi mappati sull'host Docker. I file di dati Jenkins vengono quindi salvati nell'host Docker, rendendo le impostazioni Jenkins persistenti e coerenti anche se il contenitore Docker viene eliminato.
L'utilizzo di Docker e Docker Compose con i volumi ti offre la flessibilità di eseguire il backup e, in definitiva, di riutilizzare i dati di Jenkins. Quale metodo per eseguire Jenkins in Docker pensi che utilizzeresti di più?
Ulteriori letture
- Distribuzione del tuo primo container con Docker per Windows
- Come creare (e gestire) i volumi Docker su Windows
- Come installare Ubuntu 20.04 [Passo dopo passo]