docker-composeIniziare con docker-compose


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.

  1. Definisci l'ambiente della tua app con un Dockerfile modo che possa essere riprodotto ovunque.
  2. Definisci i servizi che compongono la tua app in docker-compose.yml modo che possano essere eseguiti insieme in un ambiente isolato.
  3. Infine, esegui docker-compose up e Compose inizierà ed eseguirà l'intera app.

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: and redis: 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 contenitore redis e quindi il contenitore web. Tuttavia, la docker-compose non attende che il contenitore redis sia pronto prima di avviare il contenitore web . Per ottenere ciò è necessario utilizzare uno script che ritardi l'avvio del server delle applicazioni o qualsiasi altra cosa fino a quando il contenitore redis 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.

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.

Installa Docker Componi

  1. Installa il motore Docker .

Se ottieni un errore di Permission denied , esegui sudo -i prima dei due comandi sottostanti, quindi esci.

  1. 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

  1. Applicare le autorizzazioni eseguibili al binario.
chmod +x /usr/local/bin/docker-compose
 
  1. Testare l'installazione.
docker-compose --version
 

Expected docker-compose versione 1.7.1, build 0a9ab35

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

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.

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