Sono nuovo agli strumenti di gestione e distribuzione della configurazione. Devo implementare uno strumento di distribuzione continua/distribuzione continua per uno dei progetti più interessanti su cui abbia mai messo le mani.Come Docker e Ansible si incastrano per implementare la distribuzione continua/la distribuzione continua
Prima di tutto, individualmente, mi trovo a mio agio con AWS
, so che cos'è Ansible
, la logica dietro di esso e il suo scopo. Non ho lo stesso livello di conoscenza di Docker
ma ho avuto l'idea. Ho passato molte risorse Internet, ma non riesco a ottenere il quadro generale.
Quello che ho fatto fatica è il modo in cui si adattano. Usando Ansible
, posso gestire la mia infrastruttura come codice; creazione di istanze EC2
, installazione di pacchetti ... Posso persino distribuire un'applicazione completa estraendo il codice, modificando i file di configurazione e avviando il server web. Docker
è, di per sé, uno strumento che pacchetta un'applicazione e garantisce che possa essere eseguito ovunque lo si distribuisca.
I miei problemi sono:
Come funziona Docker (o Ansible e Docker) estendono il processo di Continuous Integration !?
Supponiamo di disporre di un repository del codice sorgente, che i membri del team finiscano di lavorare su una funzione e che spingano il proprio lavoro. Jenkins lo rileva, esegue tutte le suite di test di accettazione/unità/integrazione e, se passano tutte, lo dichiara come una build stabile. Come si inserisce Docker qui? Voglio dire quando il team spinge il loro lavoro, Jenkins deve estrarre la sorgente del file Docker nell'app, creare l'immagine dell'applicazione, avviare il contenitore ed eseguire tutti i test o eseguire i test in modo classico e se tutto è buono allora costruisce l'immagine Docker dal file Docker e la salva in un luogo privato? Se Jenkins tagga l'immagine finale usando x.y.z per esempio !?
Docker configurazione contenitori:
Supponiamo di avere un'immagine costruita da Jenkins
memorizzati da qualche parte, come gestire la distribuzione della stessa immagine in ambienti diversi, e anche, diversi parametri di configurazione (Vhosts config, host DB, code URL, endpoint S3, ecc.) Qual è il modo più flessibile per gestire questo problema senza rompere i principi Docker
? Queste configurazioni sono supportate nell'immagine quando viene generata o quando viene avviato il contenitore basato su di esso, in caso affermativo come vengono iniettate?
Ansible e Docker:
Ansible
fornisce un modulo Docker
per gestire Docker
contenitori. Supponendo di aver risolto i problemi sopra menzionati, quando voglio distribuire una nuova versione x.t.z della mia app, dico allo Ansible
di estrarre l'immagine da dove era stata memorizzata, avviare il contenitore dell'app, quindi come iniettare le impostazioni di configurazione !? Ansible deve accedere all'immagine Docker, prima che sia in esecuzione (mi sembra assurdo) e usare i suoi modelli Jinja2 allo stesso modo con un host classico !? In caso contrario, come viene gestito ?!
Scusami se è stata una lunga domanda o se ho sbagliato a scrivere qualcosa, ma questo è il mio pensiero ad alta voce. Sono bloccato per le ultime due settimane e non riesco a capire il corretto flusso di lavoro. Voglio che questo sia un riferimento per i futuri lettori.
Per favore, sarebbe molto utile leggere le vostre esperienze e soluzioni perché questo sembra un flusso di lavoro comune. Grazie in anticipo. Ogni aiuto è molto apprezzato.
Ansible + Docker == Magic! Ecco un ottimo post sul blog: https://developer.rackspace.com/blog/ansible-and-docker/ e c'è anche una sezione dedicata ad Ansible + Docker in http://www.ansiblefordevops.com/ – Homer6