Tutorial di Docker Composi

Tutorial di Docker Composi
La popolarità di Docker come strumento di sviluppo è in ascesa. Docker ha dato una nuova vita nel movimento del contenitore. Agli sviluppatori piace usarlo perché è veloce e facile da apprendere. Aiuta i team di sviluppo a condividere ambienti standard senza preoccuparsi di perdere tempo e risorse.

Gli sviluppatori possono impostare l'ambiente desiderato in un contenitore Docker, salvare il contenitore come immagine e condividerlo facilmente con i loro team di sviluppo. Il processo funziona perfettamente per un singolo contenitore. Tuttavia, gli ambienti multi-container sono più difficili da mantenere. Docker Compose fornisce la soluzione.

Con Docker Compose, gli sviluppatori possono definire un file YAML per impostare la configurazione per più servizi. Quindi possono avviare i servizi multi-container con un unico comando. Semplifica il processo di lavoro con applicazioni multi-container.

Prerequisito

Presumo che tu abbia una comprensione di base di Docker. Altrimenti, guarda Come installare e utilizzare Docker su Ubuntu. Gli esempi usano WordPress, Mysql, Flask e Python. Tuttavia, non è necessaria alcuna conoscenza preliminare di questi strumenti.

Processo di compositore Docker: a colpo d'occhio

  1. Definire l'ambiente dell'applicazione: Usa Dockerfile per definire l'ambiente dell'app per renderlo facilmente riproducibile.
  2. Definisci l'ambiente di composizione Docker: Usa docker-compose.YML per definire i servizi nell'applicazione.
  3. Esegui applicazione: Usa Docker-Opse Up per eseguire l'applicazione multi-contener.

Esempio di file di compositore Docker

Versione: '3'
Servizi:
DB:
Immagine: Mysql: 5.7
Volumi:
- db_data:/var/lib/mysql
Riavvia: sempre
ambiente:
Mysql_root_password: rootpassword123
Mysql_database: wordpress
Mysql_user: wordpress_user
Mysql_password: wordpress_password
WordPress:
dipende da:
- db
Immagine: WordPress: ultimo
Porte:
- "8000: 80"
Riavvia: sempre
ambiente:
Wordpress_db_host: DB: 3306
Wordpress_db_user: wordpress_user
Wordpress_db_password: wordpress_password
Volumi:
db_data:

Se il suddetto docker viene composto.Il file YML è invocato con Docker up, creerà un servizio WordPress che si collega a un servizio di database MySQL.

Comandi di compositore Docker

Puoi usare docker -compose -help Per trovare il comando Docker Compose

Quando utilizzare Docker Composi?

Attualmente, Docker viene utilizzato principalmente in ambienti di sviluppo. Alcuni degli usi popolari di Docker Compose sono:

1. Prototipazione e sviluppo

Il processo di prototipazione e sviluppo dell'applicazione viene rallentato a causa della mancanza di ambienti standard. Gli sviluppatori spesso devono perdere tempo a creare lo stesso ambiente più volte. Inoltre, la lettura delle guide per impostare i parametri dell'ambiente è richiesto dal tempo.

Docker composizioni semplifica il processo. Una volta configurato un ambiente, i team di sviluppo possono condividere i file Docker all'interno dell'organizzazione. Può risparmiare un'enorme quantità di tempo sprecata sui problemi di gestione della configurazione.

2. Test e automazione dei processi

Integrazione continua e consegna continua (CI/CD) stanno diventando processi standard negli ambienti di sviluppo agili di oggi. Il test automatizzato è un componente importante di CI/CD. Docker Compose aiuta a definire il processo di test automatizzato. Tutte le complicazioni dell'avvio di nuovi servizi possono essere ordinatamente inserite in file di configurazione Docker. I tester possono utilizzare questi file per accendere servizi temporanei, eseguire script di testo e distruggere i servizi dopo aver raccolto i risultati del test. Risparmia il tempo perché i servizi di avvio manualmente richiedono tempo e sono soggetti a errori.

3. Spingerment di produzione futura

Docker viene utilizzato principalmente negli ambienti di sviluppo. Tuttavia, man mano che le funzionalità Docker diventano più robuste, Docker verrà utilizzato per un maggiore lavoro a livello di produzione. Docker Compose può essere uno strumento prezioso per le distribuzioni di host singolo.

Esercizio: una semplice applicazione web

Proviamo la nostra mano in una semplice applicazione Web basata su Python per provare Docker Compose. Utilizzeremo il Flask Web Framework per creare un'applicazione che comunica con un database in memoria Redis per tenere traccia di quante volte l'applicazione Web è stata visitata.

La struttura della directory sembrerà così:

semplice_app
├── contenuto
│ ├── Dockerfile
│ └ Questo codice
│ ├── semplice_app.Py
│ └ Questo requisiti.TXT
└── Docker-Opse.YML

La struttura di directory di cui sopra non è necessaria per un'applicazione di base. Tuttavia, mostra come l'organizzazione delle informazioni possa essere utile per un'implementazione più efficiente della composizione di Docker.

Passaggio 1: creare struttura e file di directory

Creiamo la struttura della directory e i file necessari:

$ MKDIR Simple_App
$ mkdir simple_app/content
$ MKDIR Simple_App/Content/Code
$ touch Simple_App/Docker-Opse.YML
$ TOUCT Simple_App/content/Dockerfile
$ TOUCT Simple_App/Content/Code/Simple_App.Py
$ TOUCT Simple_App/Content/Code/Requisiti.TXT

Il comando touch sta solo creando file vuoti. Puoi andare manualmente nelle cartelle e creare i file.

Passaggio 2: codice dell'applicazione Web

La cartella del codice contiene il codice dell'applicazione Web. Metti il ​​seguente semplice_app.Py file:

Dal pallone di importazione di pallone
da Redis Import Redis
app = pallone (__ nome__)
Redis = Redis (host = 'Redis', porta = 6379)
@App.itinerario('/')
def hello ():
Count = Redis.incr ('hits')
ritorno 'Benvenuti in Docker Composi lezioni!

Hai visitato questo sito volte.\N'.Formato (conteggio)
Se __Name__ == "__main__":
app.run (host = "0.0.0.0 ", debug = true)

L'applicazione sopra crea una pagina di benvenuto che visualizza il numero di volte in cui la pagina è stata visitata. Il contatore di visita viene mantenuto in un database Redis. Redis utilizza la porta 6379 come porta di ascolto predefinita. Quindi, compila il requisiti.TXT file:

borraccia
Redis

Ciò consentirà a PIP di installare le dipendenze Python dal contenitore Web. Eseguimo PIP come parte dell'inizializzazione del nostro servizio.

Passaggio 3: Dockerfile

Riempire il semplice_app/content/dockerfile con il seguente codice:

Da Python: 3.6.3-Jessie
AGGIUNGERE ./codice /codice
Workdir /codice
Esegui i requisiti di installazione PIP -R.TXT
CMD ["Python", "Simple_App.py "]

Quanto sopra Dockerfile raggiunge quanto segue:

  1. Crea un'immagine da Python: 3.6.3-Jessie. Se non è disponibile a livello locale, lo scarica da Docker Hub.
  2. Copie elementi in semplice_app/content/codice in /codice sul contenitore
  3. Impostato /codice Come directory di lavoro sul contenitore
  4. Utilizza PIP per installare le dipendenze Python
  5. Imposta il punto di partenza predefinito per l'esecuzione del contenitore Python Simple_App.Py.

Passaggio 4: Docker Composi

Riempire il semplice_app/docker-compose.YML File con il seguente codice:

Versione: '3'
Servizi:
ragnatela:
costruire: ./contenuto
Porte:
- "5000: 5000"
Volumi:
- ./contenuto/codice:/codice
Redis:
Immagine: "Redis: Alpine"

IL docker-compose.YML Il file definisce due contenitori: Web e Redis. Utilizza il formato Docker Composi versione 3.

Per il servizio Web:

  • Costruisce il servizio Web utilizzando semplice_app/content/dockerfile
  • Porta in avanti 5000 dal contenitore Web alla porta 5000 dell'host. La porta 5000 è la porta predefinita per le applicazioni del pallone.
  • Volume semplice_app/content/codice è montato come /codice sul contenitore. Significa che se cambi qualcosa in semplice_app/content/codice, si rifletterà in /codice cartella sul contenitore Web.

Per il servizio Redis:

  • Utilizza il Redis: immagine alpina da Docker Hub per creare il servizio Redis.

Passaggio 5: Esecuzione di applicazioni utilizzando Docker Compose

L'applicazione è pronta per la distribuzione. Dal semplice_app cartella, eseguire il seguente comando:

$ Docker-Opse Up

L'output dovrebbe iniziare in questo modo:

$ Docker-Opse Up
Costruire Web
Passaggio 1/5: da Python: 3.6.3-Jessie
3.6.3-Jessie: tira dalla biblioteca/Python
85b1f47fba49: download [==========>] 12.43 MB/52.6 MB
5409e9a7fa9e: scarica completare
661393707836: download [===============>] 13.71 MB/43.23 MB
1bb98c08d57e: download [>] 1.081MB/134.7 MB
..

Una volta che tutte le immagini sono costruite e funzionanti, dovresti vedere quanto segue:

Stato: scaricata immagine più recente per Redis: Alpine
Creazione di SimpleApp_redis_1 ..
Creazione di SimpleApp_Web_1 ..
Creazione di SimpleApp_redis_1
Creazione di sempliciapp_web_1 ... fatto
Allegato a SimpleApp_redis_1, SimpleApp_Web_1
Redis_1 | 1: m 21 ott 02:06:33.639 * Pronto ad accettare le connessioni
Web_1 | * In esecuzione su http: // 0.0.0.0: 5000/ (premere Ctrl+C per smettere)
Web_1 | * Riavvio con Stat
Web_1 | * Il debugger è attivo!
Web_1 | * Pin del debugger: 237-189-083

Puoi testare l'applicazione andando su http: // localhost: 5000:. Se aggiorni la pagina alcune volte, dovrebbe riflettere il numero di visite. È possibile controllare lo stato dei servizi o dei contenitori in esecuzione:

$ Docker PS
Comando ID contenitore Comando immagine Nomi delle porte di stato creato
22852E0AD98A Redis: Alpine "Docker-Entrypoint ..." 5 minuti fa 5 minuti 6379/TCP SimpleApp_redis_1
d51739d0a3ac SimpleApp_Web "Python Simple_App.py "5 minuti fa 5 minuti 0.0.0.0: 5000-> 5000/TCP SimpleApp_Web_1

Se si avvia una shell bash in SimpleApp_Web_1 (il nome del contenitore può differire), verrai effettuato l'accesso alla directory /codice di lavoro:

$ Docker Exec -it SimpleApp_Web_1 Bash
root@d51739d0a3ac:/codice# ls
requisiti.txt Simple_App.Py
root@d51739d0a3ac:/codice#

IL /codice La directory dovrebbe riflettere il contenuto di semplice_app/content/codice al suo interno come visto sopra (semplice_app.Py E requisiti.TXT).

Se aggiorni il tuo semplice_app.PyLinea da:

ritorno 'Benvenuti in Docker Composi lezioni!

Hai visitato questo sito volte.\N'.Formato (conteggio)

A:

ritorno 'Benvenuti in Docker Composi lezioni!

Sei incuriosito?

Hai visitato questo sito volte.\N'.Formato (conteggio)

Dovrebbe riflettere su http: // localhost: 5000:

Passaggio 6: chiusura dei servizi

Puoi fermare l'applicazione utilizzando:

$ Docker-compose stop
Fermare SimpleApp_redis_1 ... fatto
Fermare SimpleApp_Web_1 ... fatto

I volumi montati persisteranno. È possibile rimuovere interamente i contenitori inclusi i volumi utilizzando il comando seguente.

$ Docker-compose giù --volume
Rimozione di SimpleApp_redis_1 ... Fatto
Rimozione di SimpleApp_Web_1 ... Fatto
Rimozione della rete SimpleApp_Default

Congratulazioni! Hai imparato le basi di Docker Compose.

Ulteriori studi

Per ulteriori studi, guarda la seguente documentazione:

  • Documentazione Docker
  • Riferimento del file di compositore Docker
  • Docker composi networking

Riferimenti:

  • https: // docs.Docker.com/compose/panoramica/#ambienti di sviluppo
  • https: // docs.Docker.com/compose/getstarted/
  • https: // blog.codeship.com/orchestrate-container-for-development-with-docker-compose/
  • https: // www.sumologico.com/blog/devops/how-to-build-applications-docker-compose/
  • https: // docs.Docker.com/compose/wordpress/#define-the-project