© Enkel/Shutterstock.com
Docker-Einsatz im Enterprise-Umfeld leicht gemacht

Keep Docker simple, stupid!


Docker hat sich in der IT-Landschaft etabliert und wird nicht nur in Start-ups eingesetzt, sondern auch im Enterprise-Umfeld, wo Restriktionen bezüglich Security und anderer Themen der Softwareentwicklung und des Betriebs viel stärker ausgeprägt sind. Oft beeinflussen diese Restriktionen die Entscheidung für oder gegen ein Tool. Vielleicht wird Docker dort nicht sofort in Produktion eingesetzt, aber möglicherweise kann es trotzdem die Softwareentwicklung unterstützen, etwa wenn die Entwickler sich mit Hilfe von Docker lokale Testumgebungen aufbauen oder wenn Docker für ihre Integrationstests benutzt wird. Was macht den Einsatz von Docker im Enterprise-Umfeld zu einer Herausforderung?

Viele Restriktionen und Anforderungen sowie Software und Tools hängen stark von den betreuten Kunden oder etwa den speziellen rechtlichen Anforderungen einer Domäne ab. Daher muss ich mich in diesem Artikel auf eine Auswahl von häufig anzutreffenden Herausforderungen beschränken und darauf, wie diese bewältigt werden können: Meist hängt die Entwicklung im Enterprise-Umfeld hinter einem im besten Fall transparenten Firmen-Proxy. Wenn nicht, muss jedes Werkzeug mit den Proxy-Einstellungen der Firma konfiguriert werden. Oft existieren mehrere Entwicklungsabteilungen, daher werden gerne Werkzeuge zentral verwaltet oder auch Docker Images zwischen den Abteilungen geteilt. Weitere Herausforderungen entstehen, wenn bestimmte Docker Images nicht benutzt werden dürfen und das auch durchgesetzt werden muss. Die erlaubten Docker Images müssen dann regelmäßig nach Schwachstellen gescannt werden, etwa anhand der CVE-Liste. Wie können Entwickler mit diesen Herausforderungen am besten umgehen?

Docker-Einsatz hinter einem Proxy

Die einfachste Variante, Docker hinter einem Proxy zu benutzen, ist es, in jedem Docker Daemon und jedem Docker Client die Proxy-Einstellungen zu hinterlegen. Warum an zwei Stellen? Die Proxy-Einstellungen beim Docker Daemon werden benötigt, um Docker Images von Docker Hub oder von anderen Docker Registries herunterzuladen. Im Docker Client wird die Proxy-Konfiguration benötigt, damit die Proxy-Einstellungen automatisch beim Starten des Containers in ihm gesetzt werden.

Proxy-Konfiguration des Docker Daemon

Der Docker Daemon wird meist via systemd kontrolliert. Daher muss die Proxy-Konfiguration in der systemd-Service-Datei von Docker (zum Beispiel: /etc/systemd/system/docker.service.d/http-proxy.conf) gesetzt werden [1]. Die Proxy-Einstellungen werden für die Protokolle HTTP, HTTPS über die Umgebungsvariable HTTP_PROXY, HTTPS_PROXY, NO_PROXY gesetzt. Bei NO_PROXY trägt die Entwicklerin Hostnamen und IP-Adressen ein, die nicht über den Proxy angesprochen werden sollen:

[Service] Environment="HTTP_PROXY=http://proxy.example.com:80" Environment="HTTPS_PROXY=https://proxy.example.com:443" Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"

Danach muss die Entwicklerin den Docker Daemon Service neu starten. Das geht mit den folgenden Befehlen:

sudo systemctl daemon-reload sudo systemctl restart docker

Proxy-Konfiguration des Docker Clients

Um die Proxy-Einstellungen des Docker Clients [2] automatisch in die vom Client gestarteten Container zu übertragen, wird eine Konfigurationsdatei unter ~/.docker/config.json im Home-Verzeichnis des Benutzers erstellt, der später via Docker Client die Container startet. In dieser Konfigurationsdatei werden die Proxy-Einstellungen für die Protokolle HTTP, HTTPS und FTP eingetragen, sowie die Hostnamen und IP-Adressen, die nicht über den Proxy angesprochen werden sollen (Listing 1).

Listing 1: Proxy-Konfiguration im Docker Client

{ "proxies": { "default": { "httpProxy": "http://127.0.0.1:3001", "httpsProxy": "http://127.0.0.1:3001", "noProxy": "*.test.example.com,.example2.com" } } }

Die Docker Images direkt aus einer externen Docker Registry zu laden, hat mehrere Nachteile. Es ist zum Beispiel intransparent, welche Docker Images die Entwickler von Docker Hub oder einer anderen externen Docker Registry beziehen. Alle Docker Daemons müssen außerdem eine Verbindung ins Internet aufbauen können, auch wenn sie dieselben Docker Images herunterladen wollen. Was ist, wenn einige Docker Daemons auf Maschinen laufen, die nicht direkt mit dem Internet kommunizieren dürfen? Was, wenn der Internetzugang ausfällt oder der Docker Hub nicht erreichbar ist? Um sich gegen diese möglichen Komplikationen abzusichern, konfigurieren die Entwickler eine sogenannte Mirror Registry im lokalen Netzwerk.

Mirror Registry

Eine Mirror Registry (Abb. 1) spiegelt eine externe Docker Registry im lokalen Netzwerk [3]. Die Docker Daemons laden s...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang