Ich habe es schon einmal gesagt und sage es wieder: Wir leben in grossartigen Zeiten. Die heutige Technologie und die daraus resultierenden Tools machen es einfacher als je zuvor, Software der Welt zur Verfuegung zu stellen.
Docker selbst ist schon cool genug, aber Docker Compose und Docker Machine machen es noch besser. Was ich am meisten liebe, ist die Einfachheit beider Tools - eine Einfachheit, die grossartige Dinge ermoeglicht.
Infrastructure as Code gefaellig? Bitte sehr…
In diesem Beitrag werde ich einen sehr einfachen Deployment-Prozess mit Docker Compose definieren.
Einrichtung der Umgebung
Zuerst muessen wir alles installieren: Docker, Docker Machine und Docker Compose
curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
chmod +x /usr/local/bin/docker
docker -v
curl -L https://github.com/docker/machine/releases/download/v0.2.0/docker-machine_darwin-amd64 > /usr/local/bin/docker-machine
chmod +x /usr/local/bin/docker-machine
docker-machine -v
curl -L https://github.com/docker/compose/releases/download/1.2.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v
Wir sind bereit, unseren Docker-Host mit Docker Machine zu erstellen:
docker-machine create --driver virtualbox local-blog-host
Schliesslich muessen wir Docker mitteilen, unseren neuen Host zu verwenden:
eval "$(docker-machine env local-blog-host)"
Hochfahren
Unser Deployment besteht aus mehreren Schritten:
- Ein Jekyll-Repository von GitHub herunterladen.
- Das HTML aus dem Quell-Markdown erstellen.
- Das HTML im Volume unseres Nginx-Containers speichern.
- Das HTML mit Nginx bereitstellen.
Zuerst fuegen wir eine docker-compose.yml hinzu, in der wir unsere Services spezifizieren:
{% gist 0be78ee97c9d05f7ccae docker-compose.yml %}
Wir verwenden auch das Dockerfile vom letzten Mal wieder:
{% gist 0be78ee97c9d05f7ccae Dockerfile %}
Wir erstellen die Container und starten sie mit folgendem Befehl:
docker-compose up -d
Teste es jetzt unter localhost:8080 in deinem Browser.
Nehmen wir an, jemand hat die Markdown-Dateien unseres Jekyll-Blogs geaendert und wir muessen alles aktualisieren.
docker-compose build --no-cache jekyllbuild
docker-compose run jekyllbuild
Pruefe localhost:8080, um zu verifizieren, dass es funktioniert hat.
Fazit
Das ist alles? Ja! Was kommt als Naechstes?
Dies ist nur ein sehr grundlegendes Beispiel fuer das, was moeglich ist. Es sollte veranschaulichen, dass wir Docker auch zum Kapseln von Build-Schritten verwenden koennen. Wie immer gibt es viel Raum fuer Optimierung je nach spezifischen Nutzungsszenarien.
Wir koennen dieses Beispiel auch verwenden, um unseren Deployment-Prozess zu erweitern und eine Cloud-basierte Loesung zum Erstellen und Bereitstellen des Blogs zu verwenden.
Fertig fuer heute!