Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
Docker for Windows / Windows Container
1. Docker f. Windows
• Grundlagen
- Grundkonzepte von Container-Techniken
- Einführung in Docker
- Docker in Windows
- Windows Container
- Hyper-V Container
- Base Images Windows Server Core und Nano
Server
- Linux-Container mit Docker for Windows:
Moby, Alpine, LinuxKit
- Linux Container on Windows (LCOW)
- Windows Container on Windows (WCOW)
- Docker & Cloud
• # Installation
- Installation in Windows 10
- Installation in Windows Server -
2. Docker f. Windows
• # Werkzeuge
- Docker CLI (Kommandozeilenwerkzeuge für
Windows, insbes. docker.exe)
- PowerShell-Befehle für Windows
- VSCode-Werkzeuge für Docker
• # Praktische Arbeit mit Docker
- Docker Images laden von Docker Hub
- Speicherbedarf überwachen
- Container erstellen
- Container verwalten
- Dateiautausch zwischen Host und Container
- Netzwerkkonfiguration
- Fehlersuche
3. Docker f. Windows
• # Aufbauthemen
- Eigene Images erstellen
- Dockerfiles
- Docker Remote API
- Docker Orchestration
- Multi-Container Docker Applications mit
Docker Compose
- Docker in virtuellen Machinen
- Herausforderungen und Lösungen
- Tipps & Tricks
- Best Pactices
• # Docker im Einsatz
- SQL Server in Docker
- IIS-Webserver in Docker
- Docker für ASP.NET-Anwendungen
9. zweiter Container
• Docker build -t service
D:DockerDockerImagesservice
• Docker container run -t service
• #Ausgabe des angemeldeten
#Benutzers in virtueller Konsole
10. Docker for windows
• Container Typen
• Windows Server Container
• OS & alle Container teilen sich Kernel
• Isolation durch Prozessverwaltung und
Namensräume
• Windows Server Container mit Hyper-V
Isolation
• Sicherheit durch Isolation auf
Hardware Level
• Nested Virtualization
• Keine UI Integration
• Keine Client App
• Keine Verwendung von Winforms /
WPF
• Serverseitig: DB, Konsole, API
• Server 2016
• Kein Layer zwischen Host und
Container
• Docker EE in Lizenz enthalten
11. Docker Images
Base Image (Disk)
Container (Memory)
Local Image
Dockerfile
Load
Commit
Run
Base Image (Disk)
New Image
Build
14. SQL server
• docker run -d -p 1433:1433 -e sa_password=aspphpxml123 -e
ACCEPT_EULA=Y microsoft/mssql-server-windows-express
• Optial – Eigene DB verwenden über Enviroment:
docker run -d -p 1433:1433 -e sa_password=aspphpxml123
-e ACCEPT_EULA=Y
-v C:/temp/:C:/temp/ -e
attach_dbs=„[{'dbName':'SampleDb','dbFiles':['C:tempsampledb.
mdf','C:tempsampledb_log. ldf‘]}]“
microsoft/mssql-server-windows-express
15. Container [Laufende Instanz eines Image]
Kapselung von Diensten / Anwendungen
Einheitliches Zugriffsverfahren
Skalierbar / Portierbar
Black Box
Cloud-Ready
Microservice ähnlich
16. Container
‚OS Level Isolation‘ Methode
Mehrere Apps pro System
Standardisiertes Verfahren
Kein ‚Overhead‘ – gemeinsamer Kernel mit Host
Sicherheit durch Isolation
18. Container [ISOLATION]
• docker run -d --isolation=hyperv microsoft/nanoserver ping -t localhost
Get-Container #Ermittelt ID
• Auf dem Host kein PING Prozess !
19. Image TAG
• docker image build -t MyApp
• Build Befehl erzwingt keinen Tag
• Standard: MyApp:latest
• docker image tag myapp:1atest MyWebApps
• Jeder weitere ‚Docker image tag‘Befehl fügt einen Tag hinzu
• docker image tag myapp:1atest myapp:5.1
• Das Image selbst wird aber nicht dupliziert
• docker image tag myapp:1atest myapp:5.1.6
• Jedes Image im lokalem Cache kann getaggt werden, niht nur selbst
erstellte
• docker image tag myapp:6.0
• Zur Versionierung einsetzbar
20. Image PUSH
• Build + Tag verändern lokalen Image Cache des Docker Host
• Docker login -> Docker ID
• Docker image tag Local_Image_Source
ID/Destination_Name
• Docker push ID/Destination_Name
• Base Image wird nicht hochgeladen, nur die neuen Layer
21. Docker Cloud
• Plattform für Registry und Verwaltung von Docker Swarm
• Docker Swarm nutzt virtuellen Maschinen in AWS, Azure, DigitalOcean oder
anderen Cloud-Anbietern
• Docker Cloud dient zur Bereitstellung von Docker auf den VMs
• Konfigurieren von automatisierten Anwendungstests
• Die Registry in Docker Cloud bietet Sicherheits-Scans
• Docker kann Sicherheitsprobleme dem Betriebssystem melden
• Wird im Basis-Image oder abgeleiteten Images verwendet.
• Sicherheitsüberprüfung und Berechtigung auf Organisationsebene
22. Docker Store
• Registry für die kommerzielle Softwareverteilung
• App Store für serverseitige Anwendungen
• Vertrieb für kommerzielle Anwendungen
23. Docker Trusted registry
• DTR ist Teil der Docker BE Advanced-Suite
Container-as-a-Service (CaaS) -Plattform für Unternehmen
• Beinhaltet Management - Suite Universal Control Plane (UCP)
• Schnittstelle zur Verwaltung aller Ressourcen eines Docker-Cluster
• Host-Server, Bilder, Container, Netzwerke, Volumes und alles andere.
• Docker EE (Enterprise Edition) beinhaltet DTR
• basiert auf HTTPs
• Anbindung von LDAP möglich
24. DOCKERFILE
• Beschreibt Container:
• FROM microsoft/windowsservercore
• MAINTAINER tom@web-scripting.com
• RUN dism.exe /online /enable-feature /all
/featurename:iis-webserver /NoRestart
• #NUR eine CMD Anweisung pro Dockerfile!
• CMD powershell '<h1>HI Web
Scripter</h1>' | out-File
• "C:inetpubwwwrootindex.html" -append
-force
25. Container
Modi der Ausführung
Single Task
Standard-Anweisung im Image wird ausgeführt, dann beendet sich der Container automatisch:
Docker Container run service
Interactiv
Docker run --interactive --tty service powershell
Erstellt ein Pseudo Ausgabe Terminal
Rückkehr zum Host Prozess mittels “exit”
Background Job
Docker run --detach service powershell Test-Connection 127.0.0.1 -Count 22
Docker container ls (Listet den laufenden Container auf)
26. DOCKERFILE SYNTAX
Anweisung Bedeutung
CMD Befehlslayer
EXPOSE Port auf dem‘gehorcht‘ wird
FROM Referenziert Image, ist verpflichtend
ADD
COPY Kopieren aus Dockerfile-Root in das Image
WORKDIR Arbeitsverzeichnis, wenn nicht vorhanden wird es
erstellt
27. DOCKERFILE BUILD PROcess
1. FROM sucht IMAGE im LOCAL CACHE, wenn nicht existent ->
Download
2. DOCKER erstellt einen temporären INTERMEDIATE CONTAINER aus
dem BASE IMAGE und kopiert die Dateien der COPY Anweisung
3. Existieren Ausführungsanweisungen für den Start eines Containers
[CMD] werden diese implementiert
4. Ein neuer IMAGE LAYER wird erstellt, der INTERMEDIATE
CONTAINER gelöscht
5. DER LAYER wird GETAGGED und im LOCAL CACHE adressierbar
28. Dockerfile IIS Bereitstellung
Dockerfile bestimmt
Basisverzeichnis des Image
Und die Position der Unterordner /
Dateien
BUILD:
Docker build –t webserver D:images
START:
Docker container run –detach –port 8080:8000
--name iisruns webserver
TEST:
Get-Container ; Docker inspect ContainerName
30. EIGENE APPS bereitstellen
[D:DockerDockerImagesSimpleNet]
Variante A:
BASE IMAGE
BUILD TOOLS
COPY SOURCE CODE
WORKDIR -> Arbeitsverzeichnis
Wird im INTERMEDIATE CONTAINER erstellt
Gilt auch für Container
RUN führt Befehl im INTERMEDIATE CONTAINER
aus und speichert den geänderten Zustand als
Layer
32. Eigene APP
bereitstellen
Variante B:
Erst Anwendung kompilieren
Dann App paketieren
Image beinhaltet keinen Compiler
Die .NET Runtime ermöglicht die
Ausführung der Anwendung
Nachteil:
Komplette Umgebung muss
auf BUILD System vorhanden
sein
_______________________________!
33. STAGING BUILD
IMAGE wird in mehreren Phasen erstellt
Phase 1: Container mit allen benötigten Tools
Phase 2: Davon abgeleitet ein App Container
Vorteil: Portabel
Vorteil: Auf Zielsystem müssen nur Windows und Docker verfügbar
sein
34. STAGING BUILD
• Version 17.05 (Edge) :Multi-Stage-Build
• Mehrere Stages innerhalb eines Dockerfiles
• Projektdateien von einer Stage zur nächsten
• Abhängigkeiten zum Kompilieren werden der Laufzeit getrennt
35. STAGING BUILD
# Phase 1
FROM microsoft/dotnet:1.1-sdk-nanoserver AS builder
WORKDIR /src
COPY src/ .
RUN dotnet restore; dotnet publish
# Phase 2
FROM microsoft/dotnet:1.1-runtime-nanoserver
WORKDIR /dotnetapp
COPY --from=builder /src/bin/Debug/netcoreapp1.1/publish .
CMD ["dotnet", "HelloWorld.NetCore.dll"]
36. Container IMAGE ERSTELLEN
Nur auf Container mit dem Status
‚stopped‘ [EXITED] kann ‚commit‘
angewendet werden
Vorteil: Interaktiv, Befehle können Image modifizieren und permanentwerden
Nachteil: Nicht nachvollziehbar
v
v
37. Registry II
• Registry für nicht verschlüsselte Verbindungen konfigurieren:
• Lokalisieren des JSON ConfigFiles:
$JSONFile = $ENV:Programdata + "dockerconfigdaemon.json";
Test-Path $JSONFile;
• $ConfigContent = ConvertFrom-Json (get-Content $JSONFile);
$ConfigContent
{
{
"insecure—registries": [
"registry.local:5000"]
}
38. Dockerfile UEBUNG x1
1
Erstellen eines
Containers aus
EXE
2
Verarbeiten
von
bereitgestellte
n Dateien
3
Durchführung
einer
‚unattendend
installation‘
4
Starten der
Container-
Anwendung
durch
Anweisung
‚CMD‘
5
Prüfen des
Containers /
Ermitteln der
IP-Adresse
6
Test im
Browser
7
Vorlage:
XAMPP_STEP1
40. Docker Client [Docker.exe]
Docker images
Auflistung aller lokalen Images
Docker pull
Download eines Image aus einem Repository
Docker run
Erstellt einen Container aus einem Image und führt einen befehl darin aus
Jede Ausführung erstellt eine neue Instanz eines Image [Container]
42. Docker Client [Docker.exe]
• Docker build Pfad_zum_Dockerfile
• Dockerfile beschreibt Inhalt & Verhalten eines Containers
• Docker compose *.yml
• Zusammenführen mehrerer Container zu einem Dienst. Beispielsweise
Webserver und Datenbankserver zu einer Web-App
• Docker rmi
• Löscht ein lokales Image
43. DOCKER CLIENT [Beispiele]
docker ps -a --format '{{.Image}}‘
Ausgabe aller Container über die Eigenschaft des Image Namens
docker ps‘
Ausgabe aller laufenden Container
docker ps -a
Ausgabe aller Container (auch der gestoppten)
docker rm $(docker ps -a -q)
Löschen aller angehaltenen Container
docker ps --filter "status=running”
docker rm iis
Löschen eines Containers
44. DOCKER CLIENT [Beispiele]
docker ps -a --format '{{.Image}}‘
Ausgabe aller Container über die Eigenschaft des Image Namens
docker ps‘
Ausgabe aller laufenden Container
docker ps -a
Ausgabe aller Container (auch der gestoppten)
docker rm $(docker ps -a -q)
Löschen aller angehaltenen Container
docker rm iis
Löschen eines Containers
45. DOCKER CLIE + Posh [status]
Container terminiert mit Fehler:
Get-Container
Docker logs f85d431269ba74fa
Fehler: [“….” is not recognized as an internal or external command
Teil der ID
46. Docker Compose I
Werkzeug um verteilte Docker-Lösungen zu organisieren
Definition aller Komponenten einer Lösung
Konfiguration der Komponenten
Beziehung zwischen den Containern
Mittels einer Datei werden alle Anwendungscontainer als Einheit
verwaltet
47. Docker Compose I
Docker Compose-Dateiformat: YAML [Yet Another Multicolumn
Layout ]
Lesbare Auszeichnungssprache [ JSON ähnlich]
Dateispezifikation von Compose verwendet deskriptiv Attributnamen
Definiert Dienste, Netzwerke und Volumes
48. Docker Compose II
Zunächst jeden Container über ein Dockerfile beschreiben
Szenario über ‚docker-compose.yml‘
Docker-compose up -d (aus dem Projektverzeichnis)
Weitere Optionen:
Anwendung hochzufahren / herunterfahren
Ressourcen erstellen
Container starten oder zu stoppen
49. Docker Compose III
Attribut Anweisung
webserver:
Image: Image_Name
Lädt Image aus Cache / Registry
und startet Container
webserver:
Build: Relativer_Pfad_zum_Dockerfile
Erstellen eines Image
webserver:
image: runwaytest_web
ports:
- "80:80"
- "443:443"
Öffnet Port im Container Mapping: Host:Container
webserver:
image: runwaytest_web
volumes:
- E:Docker-ProjekteLAMPwww:/var/www/html
Mounted ein Verzeichnis vom Host zum Container
links:
- db
Adressierung eines Containers über Host-Name
environment:
- MYSQL_ROOT_PASSWORD=docker
Umgebungsvariable für Container setzen
68. Verteilung der Images
• Variante A: Wiederholung der Anpassungen des Vorlagen-Images auf
den ‚Nodes‘
• Variante B: Push auf Docker Hub / Pull von den Nodes
• Docker tag web_2 thjaz/web_2
• Docker push thjaz/web_2
69. Anlage des Managers / Worker
• docker swarm init --advertise-addr=<HOSTIPADDRESS>
--listen-addr <HOSTIPADDRESS>:2377
• docker swarm join --token <WORKERJOINTOKEN>
<MANAGERIPADDRESS>:2377
• Zur Sicherheit: Alle Am Schwarm beteiligte Container stoppen &
löschen!
70. Dienstanlage
• Vom Host ausgehend:
• docker service create --name=s1 --publish mode=host,target=80 --
endpoint-mode dnsrr web_1 powershell -command {echo sleep;
sleep 360000;}
• docker service create --name=s2 --publish mode=host,target=80 --
endpoint-mode dnsrr web_2 powershell -command {echo sleep;
sleep 360000;}
• docker service ls
71. Container in Cloud hosten
• Einschränkungen dieses Ansatzes
• Jeder Anbieter hat eigeneAPI
• Unterschiedlicher Dienstumfang muss analysiert warden
• Kombination unterschiedlicher anbieter schwierig
• Keine Portierbarkeit
• zwischen on-premises Ressourcen & Public Cloud
• Zwischen unterschiedlichen Public cloud
72. Kubernetes
• Kubernetes ist ein Open-Source-Container-Cluster-Manager
• ursprünglich von Google entwickelt, nun Cloud Native Computing
Foundation
• plant und implementiert Container auf einem Cluster von Maschinen
• Stellt sicher, dass eine bestimmte Anzahl von Instanzen einer
Anwendung ausgeführt wird
• bietet Zugriff auf persistenten Speicher
• Terminologie: Pod
• kleinste einsetzbare Recheneinheit
• besteht aus einem oder mehreren Containern, in einem gemeinsamen
Kontext
74. Pool of Workers
• Flexibeler Pool von Worker Pods,
• skalierbar nach Anforderung
• Replikations-Controller + horizontaler Pod-Auto-Scaler
• Skaliert die Anzahl der Pods, um eine CPU-Ziellast aufrechtzuerhalten
75. Azure Container Service (ACS)
• Kein selbständiges Werkzeug zur
Orchestrierung
• Nutzt existierende Open Source
Tools
• Apache Mesos
• Kubernetes
• Docker Swarm
• Keine Unterstützung von
Windows Nodes – Swarm aus
Linux Containern
• Verteilung von Containern über
Cloud
76. Docker in einer sicheren Umgebung
Docker erstellt für jeden Container eine Reihe von Namespaces und
Kontrollgruppen. Prozesse, die in einem Container ausgeführt
werden, können Prozesse, die in einem anderen Container oder im
Hostsystem ausgeführt werden, nicht beeinflussen.
Jeder Container verfügt über einen separaten Netzwerk-Stack. Wenn
das Host-System nicht so eingerichtet ist, Interaktionen zwischen den
Containern muss konfiguriert werden.
Die Verwendung von Linux-Kontrollgruppen stellt sicher, dass jeder
Container einen angemessenen Anteil an Speicher, CPU, Festplatten-E
/ A erhält.
77. Docker Sicherheitsüberlegungen
• Der Docker-Daemon / Engine benötigt immer Root-Rechte
• Docker ermöglicht es Benutzern, beim Ausführen / Starten eines
Containers Verzeichnisse vom Host auf dem Container zu mounten
• Die von Docker gebotene Isolierung ist nicht so robust wie die von
Hypervisoren für virtuelle Maschinen festgelegte Trennung. Docker
Container haben bisher keine Hardwareisolierung [bis auf Windows
Hyper-V Container]
81. Eigene registry
• Basis: ‘Docker's registry server’
• ‘Open Source Anwendung`
• GitHub: clocker/ distribution Repository
• Vorbereitung: Go SDK installieren
• Befehl um Anwendung zu kompilieren:
• go get github.com/docker/distribution/cmd/registry
• Einfacher:
• Container als Registry App
82. Eigene registry I
• Basis: ‘Docker's registry server’
• ‘Open Source Anwendung`
• GitHub: clocker/ distribution Repository
• Vorbereitung: Go SDK installieren
• Befehl um Anwendung zu kompilieren:
• go get github.com/docker/distribution/cmd/registry
• Einfacher:
• Container als Registry App
83. Code identification
Vulnerability Scanning:
Wurde aus Repository geladenes Container Image modifiziert?
Docker Security Scanner
Prüft Image aus privatem Repository