docker-composeKomma igång med docker-compose


Anmärkningar

Compose är ett verktyg för att definiera och köra multi-container Docker-applikationer. Med Compose använder du en Compose-fil för att konfigurera applikationens tjänster. Med hjälp av ett enda kommando skapar du och startar alla tjänster från din konfiguration. För att lära dig mer om alla funktioner i Compose, se listan över funktioner.

Att använda Compose är i princip en trestegsprocess.

  1. Definiera din apps miljö med en Dockerfile så att den kan reproduceras var som helst.
  2. Definiera de tjänster som utgör din app i docker-compose.yml så att de kan köras tillsammans i en isolerad miljö.
  3. Slutligen, kör docker-compose up compose docker-compose up och Compose startar och kör hela appen.

Skapa en enkel applikation

Detta exempel kommer från det officiella dokumentet. Anta att du har en pythonapplikation som använder redis som backend. När du har skrivit Dockerfile skapar du en docker-compose.yml fil så här:

version: '2'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
    depends_on:
     - redis
  redis:
    image: redis
 

docker-compose up att ställa in hela applikationen inkluderar: python-app och återigen.


  • version: '2' är versionen av docker-compose-filsyntax
  • services: är ett avsnitt som beskriver de tjänster som ska köras
  • web: and redis: är namnen på de tjänster som ska startas, deras innehåll beskriver hur dockaren ska starta containrar för dessa tjänster
  • depends_on innebär ett beroende av webben för att återuppta och därför startar dockare- redis behållaren och sedan redis . Ändå gör docker-compose inte vänta tills redis behållaren är klar innan web container. För att uppnå detta måste du använda ett skript som försenar starten av applikationsservern eller vad som helst tills redis behållaren kan utföra förfrågningar.

En volym- och nätverksdel kan också läggas till. Användning av volymavsnittet möjliggör frånkopplad volym som kan leva oberoende av avsnittet om dockningskomponeringstjänster. Nätverksavsnittet har ett liknande resultat.

Återuppsättningen av tjänsterna måste justeras så:

redis:
  image: redis
  volumes:
    - redis-data:/code
  networks:
    -back-tier 
 

Lägg sedan till följande avsnitt längst ner i dockerkomponera version 2-filen.

volumes:
  # Named volume
  redis-data: 
    driver: local
networks:
  back-tier:
    driver: bridge
 

redis-data ger en tillgänglig etikett från servicesektionen. driver:local ställer in volymen till det lokala filsystemet.

back-tier ställer in nätverksavdelningsetiketten så att den är tillgänglig i tjänstesektionen som överbryggad.

Docker Compose hej värld

En mycket grundläggande docker-compose.yml ser ut så här:

version: '2'
services:
  hello_world:
    image: ubuntu
    command: [/bin/echo, 'Hello world']
 

Den här filen gör det så att det finns en hello_world tjänst, som har initialiserats från ubuntu:latest bilden och att när den körs, den kör bara echo 'Hello world'

Om du befinner dig i folder (och den innehåller denna docker-compose.yml fil) kan du göra docker-compose up och du borde se

Creating folder_hello_world_1
Attaching to folder_hello_world_1
hello_world_1 | Hello world
folder_hello_world_1 exited with code 0
 

Detta skapade behållaren från ubuntu-bilden och körde kommandot som specificerades på docker-compose.yml

Docker-Compose använder mappnamnet som projektnamn för att prefixa behållare och nätverk. För att ställa in ett docker-compose --project-name NAME {up|down|...} projektnamn kan du antingen ringa docker-compose --project-name NAME {up|down|...} eller så anger du en fil som heter .env bredvid din docker-compose.yml och skriver COMPOSE_PROJECT_NAME=name i den. Undvik bättre långa projektnamn med bindestreck (-) eftersom dockaren komponerar bahaves konstiga med den här typen av namn.

Obs: docker-compose låter dig köra flera dockercontainrar på en enda värd. Om du vill köra flera behållare på mer än en nod, hänvisar du till lösning som svärm / kubernetes.

Installera Docker Compose

  1. Installera Docker Engine .

Om du får ett Permission denied fel, kör sudo -i innan de två kommandona nedan och avsluta.

  1. Pull Docker Compose to /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
 

Du kan ändra version 1.7.1 att den matchar önskad version. Prova att få version från https://github.com/docker/compose/releases

  1. Tillämpa körbara behörigheter på det binära.
chmod +x /usr/local/bin/docker-compose
 
  1. Testa installationen.
docker-compose --version
 

Förväntad docker-compose version 1.7.1, build 0a9ab35

Installation

Om du kör Docker på OS X eller Windows bör docknings-kompos ingå i installationen av Docker för Windows eller Docker Toolbox.

På Linux kan du få de senaste binära programmen direkt från GitHub-utgåvan: https://github.com/docker/compose/releases

Du kan installera den specifika versionen med följande kommandon:

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
 

För mer information, se dokumentationssidan

Ruby on Rails med docker-compose

Om du vill använda docker för rails-app och använda databas, måste du veta att all data i dockercontainern kommer att förstöras (såvida du inte konfigurerar behållaren specifikt för att spara data) Ibland måste du skapa en dockningscontainer med en applikation och bifoga den till en gammal behållare med en databas.

Som ett exempel på rails-applikation använde jag en enkel app. Du kan skapa det från kommandot:

rails new compose-app --database=postgresql
 

Naturligtvis måste du installera räls, rubin etc. i förväg.

Skapa sedan Dockerfile i ditt projekt och ställ in dessa data till det:

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
 

Nästa steg - skapa docker-compose.yml med data:

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
 

Du kan ersätta 80 port (-p 80) mot en annan.

Utveckla avsnittet av database.yml-konfigurering måste ändras till:

development: &default
  adapter: postgresql
  encoding: unicode
  database: postgres
  pool: 5
  username: postgres
  password:
  host: db
 

Nu kan du bygga bilder från kommandot:

docker-compose build
 

(Kör detta i projektkatalogen)

Och börja allt från:

docker-compose up
 

Om allt görs korrekt kan du se loggar från räls i konsolen.

Stäng konsolen. Det kommer att fungera.

Om du bara vill ta bort behållaren med rails-applikationen utan databasen, måste du köra den sedan i projektkatalogen:

docker-compose stop web
docker-compose build web
docker-compose up -d --no-deps web
 

Ny behållare med rälsapp skapas och lanseras.

Kör kommandot i docker-compose-tjänst

docker-compose run service-name command

Om du till exempel vill köra rake db:create i din web skulle du använda följande kommando:

docker-compose run web rake db:create