Docker on OSX

DockerLogoRunning Docker on OSX can be made possible using different methods:

Docker containers require kernel features which are only available in modern Linux kernels. In order to run Docker on OSX for example, one needs a virtual machine with a smallish Linux running in it.

Docker for Mac Beta

Docker for Mac uses xhyve, a lightweight OS X virtualization solution built on top of Hypervisor.framework. This requires you to run OS X 10.10 Yosemite and higher. The VM is provisioned with Alpine Linux running Docker engine.
The Docker API is exposed in /var/run/docker.sock where the docker and docker-compose CLI commands may directly communicate with. This is one of the benefits compared to Docker machine, especially when you do not need to manage your docker VM, or set specific environment variables before running it. Docker for Mac is further installed as native OSX application and only provides symlinks to /usr/local/bin/{docker,docker-compose}.
After the app is installed, I only had to manually add the bash-completion provided by Homebrew.

cd /usr/local/etc/bash_completion.d
ln -s /Applications/Docker.app/Contents/Resources/etc/docker.bash-completion
ln -s /Applications/Docker.app/Contents/Resources/etc/docker-machine.bash-completion
ln -s /Applications/Docker.app/Contents/Resources/etc/docker-compose.bash-completion

I was granted a beta access key for Docker for Mac today 🙂 Even if this is still beta, it already feels much more integrated into my test and development workflow rather than using Docker machine. Awesome job! 🙂

 

Docker Machine

Docker machine will use Virtualbox as VM provider. In order to avoid manual interaction in each terminal I’m opening I’ve added an alias into my bashrc file.

vim $HOME/.bashrc
alias enable_docker=". '/Applications/Docker/Docker Quickstart Terminal.app/Contents/Resources/Scripts/start.sh'"

This script doesn’t do much except for starting the VM using the Virtualbox cli tools and then source the exported variables into your current shell environment. That way the docker client will be able to communicate with the docker daemon running inside the VM.

Parallels instead of Virtualbox

While Virtualbox works fine there are significant performance improvements when using Parallels on OSX. Furthermore it is reasonable to only use one application firing virtual machines (the Icinga Vagrant boxes also provide support for Parallels as Vagrant provider).
I was therefore looking for a native Parallels driver for Docker. Following this issue shed some light on the history of Docker drivers and their support as plugins. Parallels doesn’t seem to be officially supported by Docker themselves according to their documentation. Though there is an official driver plugin from Parallels themselves which works for Pro and Business subscriber editions only. The main reason seems to be the limited cli features in the Standard edition.

Requirements for Parallels

The main requirement is at least Docker 1.9.1 providing the Docker toolbox 0.5.1+.

Installation

I’m using Homebrew, the manual installation parts are described in the documentation. Brew tries to pull docker-machine as well – if you’re using the version from docker.com you can safely ignore the linking error.

brew install docker-machine-parallels

Create a docker machine

docker_machine_parallels_runUse the driver “parallels” and add the name “docker-parallels”. This will create a new Parallels VM with 20GB HDD and 1GB RAM by default. In case you want to disable sharing the /User mounts, add –parallels-no-share.

docker-machine create --driver=parallels docker-parallels

Add the environment variables to your shell and run docker pulling the latest Fedora container.

eval $(docker-machine env docker-parallels)
docker run -ti fedora:latest bash

Automate it

I’ve partially modified the Docker toolbox script in order to support Parallels.

wget https://raw.githubusercontent.com/dnsmichi/docker-tools/master/toolbox/scripts/osx/start.sh -O /usr/local/bin/enable_docker
chmod +x /usr/local/bin/enable_docker
enable_docker

 

Conclusion

While the Docker Machine integration allows room for improvement the Parallels driver works like a charm. Though I have to admit – while looking into the Parallels integration, Docker announced Docker for Mac and I was eagerly waiting for it.
Both methods are working, but the Docker for Mac application integrated natively into OSX is pretty slick. I like it a lot!
If you are looking for more Docker and its many possibilities – follow our blog closely and visit the Docker training sessions 🙂

Michael Friedrich
Michael Friedrich
Senior Developer

Michael ist seit vielen Jahren Icinga-Entwickler und hat sich Ende 2012 in das Abenteuer NETWAYS gewagt. Ein Umzug von Wien nach Nürnberg mit der Vorliebe, österreichische Köstlichkeiten zu importieren - so mancher Kollege verzweifelt an den süchtig machenden Dragee-Keksi und der Linzer Torte. Oder schlicht am österreichischen Dialekt der gerne mit Thomas im Büro intensiviert wird ("Jo eh."). Wenn sich Michael mal nicht in der Community helfend meldet, arbeitet er am nächsten LEGO-Projekt oder geniesst...

Host-only network with virtual CentOS 7 instances

There are a bunch of guides out there on how to create a virtualbox network to work with about every client distribution there is. This is another one, for CentOS 7. All you will need to do this is a text editor and a minimal CentOS 7 installation, no networkmanager, no ifconfig.
If you want your box to be able to connect to the internet you will first need to add a NAT adapter, which is the default so you probably won’t have to do anything.
Now to the hard part:

1. Create a Host-Only network

Create Host-Only network
You can ignore the ipv6 part. But you should use an ipv4 address and network mask that make sense. A /24 should do the job in most cases. Also make sure disable the DHCP Server

2. Add a Host-Only network adapter to your machine

add network

3. Configure the vbox network

The following commands are to be run from the box itself and assume a standard CentOS 7 installation.
First you need to know the name of your Host-Only interface.

# ip a 

The right interface is the one without an ipv4 address, in my case enp0s8.
Now you will need to create an ifcfg for that interface.

# vim /etc/sysconfig/network/scripts/ifcfg-enp0s8 
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR="192.168.24.10"
NETMASK="255.255.255.0"
NAME="enp0s8"
DEVICE="enp0s8"
ONBOOT="yes"

Now just restart the network service

# systemctl restart network.service 

To check whether everything worked check ip a and try to ping the new ip from the host machine.

Kleinere Images mit VirtualBox

Damit die Provisionierung unserer Schulungsnotebooks über Foreman zukünftig noch schneller wird habe ich mich vor Kurzem daran gemacht die Images für VirtualBox zu optimieren. Voraussetzung dafür war natürlich das die virtuellen Maschinen eine dynamische Speicherplatzbelegung benutzen und die Betriebssysteminstallationen so schlank wie möglich gehalten werden.
Sind die Grundvoraussetzungen erfüllt muss man (mal wieder) zwischen zwei Betriebssystemwelten unterscheiden. Bei Windows-Systemen ist vor dem nächsten Schritt nämlich noch etwas Vorarbeit zu leisten. Und zwar muss hier zuerst eine Defragmentierung durchgeführt werden. Dies lässt sich aber beispielsweise bereits mit Standardtools bewerkstelligen, die Windows von Haus aus mitbringt.
Jetzt befinden sich beide Betriebssysteme auf Gleichstand, daher können wir mit dem nächsten Schritt fortfahren. Dieser besteht darin nicht benötigten Speicherplatz freizugeben. Unter Windows geschieht das mit SDelete. Ist das Archiv herunter geladen und entpackt wird sdelete.exe auf der Kommandozeile wie folgt aufgerufen:

C:\PATH\TO\SDelete\sdelete.exe -z C:

Unter Linux gibt es dafür zerofree, das für die gängigsten Distributionen zur Verfügung stellt. Allerdings sieht der Aufruf natürlich entsprechend anders aus:

# zerofree /dev/sda1

Nachdem der freie Speicherplatz mit Nullen beschrieben wurde sollte die virtuelle Maschine herunter gefahren werden. Nun ist das Vorgehen für beide Betriebssystemwelten gleich, da wir ab jetzt auf Tools von VirtualBox zurückgreifen.
Im einfachsten Fall steht nur noch die eigentliche Verkleinerung der virtuellen Festplatte aus. Der Befehl dazu muss direkt auf dem Hostsystem aufgerufen werden:

# VBoxManage modifyhd --compact schulung-windows-disk1.vdi

Leider können nur VDI-Images “geshrinkt” werden, was eine vorherige Konvertierung bei VMDK-Images unumgänglich macht:

# VBoxManage clonehd schulung-windows-disk1.vmdk schulung-windows-disk1.vdi --format vdi

Die Konvertierung zurück nach VMDK ist dann entsprechend umgekehrt:

# VBoxManage clonehd schulung-windows-disk1.vdi schulung-windows-disk1.vmdk --format vmdk

Durch die geringere Belegung des Speicherplatzes werden unsere Schulungsnotebooks nun innerhalb kürzester Zeit installiert, sodass wir noch mehr Teilnehmer zu unseren interessanten Trainings begrüßen können 😉

Markus Waldmüller
Markus Waldmüller
Lead Senior Consultant

Markus war bereits mehrere Jahre als Sysadmin in Neumarkt i.d.OPf. und Regensburg tätig. Nach Technikerschule und Selbständigkeit ist er nun Anfang 2013 bei NETWAYS als Lead Senior Consultant gelandet. Wenn er nicht gerade die Welt bereist, ist der sportbegeisterte Neumarkter mit an Sicherheit grenzender Wahrscheinlichkeit auf dem Mountainbike oder am Baggersee zu finden.

Virtuelle Entwicklungsumgebungen mit Vagrant

Mit Vagrant beschreibt und erstellt man virtuelle Entwicklungsumgebungen, was Entwicklern das Leben deutlich vereinfacht. Es läuft unter Linux, Windows und Mac OS X. Wenige Handgriffe reichen, um eine virtuelle Maschine in Betrieb zu nehmen und einzurichten.
Die Umgebung wird über ein Vagrantfile konfiguriert, welches u.a. port forwarding, mounts, Netzwerkkonfiguration und automatische Installation von Software steuert. Letzteres ist über Shellskripte, Ansible, Chef oder Puppet möglich.
Vagrant kann out of the box mit VirtualBox verwendet werden. VMWare ist auch möglich, aber kostenpflichtig. Weitere provider wie lxc findet man auf github.
Warum Vagrant?
Hauptgrund ist die klar definierte Umgebung. Jeder arbeitet mit den exakt gleichen Bibliotheken und identischen Versionen von Software. Infrastrukturkomponenten müssen nicht lokal installiert werden und die Umgebung ist reproduzierbar.
Zum Weiterlesen empfehle ich die Anleitung für Einsteiger.

Eric Lippmann
Eric Lippmann
Lead Senior Developer

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er sich für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.

Weekly Snap: InGraph, Bonding on Ubuntu, FreeNAS 8 & OSDC 2013 CfP

weekly snap19 – 23 November presented our new look blog with tips on InGraph, bonding under Ubuntu and running Microsoft Cluster 2008 virtually, as well as calling out to interested speakers for our OSDC 2013.
Jannis contributed part 4 of the ultimate guide to InGraph by introducing the check_ingraph plugin that enables recent performance to be compared with past.
Meanwhile, Martin showed how to implement NIC bonding on Ubuntu 12.04.1 and Christoph gave us an illustrated guide to setting up Microsoft 2008 Cluster in Virtual Box with FreeNAS 8.
Lastly, Eva explained why James Bond is a good reason to submit a presentation idea to our OSDC 2013 Call for Papers before year’s end.

Microsoft 2008 Cluster in Virtualbox mit FreeNAS 8

Es kommt vor, das man in einem Unternehmen auf Microsoft’s Cluster Lösung trifft und diese überwachen möchte oder einrichten muss. Um das alles testen zu können, installiere ich mir solche Szenarios gerne erst einmal virtuell.
Das Problem, auf das man dabei trifft ist jedoch meistens ein fehlendes iSCSI Gerät. Ohne eins solches lässt sich Windows nicht überreden eine Clusterverbindung einzugehen. Eine einfache Lösung, die ich gefunden habe, besteht aus dem Einsatz von FreeNAS als Virtuelle Maschine. Dieses kann einem das fehlende Gerät bereitstellen.
Aber von Anfang an.
1.) Download der Ressourcen:
VirtualBox: Download
FreeNAS 8.x iso
Microsoft Windows Server 2008 R2 Evaluierungsversion (180 Tage) (Enterprise notwending für Cluster!)
2.) Voraussetzungen
4 Virtual Machines:

FreeNAS

Microsoft Domain Controller

2 Windows Cluster Nodes

3.) Einrichtung FreeNAS

freeNAS

Virtualbox Freenas Machine


Man Benötigt ein 2GB Volume fürs Betriebsystem und ein 10GB Volume für die iSCSI targets. Das Netzwerk habe ich auf intern gestellt. Es gibt bei mir noch eine virtuelle Maschine, die als Router fungiert. Darauf gehe ich hier aber nicht ein.
Sobald man die geführte Installation abgeschlossen hat, fügt man über das Web Front-End erst das 10GB Volume hinzu und konfiguriert dann iSCSI.
FreeNas Install Screenshot 1

FreeNas Install Screenshot 1


FreeNas Install Screenshot 2

FreeNas Install Screenshot 2


FreeNas Install Screenshot 3

FreeNas Install Screenshot 3


FreeNas Install Screenshot 4

FreeNas Install Screenshot 4


FreeNas Install Screenshot 5

FreeNas Install Screenshot 5


FreeNas Install Screenshot 6

FreeNas Install Screenshot 6

4.) Einrichtung Windows Domaincontroller.

Diesen Benötigt man für die Clusterdienste.

Erstellen Sie eine VM von ausreichender Größe und installieren einen Windows Domaincontroller. Hinweise wie so etwas funktioniert findet man z.B bei Microsoft aber letztendlich besteht es lediglich aus Server aufsetzen, durch-updaten und dcpromo eintippen.

5.) Einrichten der Clusternodes

Auf beiden Nodes führt man die gleichen Schritte aus

Hier muss man bei Installation darauf achten Windows 2008 Enterprise zu installieren und wieder allen Assistenten zu folgen. Anschließend führt man wieder alle Updates durch und  bindet die iSCSI devices mit Hilfe des iSCSI Initiatiors an (siehe Screenshot). Nun findet man diese in der Datenträgerverwaltung wieder.

Jetzt kann man das Feature “Failover Clustermanager” installieren und wieder den Asstistenten folgen. … und fertig ist die Clusterinstallation.

iscsi initiator

iscsi initiator Windows 2008 R2 Failovercluster


MS Cluster Node1 Vbox

MS Cluster Node1 Vbox

Christoph Niemann
Christoph Niemann
Senior Consultant

Christoph hat bei uns im Bereich Managed Service begonnen und sich dort intensiv mit dem internen Monitoring auseinandergesetzt. Seit 2011 ist er nun im Consulting aktiv und unterstützt unsere Kunden vor Ort bei größeren Monitoring-Projekten und PERL-Developer-Hells.

Weekly Snap: PuppetConf, Bacula-Web, EventDB & Check_Open_Problems Plugin

17-21 September covered all our usual topics, from sys admin and developer tips to monitoring tools and talks – with travels to North America thrown in.
As usual, Eva counted down 30 days to the OSMC 2012; this time with Ronny Trommer’s presentation on the status quo of OpenNMS.
Martin then recommended Bacula’s latest web GUI version 5.2.10 and Eric played with VirtualBox command line tools, opening guest applications from his host system.
While Bernd, Julian and Tom looked ahead to next week’s PuppetConf in San Franscisco, Vanessa already sent home happy snaps from her language course in Vancouver.
On the monitoring front, Markus introduced EventDB for event monitoring with Icinga and Thomas put together a new check_open_problems plugin, inspired by our customer Perdata. Both are available on our git.netways.org and Monitoring Exchange.

VirtualBox: Gast-Anwendung im Host starten

Mit den VirtualBox Kommandozeilen-Tools lassen sich Gast-Applikationen, vom Host-System aus, starten. Mit wenig Aufwand kann man so zum Beispiel den Internet Explorer nahtlos in einen Linux-Desktop integrieren. Vorraussetzung dafür ist, dass in der Windows-VM passwortgeschützte Anmeldung aktiviert ist und die Maschine im Seamless Mode (Tastenkombination HOST + L) abgespeichert wurde. In diesem werden nur gestartete Applikationen im Host-System angezeigt, nicht die komplette Maschine.
Den Zustand einer VM kann man auch über die Kommandzeile speichern:

# VBoxManage -q controlvm Windows.7 savestate

Gestartet wird die Maschine wieder mit folgendem Befehl:

# VBoxManage -q startvm Windows.7

Internet-Explorer ausführen:

# VBoxManage -q guestcontrol "Windows.7" execute \
--image "C:\Program Files\Internet Explorer\iexplore.exe" --username vbox --password vbox

Diese Zeilen verpackt in ein Skript, geben eine hervoragende Desktop-Verknüpfung zum Internet-Explorer ;-).

Eric Lippmann
Eric Lippmann
Lead Senior Developer

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er sich für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.

Weekly Snap: SNMP, VirtualBox & JavaScript Tips, New Icinga Training & Gude Hardware

18 – 22 July was jam-packed with tips on virtualisation, SNMP monitoring and JavaScript, announcements of new hardware products, new training course and celebration of a completed apprenticeship.
To begin, William shared two plugins for switch monitoring via SNMP and Philipp gave a quick tip on migrating from VirtualBox to VMware Fusion. Using the VBoxManage tool from VirtualBox, converting from its *.vdi file format to VMWare’s *.vmdk is a piece of cake. He also introduced our newest training course: “Icinga- Next Generation Monitoring”. From installation and configuration to useful addons and the nuances of the new web interface, the course offers best practice tips for each individual to apply to his own environment.
From the development team, Eric offered a handy tip to quicken the process of browsing large JavaScript arrays. Whereas most simple search algorithms browse through all an array’s elements, his binary search example halves the length of each search area with each step until the element is found. To note however, is the need for the field to be sorted.
Hardware man Martin then announced the arrival of Gude Expert Net Control to our store. Available either with a normal power supply (2101) or with PoE (2151), both meters feature two ports for sensors (RJ45) and a contact output which can be connected directly to the device in the event of an alert. Both include a web interface and are SNMP compatible. In addition, Gude offers two I/O controllers- 2100 (without PoE) and 2150 (with POE). Plugins developed in-house for Nagios and Icinga are also available at www.netways.org.
Finally Georg (aka Schorch) reflected on his successful graduation from sys admin apprentice to Systems Engineer. Alongside exams, he presented his final project, “Integration of a Backup Solution for a Client of NETWAYS GmbH”. This covered the selection and procurement of a system, its setup, installation of raid, the network and operating system as well as the implementation of a backup environment with Bacula inclusive of client integration and web interface. We congratulate him on his successful start to a career on board the NETWAYS team!

Migration von Virtual Box nach VMware Fusion


Vor ca. zwei Monaten erklärte Christoph Niemann wie man VMware Server Images nach Xen migrieren kann. Sein Einsatzgebiet im Blogpost war das Rechenzentrum. Virtualisierung spielt sich aber längst nicht mehr nur in Rechenzentren ab sondern ist auch stark auf dem Desktop PC / Notebook vertreten. Dank schnellen Prozessoren und großen Arbeitsspeicherkapazitäten ist es eine durchaus praktikable Lösung um Testumgebungen auf dem Arbeitsplatz- oder Heimrechner aufzubauen.
Die Qual steckt hier weniger in der Installation der Gastsysteme sondern mehr in der Wahl der Software. Die einen schwören auf die kostenlose Lösung VirtualBox aus dem Hause Oracle, andere nutzen das kostenpflichtige Parallels Desktop oder die Lösung des Platzhirsches – VMWare Fusion. Die Wahl des geeigneten Produktes sei an dieser Stelle jedem selbst überlassen.
In diesem Fall habe ich die Vorzüge von VMware Fusion erkannt, einige meiner Kollegen schwören hingegen auf VirtualBox o.a. Generell ist dies auch kein Problem, es sein denn man kommt an an den Austausch der Image Dateien dieser Guestsysteme. VMware Fusion mag nur *.vmdk als Dateiformat und VirtualBox nennt das ganze *.vdi oder neuerdings auch *.vbox. VirtualBox bringt von Haus aus das Tool ‘VBoxManage’ mit, welches das vorhandene *.vdi File in ein *.vmdk konvertiert

# VBoxManage clonehd virtualdisk.vdi virtualdisk.vmdk --format VMDK

Anschließend unter VMware eine neue virtuelle Maschine erstellen und die eben konvertierte Disk als Festplatte auswählen. Voilà – wir haben ein Gastsystem von VirtualBox nach VMware Fusion konvertiert. Den Weg zurück gibt es ein beim nächsten mal…