Docker DevOps Continuous Delivery

Docker im DevOps und Continuous Delivery Umfeld wird ein zunehmend wichtiger Bestandteil. Docker ist eine Virtualisierungslösung, die ohne Hypervisor auskommt, es wird Operating-system-level Virtualization mit Linux-Containern verwendet. Im Backend verlässt Docker sich ausschließlich auf LXC. Diese Container sind unabhängig voneinander, aber verwenden Teile des Linux-Kernels als Abstraktion gemeinsam. Dadurch ist die Effizienz wesentlich höher als bei anderen Virtualisierungslösungen.

Auf Operating-system-level Virtualization basierende Lösungen sind die bekanntesten Vertreter dieser Technik die Linux-Container. Dabei ist Docker weit verbreitet. Docker konkurriert mit dem auf App Container (appc) basierendem Rocket (rkt). Die Open Container Initiative (OCI) strebt eine Vereinheitlichung und gemeinsame Standards für Container-Formate und Container-Laufzeitumgebungen an.

Das Docker Prinzip

Nicht wie Hypervisoren zur Virtualisierung bietet Docker keine vollständige Virtualisierung von virtuellen Maschinen, vielmehr handelt es sich um Linux-Container (LXC oder Libcontainer, und chroot, Namespaces, Cgroups). Diese Container sind unabhängig voneinander, aber verwenden Teile des Linux-Kernels gemeinsam. Dadurch ist die Effizienz wesentlich höher als bei anderen Virtualisierungslösungen. Auf einer Hardware können wesentlich mehr Docker-Container betrieben werden als VMs.

Diagramm: Virtual Machines und Containers

Als Hypervisor basierte Lösung war Docker bis April 2016 auf Linux Host Systeme angewiesen. Auf Windows und Mac OS X konnte es nur mit einem zusätzlichen Linux-Layer installiert werden, beispielsweise über Docker Toolbox (beinhaltet Boot2Docker und Oracle VirtualBox). Ähnliches gilt für das Gast-Betriebssystem wo nur Linux möglich ist. Der Gast verwendet den Linux-Kernel des Host Systems.

Seit April 2016 gibt es Beta-Versionen von Docker for Mac and Docker for Windows, die als native Anwendungen laufen und ohne VirtualBox auskommen. Die Docker-Engine läuft unter einem Alpine-Linux auf einer virtuellen Maschine (Hyper-V bei Windows und xhyve in OS X).

Die Docker Machine

Die Boot2docker Machine unter Windows 10 wird als Virtuelle Linux Machine in VirtualBox ausgeführt. DevOps die beim deployen mit ESXi Hypervisoren arbeiten, benutzen oft die VMware Workstation, diese performanter ist als die VirtualBox, bevor die VMware Workstation aber genutzt werden kann, wird der Treiber von pecigonzalo benötigt, die Treiberdatei Docker Machine VMware Workstation Driver wird in das Programm Verzeichnis, Docker Toolbox kopiert.

  Docker Machine VMware Workstation Driver

Dieses Plugin für Docker Machine erstellt Docker-Hosts lokal auf einer VMware Workstation.

Abbildung: boot2docker shell

Docker – Up and Running: von Karl Matthias bei O’REILLY

 

Wake On LAN

Wake on LAN mit Linux, Windows und Synology

Entfernte Geräte starten mit Wake on LAN (WOL), ein 1995 von AMD in Zusammenarbeit mit HPE veröffentlichter Standard, um ausgeschaltete Computer über die Netzwerkkarte zu starten, diese ACPI unterstützen. Allgemeine Voraussetzung für WOL ist, dass die Netzwerkkarte über den Standby-Strom des Netzteils weiterhin mit Strom versorgt wird, auch wenn der Computer ausgeschaltet ist.

Die Netzwerkkarte wartet auf ein so genanntes Magic Packet, bei dessen Empfang der Computer eingeschaltet wird. Das Datenpaket ist entweder direkt an die Netzwerkkarte adressiert oder wird als Broadcast verschickt. Es enthält sechsmal in Folge den hexadezimalen Wert FF; unmittelbar danach erscheint die ununterbrochene 16-malige Wiederholung der MAC-Adresse der Netzwerkkarte des jeweiligen Zielsystems.

Wake on LAN unter Linux

Unter GNU/Linux gibt es das Tool „wakeonlan“, welches falls nicht schon installiert, wie folgt bereitgestellt wird.

$ sudo apt install etherwake

Der Linux Befehl um ein Computer mit WOL zu starten ist wakeonlan.

$ wakeonlan -i 10.10.10.1 00:11:22:33:44:55
Sending magic packet to 10.10.10.1 with 00:11:22:33:44:55

Ubuntu und Debian sendet ein Magic Packet mit wakeonlan zur MAC-Adresse eines Gerätes um es einzuschalten.

$ wakeonlan 00:00:33:44:55:66
Sending magic packet to 255.255.255.255:9 with 00:22:33:44:55:66

Hilfe zu Optionen erhält man mit dem Befehl: etherwake -u

Fedora wiederum weckt mit ether-wake, auch CentOS und RHEL.

$ sudo ether-wake -i eno1 00:11:22:33:44:55

quote mit-i eno1ist hier das Ethernet Interface gemeint.

Die MAC-Adresse erhält man mit dem Befehlarpwie folgt.

$ ping -c 4 10.10.10.1 && arp -n

Wake on LAN mit Synology

Synology DSM hat mit synonet in der Busybox Shell sein eigenes Tool.

$ synonet --wake xx:xx:xx:xx:xx ethX

WON für Windows

Microsoft Windows hat kein WOL Onboard, ein zuverlässiges WOL bietet hier WakeMeOnLan von Nirsoft.

Microsoft Windows hat kein WOL Onboard, ein zuverlässiges WOL bietet hier WakeMeOnLan von Nirsoft.
WakeMeOnLan von Nirsoft.

WOL in macOS

Da auch macOS standardmäßig mit Python kommt, kann man sich eines Scripts behelfen, die folgenden Zeilen ermöglicht ein WON auf dem Mac.

#!/usr/bin/env python

import socket
import sys

if len(sys.argv) < 3:
    print "Usage: wake.py <IP> <MAC>   (example: 192.168.1.255 00:11:22:33:44:55)"
    sys.exit(1)

mac = sys.argv[2]
data = ''.join(['FF' * 6, mac.replace(':', '') * 16])
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.sendto(data.decode("hex"), (sys.argv[1], 9))

Den Script speichern und aus dem macOS Terminal ausführen.

$ python wake.py 192.168.1.255 00:11:22:33:44:55