Suche…


Bemerkungen

Compose ist ein Tool zum Definieren und Ausführen von Docker-Anwendungen für mehrere Container. Mit Compose verwenden Sie eine Compose-Datei, um die Dienste Ihrer Anwendung zu konfigurieren. Anschließend erstellen und starten Sie mit einem einzigen Befehl alle Dienste aus Ihrer Konfiguration. Weitere Informationen zu allen Funktionen von Compose finden Sie in der Liste der Funktionen.

Die Verwendung von Compose ist im Wesentlichen ein dreistufiger Prozess.

  1. Definieren Sie die Umgebung Ihrer App mit einer Dockerfile damit Sie sie überall wiedergeben können.
  2. Definieren Sie die Dienste, aus denen sich Ihre App zusammensetzt, in docker-compose.yml damit sie zusammen in einer isolierten Umgebung ausgeführt werden können.
  3. Führen Sie zuletzt docker-compose up und Compose startet und führt Ihre gesamte App aus.

Installation

Wenn Sie Docker unter OS X oder Windows ausführen, sollte Docker-Compose in Ihre Docker for Windows- oder Docker Toolbox-Installation aufgenommen werden.

Unter Linux können Sie die neuesten Binaries direkt von der GitHub-Release-Seite herunterladen : https://github.com/docker/compose/releases

Sie können die spezifische Version mit den folgenden Befehlen installieren:

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

Weitere Informationen finden Sie auf der Dokumentationsseite

Erstellen Sie eine einfache Anwendung

Dieses Beispiel stammt aus dem offiziellen Dokument. Angenommen, Sie haben eine Python-Anwendung, die redis als Backend verwendet. Erstellen Dockerfile nach dem Schreiben von Dockerfile eine Datei docker-compose.yml wie docker-compose.yml :

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

Dann führen Sie docker-compose up die gesamte Anwendung docker-compose up : Python-App und Redis.


  • version: '2' ist die Version der Docker-Compose-Dateisyntax
  • services: ist ein Abschnitt, der die auszuführenden Dienste beschreibt
  • web: und redis: sind die Namen der zu startenden Dienste. In ihrem Inhalt wird beschrieben, wie das Docker Container für diese Dienste starten soll
  • depends_on impliziert eine Abhängigkeit des Webs von redis und daher startet depends_on -compose zuerst den redis Container und dann den Webcontainer. Trotzdem wartet docker-compose nicht, bis der redis Container fertig ist, bevor er den web Container startet. Um dies zu erreichen, müssen Sie ein Skript verwenden, das den Start des Anwendungsservers oder eines anderen Befehls verzögert, bis der redis Container Anforderungen ausführen kann.

Ein Abschnitt mit Volumes und Netzwerken kann ebenfalls hinzugefügt werden. Die Verwendung des Volumes-Abschnitts ermöglicht nicht verbundene Volumes, die unabhängig vom Docker-Zusammenstellungsserviceabschnitt ausgeführt werden können. Der Netzwerkbereich hat ein ähnliches Ergebnis.

Der redis-Teil der Dienste müsste wie folgt angepasst werden:

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

Fügen Sie anschließend die folgenden Abschnitte am unteren Rand der Docker-Version 2-Datei hinzu.

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

redis-data bietet ein zugängliches Label aus dem Servicebereich. driver:local setzt das Volume auf das lokale Dateisystem.

back-tier legt fest, dass die Bezeichnung des Netzwerkabschnitts im Serviceabschnitt als überbrückt angezeigt wird.

Befehl im Docker-Compose-Dienst ausführen

docker-compose run service-name command

Wenn Sie beispielsweise rake db:create in Ihrem web ausführen rake db:create , verwenden Sie den folgenden Befehl:

docker-compose run web rake db:create

Installieren Sie Docker Compose

  1. Installieren Sie die Docker Engine .

Wenn Sie eine Fehlermeldung mit Permission denied , führen Sie sudo -i vor den beiden folgenden Befehlen aus und sudo -i .

  1. Ziehen Sie Docker Compose nach /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

Sie können Version 1.7.1 an Ihre gewünschte Version 1.7.1 . Testen Sie die Version von https://github.com/docker/compose/releases

  1. Wenden Sie ausführbare Berechtigungen für die Binärdatei an.
chmod +x /usr/local/bin/docker-compose
  1. Testen Sie die Installation.
docker-compose --version

Erwartete Docker-Compose-Version 1.7.1, Build 0a9ab35

Docker Compose Hallo Welt

Eine sehr einfache docker-compose.yml sieht so aus:

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

Diese Datei macht es so, dass es einen hello_world Dienst gibt, der vom ubuntu:latest image initialisiert wird und wenn er ausgeführt wird, nur das echo 'Hello world'

Wenn Sie sich im folder (und diese Datei enthält diese Datei docker-compose.yml ), können Sie docker-compose up docker-compose.yml docker-compose up und Sie sollten es sehen

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

Dadurch wurde der Container aus dem Ubuntu-Image erstellt und der Befehl ausgeführt, der in der docker-compose.yml

Docker-Compose verwendet den Ordnernamen als Projektnamen zum Präfix von Containern und Netzwerken. Um einen anderen Projektnamen docker-compose --project-name NAME {up|down|...} , können Sie entweder docker-compose --project-name NAME {up|down|...} aufrufen oder eine Datei namens .env neben Ihrer docker-compose.yml und COMPOSE_PROJECT_NAME=name es. Vermeiden Sie es, lange Projektnamen mit Bindestrichen (-) zu vermeiden, da Docker bahaves mit dieser Art von Namen seltsam bilden.

Hinweis: Mit Docker-Compose können Sie mehrere Docker-Container auf einem einzigen Host ausführen. Wenn Sie mehrere Container auf mehr als einem Knoten ausführen möchten, lesen Sie bitte die Lösung wie swarm / kubernetes.

Ruby on Rails mit Docker-Compose

Wenn Sie Docker für Schienen-App und Datenbank verwenden möchten, müssen Sie wissen, dass alle Daten im Docker-Container zerstört werden (es sei denn, Sie konfigurieren den Container speziell für das Speichern von Daten) eine Anwendung und hängt sie mit einer Datenbank an einen alten Container an.

Als Beispiel für die Schienenanwendung habe ich eine einfache App verwendet. Sie können es aus dem Befehl erstellen:

rails new compose-app --database=postgresql

Natürlich müssen Sie vorher Schienen, Rubin usw. installieren.

Dann erstellen Sie Dockerfile in Ihrem Projekt und legen Sie diese Daten fest:

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ächster Schritt - Erstellen Sie docker-compose.yml mit den Daten:

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

Sie können 80 Port (-p 80) durch einen anderen ersetzen.

Der Entwicklungsabschnitt von database.yml config muss geändert werden in:

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

Jetzt können Sie Bilder aus dem Befehl erstellen:

docker-compose build

(Führen Sie dies im Projektverzeichnis aus.)

Und fange alles an von:

docker-compose up

Wenn alles richtig gemacht wurde, können Sie Protokolle von Schienen in der Konsole sehen.

Konsole schließen. Es wird funktionieren.

Wenn Sie nur den Container mit der Schienenanwendung ohne Datenbank löschen möchten, müssen Sie das Projektverzeichnis ausführen:

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

Ein neuer Container mit Schienen-App wird erstellt und gestartet.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow