Docker
Diese Seite beschäftigt sich mit Docker Containern zur Virtualisierung von Applikationen.
Allgemein
Docker Webseiten
Artikel und Infos
- siehe c't 11/14 S.46
- Docker - 10 Tipps für einen besseren Workflow
- Panamax vereinfacht Docker-Container-Verwaltung (pro-linux.de)
- Praxis siehe c't 17/14 S.146
- Report siehe LM 09/14 S.32
- Docker-Container am praktischen Beispiel von OwnCloud: siehe LM 09/14 S.56
- Datenbank und Webserver in getrennten Containern
- Docker Einführung und Panamax als GUI: siehe LU 12/14 S.78
- Docker mit Swarm: siehe iX 03/15 S.108
- Anwendungen mit Docker isolieren
- Docker Report: siehe iX 05/15 S.46
- Docker Container Einführung: siehe c't 05/16 S.108
- Docker Container einsetzen: siehe c't 05/16 S.112
Ökosystem
- Einführung in Test-driven Docker Development
- Container und das Docker-Ökosystem – Status quo (entwickler.de) zur Studie The State of Containers and the Docker Ecosystem 2015
Repository Server
- Docker Registry Frontend - Browse and modify your Docker registry in a browser.
- Siehe auch Docker Registry Frontend.
Sicherheit
- https://www.docker.com/resources/security/
- Gartner Studie Security Properties of Containers Managed by Docker
- VMware Report 2015
- http://www.pro-linux.de/news/1/22315/docker-erhoeht-die-sicherheit.html
- http://opensource.com/business/14/7/docker-security-selinux
- https://benchmarks.cisecurity.org/downloads/show-single/index.cfm?file=docker16.100 - PDF komplett
- https://d3oypxn00j2a10.cloudfront.net/assets/img/Docker%20Security/WP_Intro_to_container_security_03.20.2015.pdf - PDF Kurzfassung
- Script überprüft Docker-Sicherheit
- Docker Container sicher betreiben: siehe iX 05/15 S.54
Orchestrierung
Bei der Orchestrierung geht es um Skalierbarkeit und Automatisierung:
- Container massenweise auf beliebigen Hosts (automatisch) starten
- Container auf mehreren Hosts in ein "virtuelles" Netzwerk integrieren, mit dynamischer Vergabe von IP-Adressen und Ports (internes DNS und Service Discovery)
- Dienste und Anwendungen aus einer Vielzahl von Container in Clustern erstellen und steuern
- Mehrere Versionen einer Anwendung parallel laufen lassen mit schnellem Wechsel der Versionen
Siehe:
- Dockers Ökosystem: Kubernetes, etcd, Project Atomic, Open Stack, siehe LM 11/14 S.70
- Deis vereint Docker und Core OS: siehe LM 03/15 S.62
- Flocker: Verwaltung von Speicher-Ressourcen / Daten
- siehe LM 09/15 S.60
- Docker-Orchestrierung mit Kubernetes
- siehe LM 11/14 S.70
- siehe LM 05/15 S.70
- siehe iX 05/15 S.49
- Kubernetes & OpenShift E-Book
- siehe c't 05/16 S.116
- Compose, Machine, Swarm
- Deploy and Manage Any Cluster Manager with Docker Swarm (docker.com)
- siehe c't 05/16 S.116
Anwendungen
openSUSE
- https://news.opensuse.org/2014/08/07/official-docker-containers/
- http://www.pro-linux.de/news/1/21376/docker-container-fuer-opensuse-131-verfuegbar.html
Icinga
Training und Lernen
Betrieb
Hilfe
man docker man docker run docker --help docker run --help
Konfiguration
Images landen hier:
/var/lib/docker
Images
Handling von Images
Ein Image herunterladen:
docker pull debian
Vorhandene (lokale) Images auflisten:
docker images
Image (lokal) löschen (nur möglich, solange kein Container es nutzt):
docker rmi debian
Image pushen (zuerst "Rename" des Images in Non-Root-Pfad durch Taggen [1], dann einmalig Login [2]):
docker tag meinnginx2:latest formwandler/meinnginx2:latest docker login docker push <username>/meinnginx2
- Login-Daten landen in /root/.docker/config.json
Eigenes Image bauen
Beispiel 1: Apache auf Basis Debian
Das folgende Beispiel setzt ein Apache-Image mit einer statischen Webseite auf Basis eines Debian "Betriebssystem-Images" auf.
1. Verzeichnis für den Bau erstellen
mkdir -p /data/docker/newimage
2. Die statische Seite(n) erstellen, die dem Image hinzugefügt werden sollen
cd /data/docker/newimage vi index.html
3. Das Dockerfile anlegen
vi Dockerfile
FROM debian MAINTAINER Ralf Kruedewagen <docker@kruedewagen.de> RUN apt-get update && apt-get install -y apache2 ADD index.html /var/www/html/ EXPOSE 80 # Apache ENVs, sonst Fehlermeldung beim Start von Apache, siehe # https://github.com/paulczar/docker-apache2/blob/master/Dockerfile # http://tech.paulcz.net/2015/03/optimizing-your-dockerfiles/ ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_PID_FILE /var/run/apache2.pid ENV APACHE_RUN_DIR /var/run/apache2 ENV APACHE_LOCK_DIR /var/lock/apache2 ENV APACHE_LOG_DIR /var/log/apache2 ENV LANG C # Fehlermeldung mit APACHE_LOCK_DIR -> https://log.axcoto.com/article/164442852 RUN [ ! -d ${APACHE_RUN_DIR:-/var/run/apache2} ] && mkdir -p ${APACHE_RUN_DIR:-/var/run/apache2} RUN [ ! -d ${APACHE_LOCK_DIR:-/var/lock/apache2} ] && mkdir ${APACHE_LOCK_DIR:-/var/lock/apache2} && chown ${APACHE_RUN_USER:-www-data} ${APACHE_LOCK_DIR:-/var/lock/apache2} CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"] # alternativ: # ENTRYPOINT ["/usr/sbin/apache2"] # CMD ["-D", "FOREGROUND"]
4. Das Image bauen
docker build -t meinapache /data/docker/newimage/
5. Container anlegen und starten
docker run -d --name meinapachecontainer -p 8080:80 meinapache
Mehr Infos zu Apache und Docker:
- https://hub.docker.com/_/httpd/
- http://linoxide.com/linux-how-to/configure-apache-containers-docker-fedora-22/
- http://slopjong.de/2014/09/17/install-and-run-a-web-server-in-a-docker-container/
- http://stackoverflow.com/questions/27768194/how-to-use-docker-container-as-apache-server
- http://stackoverflow.com/questions/21280174/docker-centos-image-can-not-auto-start-httpd
Beispiel 2: Nginx auf Basis Debian
Genau so wie bei Apache mit einigen Änderungen im Dockerfile:
FROM debian MAINTAINER Ralf Kruedewagen <docker@kruedewagen.de> RUN apt-get update && apt-get install -y nginx ADD index.html /var/www/html/ EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
Images erstellen nach Änderungen im Container
Man kann Änderungen im Container in ein neues Image "committen". Dabei wird aus dem Basis-Image plus den Änderungen ein neues Image erstellt.
1. Basis-Image holen
2. Container darauf aufsetzen
3. Änderungen im Container vornehmen (z.B. im o.g. Beispiel die Webseite ändern)
4. Container ID feststellen
docker ps -l
5. Neues Images aus laufendem Container bauen:
docker commit <CONTAINER ID> <NEUES IMAGE> docker commit 05c85da33c4a meinnginx2 docker commit -m="Webseite angepasst + vim installiert" -a "Ralf Kruedewagen" 05c85da33c4a meinnginx2
6. Neues Image inspizieren
docker inspect meinnginx2
Image auf Docker Hub erstellen
- Git Repository (z.B. aus GitHub), das Dockerfile und weiteren Dateien enthält, in Docker Hub referenzieren
- Nach jedem Commit (Push) im Git Repo wird neues Images erstellt.
Weitere Steuerungsmöglichkeiten
- Script kann über Variablen das Verhalten der Container steuern
Dockerfile
Siehe:
Container
Anlegen und Starten
Container in einem Rutsch anlegen und starten (und auch Image herunterladen falls nötig):
docker run --name meindebian -it debian
- Wordpress mit MySQL
mkdir /data/mysqlcontainer docker run -d --name meinmysql -v /data/mysqlcontainer/:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=xxx mysql docker run -d --name meinwordpress --link meinmysql:mysql -p 8080:80 wordpress
- Parameter: "--link" erstellt die MySQL-Konfig im Wordpress Container gemäß Daten/Status des MySQL Containers (Interface, IP, Port) -> "Docker Networks" ersetzt "--link"
- "-v" reicht Verzeichnisse vom Host in den Container durch (kann auch im Dockerfile fest vorgegeben sein)
Container (nur) anlegen:
docker create --name=meindebian -it debian
- Parameter: i = interaktiv, t = terminal (nötig weil es ein Basis-Image mit "Bash" als Dienst ist)
Container starten:
docker start -ia meindebian
- Parameter: i = interaktiv, a = Ausgabeumlenkung / Konsole verbinden
- Exit aus Bash stoppt den Container
Container stoppen (mehrere Container können angegeben werden):
docker stop meindebian
Container löschen (Daten im Container gegen verloren, Image bleibt unberührt):
docker rm meindebian
Managen laufender Container
Laufende Container zeigen ("-a" zeigt auch nicht-laufende):
docker ps docker ps -a
Ausgaben auf Konsole anzeigen:
docker logs meindebian
Shell in laufendem Container starten:
docker exec -it meindebian bash
Etwas im Container installieren:
docker run meindebian apt-get install -y dovecot
Monitoring
- siehe LM 01/16 S.56
- https://github.com/newrelic/check_docker