docker-compose Tutorial
Erste Schritte mit Docker-Compose
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.
- Definieren Sie die Umgebung Ihrer App mit einer
Dockerfile
damit Sie sie überall wiedergeben können. - 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. - 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:
undredis:
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 startetdepends_on
-compose zuerst denredis
Container und dann den Webcontainer. Trotzdem wartetdocker-compose
nicht, bis derredis
Container fertig ist, bevor er denweb
Container startet. Um dies zu erreichen, müssen Sie ein Skript verwenden, das den Start des Anwendungsservers oder eines anderen Befehls verzögert, bis derredis
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
Wenn Sie eine Fehlermeldung mit
Permission denied
, führen Siesudo -i
vor den beiden folgenden Befehlen aus undsudo -i
.
- 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 Version1.7.1
. Testen Sie die Version von https://github.com/docker/compose/releases
- Wenden Sie ausführbare Berechtigungen für die Binärdatei an.
chmod +x /usr/local/bin/docker-compose
- 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.