docker-compose Tutorial
Iniziare con docker-compose
Ricerca…
Osservazioni
Compose è uno strumento per la definizione e l'esecuzione di applicazioni Docker multi-contenitore. Con Compose, si utilizza un file Compose per configurare i servizi dell'applicazione. Quindi, utilizzando un singolo comando, puoi creare e avviare tutti i servizi dalla tua configurazione. Per ulteriori informazioni su tutte le funzionalità di Compose, consultare l'elenco delle funzionalità.
L'uso di Compose è fondamentalmente un processo in tre fasi.
- Definisci l'ambiente della tua app con un
Dockerfile
modo che possa essere riprodotto ovunque. - Definisci i servizi che compongono la tua app in
docker-compose.yml
modo che possano essere eseguiti insieme in un ambiente isolato. - Infine, esegui
docker-compose up
e Compose inizierà ed eseguirà l'intera app.
Installazione
Se stai eseguendo Docker su OS X o Windows, la docker-compose deve essere inclusa nell'appliance Docker per Windows o Docker Toolbox.
Su Linux puoi ottenere gli ultimi binari direttamente dalla pagina di rilascio di GitHub: https://github.com/docker/compose/releases
È possibile installare la versione specifica con i seguenti comandi:
curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
Per maggiori informazioni consultare la pagina della documentazione
Crea una semplice applicazione
Questo esempio viene dal documento ufficiale. Supponiamo di avere un'applicazione python usando redis come backend. Dopo aver scritto Dockerfile
, crea un file docker-compose.yml
questo modo:
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- redis
redis:
image: redis
Quindi eseguire docker-compose up
configurerà l'intera applicazione include: app python e redis.
-
version: '2'
è la versione della sintassi del file di composizione docker -
services:
è una sezione che descrive i servizi da eseguire -
web:
andredis:
sono i nomi dei servizi da avviare, i loro contenuti descrivono come la finestra mobile dovrebbe avviare i contenitori per tali servizi -
depends_on
implica una dipendenza del web verso i redis e quindi la docker-compose avvia prima il contenitoreredis
e quindi il contenitore web. Tuttavia, ladocker-compose
non attende che il contenitoreredis
sia pronto prima di avviare il contenitoreweb
. Per ottenere ciò è necessario utilizzare uno script che ritardi l'avvio del server delle applicazioni o qualsiasi altra cosa fino a quando il contenitoreredis
può eseguire richieste.
Una sezione di volumi e reti può essere aggiunta pure. L'utilizzo della sezione dei volumi consente il volume disconnesso che può essere indipendente dalla sezione Servizi di composizione docker. La sezione delle reti ha un risultato simile.
La sezione dei servizi di redis dovrebbe essere aggiustata in questo modo:
redis:
image: redis
volumes:
- redis-data:/code
networks:
-back-tier
Quindi, aggiungere le seguenti sezioni nella parte inferiore del file di versione 2 di composizione docker.
volumes:
# Named volume
redis-data:
driver: local
networks:
back-tier:
driver: bridge
redis-data
fornisce un'etichetta accessibile dalla sezione dei servizi. driver:local
imposta il volume sul file system locale.
back-tier
imposta l'etichetta della sezione delle reti per essere accessibile nella sezione servizi come ponte.
Esegui il comando nel servizio di composizione mobile
docker-compose run service-name command
Se, ad esempio, volessi eseguire rake db:create
nel tuo servizio web
, dovresti usare il seguente comando:
docker-compose run web rake db:create
Installa Docker Componi
Se ottieni un errore di
Permission denied
, eseguisudo -i
prima dei due comandi sottostanti, quindi esci.
- Inserisci Docker Scrivi in
/usr/local/bin/docker-compose
.
curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
È possibile modificare la versione
1.7.1
in modo che corrisponda alla versione desiderata. Prova ad ottenere la versione da https://github.com/docker/compose/releases
- Applicare le autorizzazioni eseguibili al binario.
chmod +x /usr/local/bin/docker-compose
- Testare l'installazione.
docker-compose --version
Expected docker-compose versione 1.7.1, build 0a9ab35
Docker Componi ciao mondo
Un docker-compose.yml
molto semplice assomiglia a questo:
version: '2'
services:
hello_world:
image: ubuntu
command: [/bin/echo, 'Hello world']
Questo file sta facendo in modo che ci sia un servizio hello_world
, che è inizializzato da ubuntu:latest
immagine e che, quando è in esecuzione, esegue semplicemente echo 'Hello world'
Se sei nella folder
della folder
(e contiene questo file docker-compose.yml
), puoi eseguire la docker-compose up
e dovresti vedere
Creating folder_hello_world_1
Attaching to folder_hello_world_1
hello_world_1 | Hello world
folder_hello_world_1 exited with code 0
Questo ha creato il contenitore dall'immagine di ubuntu e ha eseguito il comando specificato su docker-compose.yml
Docker-Compose
utilizza il nome della cartella come nome del progetto per prefisso contenitori e reti. Per impostare un altro nome di progetto, puoi chiamare docker-compose --project-name NAME {up|down|...}
oppure suppy un file chiamato .env
accanto al tuo docker-compose.yml
e scrivi COMPOSE_PROJECT_NAME=name
in esso. È meglio evitare nomi di progetto lunghi con trattini (-) perché la finestra mobile componi i bahaves in modo strano con questo tipo di nomi.
Nota: docker-compose consente di eseguire più contenitori finestra mobile su un singolo host. Se si desidera eseguire più contenitori su più di un nodo, fare riferimento a soluzione come swarm / kubernetes.
Ruby on Rails con docker-compose
Se si desidera utilizzare l'applicazione docker per le guide e utilizzare il database, è necessario sapere che tutti i dati nel contenitore finestra mobile verranno distrutti (a meno che non si configuri il contenitore in modo specifico per conservare i dati) A volte, è necessario creare un contenitore finestra mobile con un'applicazione e collegarla a un vecchio contenitore con un database.
Come esempio di applicazione rails, ho usato una semplice app. Puoi crearlo dal comando:
rails new compose-app --database=postgresql
Naturalmente, è necessario installare preventivamente rotaie, rubini, ecc.
Quindi, crea Dockerfile nel tuo progetto e imposta questi dati su di esso:
FROM ruby:2.3.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /compose-app
WORKDIR /compose-app
ADD Gemfile /compose-app/Gemfile
ADD Gemfile.lock /compose-app/Gemfile.lock
RUN bundle install
ADD . /compose-app
Passaggio successivo: crea docker-compose.yml con i dati:
version: '2'
services:
db:
image: postgres
web:
build: .
command: bundle exec rails s -e development -p 80 -b '0.0.0.0'
volumes:
- .:/compose-app
ports:
- "80:80"
depends_on:
- db
È possibile sostituire 80 port (-p 80) con un altro.
La sezione di sviluppo di database.yml deve essere cambiata in:
development: &default
adapter: postgresql
encoding: unicode
database: postgres
pool: 5
username: postgres
password:
host: db
Ora puoi costruire immagini dal comando:
docker-compose build
(Esegui questo nella directory del progetto)
E inizia tutto da:
docker-compose up
Se tutto è fatto correttamente, sarai in grado di vedere i registri dai binari nella console.
Chiudi console. Funzionerà.
Se si desidera eliminare solo il contenitore con l'applicazione rails senza il database, è necessario eseguire quindi nella directory del progetto:
docker-compose stop web
docker-compose build web
docker-compose up -d --no-deps web
Verrà creato e lanciato un nuovo contenitore con l'app per i binari.