SlideShare une entreprise Scribd logo
1  sur  83
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 -
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
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
Docker for Windows
Verteilung
Entwicklung Container Technologie
Container Verwaltung
PowerShell etcDocker
etc…
Posh Docker
 Repository vorbereiten:
 Register-PSRepository -Name DockerPS-Dev -SourceLocation
https://ci.appveyor.com/nuget/docker-powershell-dev
 Modul installieren:
 Install-Module -Name Docker -Repository DockerPS-Dev
 Modul in die Konsole laden:
 Import-Module Docker
 Übersicht:
 Get-Command -Module Docker | Select-Object -Property noun -Unique |
Sort-Object noun
Docker CHECK
• Docker –version
• Get-Module -ListAvailable -Name Docker
• Docker system info
Server 2016 Container
• Install-Module -Name DockerMsftProvider
-Repository PSGallery –Force
• Install-Package -Name docker -ProviderName DockerMsftProvider
• Restart-Computer –force
• docker run microsoft/dotnet-samples:dotnetapp-nanoserver
Container
Powershell
AD App
Single Page App
WAMP
App
ASP MVC
Sharepoint
XAML
WPS
VM Cloud Dev Server Local Customer
zweiter Container
• Docker build -t service
D:DockerDockerImagesservice
• Docker container run -t service
• #Ausgabe des angemeldeten
#Benutzers in virtueller Konsole
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
Docker Images
Base Image (Disk)
Container (Memory)
Local Image
Dockerfile
Load
Commit
Run
Base Image (Disk)
New Image
Build
Docker Images
OS LAYER
Framework Layer
Application Layer
• Docker image = application package.
• Enthält Anwendung, Komponenten, Betriebssystem.
• Push / Pull Verfahren zur Bereitstellung
• Registry als Repository
Posh Docker Image zurücksetzen
 Get-Container
 Stop-Container –ContainerIdOrName
 Get-ContainerImage -ImageIdOrName sha256:f9f3e2056c | Remove-
ContainerImage –Force
 Get-ContainerImage
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
Container [Laufende Instanz eines Image]
Kapselung von Diensten / Anwendungen
Einheitliches Zugriffsverfahren
Skalierbar / Portierbar
Black Box
Cloud-Ready
Microservice ähnlich
Container
‚OS Level Isolation‘ Methode
Mehrere Apps pro System
Standardisiertes Verfahren
Kein ‚Overhead‘ – gemeinsamer Kernel mit Host
Sicherheit durch Isolation
Container [ISOLATION]
• docker run -d microsoft/windowsservercore ping localhost –t
• Docker ps #Ermitteln der ID
•
Container [ISOLATION]
• docker run -d --isolation=hyperv microsoft/nanoserver ping -t localhost
Get-Container #Ermittelt ID
• Auf dem Host kein PING Prozess !
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
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
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
Docker Store
• Registry für die kommerzielle Softwareverteilung
• App Store für serverseitige Anwendungen
• Vertrieb für kommerzielle Anwendungen
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
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
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)
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
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
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
DOCKERFILE: Apache
• # escape=`
• FROM microsoft/windowsservercore as Download
•
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';
$ProgressPreference = 'SilentlyContinue';"]
•
ENV APACHE_VERSION 2.4.29
•
RUN Invoke-WebRequest ('http://de.apachehaus.com/downloads/httpd-{0}-
o102n-x64-vc14-r2.zip' -f $env:APACHE_VERSION) -OutFile 'apache.zip' -
UseBasicParsing ; `
• Expand-Archive apache.zip -DestinationPath C: ; `
• Remove-Item -Path apache.zip
• …..
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
EIGENE APPS bereitstellen
• Variante A:
• Plattform tooling
• Nachteil:
• Großes Image
• Verbraucht darum mehr
Festplattenplatz
• App + Overhead
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
_______________________________!
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
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
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"]
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
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"]
}
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
Docker Client [Docker.exe]
OS Layer
Docker Engine
Docker Client [CLI, LifeCicle Mgmts für Container]
Bin.: ‚C:Program FilesDocker‘
Docker Commands [Run,etc]
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]
DockEr Client
 Hilfesystem
 Docker cmd –help
 Docker image --help
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
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
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
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
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
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
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
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
Docker Compose III
version: "2.1"
services:
webserver:
build: ./docker/webserver
image: runwaytest_web
ports:
- "80:80"
- "443:443"
• volumes:
• - E:Docker-
ProjekteLAMPwww:/var/www/html
• links:
• - db
• db:
• image: mysql:5.7
• ports: ["3306:3306"]
• volumes:
• - .db:/var/lib/mysql
• environment:
• - MYSQL_ROOT_PASSWORD=docker
• -
MYSQL_DATATABASE=db_runwayte
st
SWITCH!
Docker Compose
Docker Compose IV
• Container mit:
• Apache
• PHP
• MySQL
• [D:DockerDocker-
ProjekteLAMP]
Docker Network
Docker Network
• Netzwerk Informationen
• Docker network ls; Docker network inspect
• Netzwerk erstellen
• docker network create -d nat
--subnet=192.168.178.0/24
--gateway=192.168.178.1 Netzwerk_Name
• Netzwerkbindung aufheben
• Stop-container Container_Name
• Docker network disconnect nat Container_Name
• Container an Netzwerk binden
• Docker network connect Netzwerk_Name Container_Name
• Netzwerk löschen
• Docker network rm Netzwerk_Name [Nicht vordefinierte wie nat!]
Docker GUI Tools
• CLI Tools (Docker / PosH) Bandbreiten-schonend
• CLITools lassen sich in Automatisierungs-Skripte integrieren
• GUI Tools of instabil
• Kitematic
• Speisekarte für Docker
• Vorhandene Container starten / stoppen
• Im Hintergrund laufende Container konfigurieren [docker run -d ]
• Images laden
• Versucht GUI und Kommandozeile zu vereinen
Docker GUI Tools I
Docker GUI Tools I
Verwaltung existierender Container
portainer
• GUI als Container implementiert
• Dokumentation:
http://portainer.readthedocs.io/en/stable/deployment.html
• PS C:Windowssystem32> ./netsh advfirewall firewall add rule
name="Docker" dir=in action=allow
protocol=TCP localport=2375 enable=yes
profile=domain,private,public
#HOST kommuniziert über Port 2375 mit ‚Portainer‘
• Docker pull portainer/portainer
• #Lden von Portainer in den lokalen Cache
portainer
• C:ProgramDataDockerconfigdaemon.json:
• {
"registry-mirrors":[],"insecure-registries":[], "debug":true,
"experimental": false,
"hosts": ["tcp://0.0.0.0:2375","npipe://"]
}
• Kommunikation auf Port 2375 ermöglichen
portainer
• docker run -d --restart always --
name portainer
• -v
C:ProgramDataContainersPorta
iner:C:Data
• -p 9000:9000 portainer/portainer
IPadresse ermitteln:
Docker container exec portainer ipconfig
portainer
Docker machine
• Docker installieren / verteilen
• Bereitstellung und verwaltung mehrerer Remote-Hosts
• Erstellen eines SWARM Clusters
Docker Swarm Cluster
• Skalierung
• Orchestrierung
• Load Balancing
Docker SWARM I [WS]
• Basis Webserver Image [D:DockerDockerImagesSWARM-
WEBSERVER]:
• FROM microsoft/windowsservercore
• RUN powershell Invoke-webrequest
http://nginx.org/download/nginx-1.12.0.zip -UseBasicParsing -outfile
c:nginx.zip
• RUN powershell Expand-Archive c:nginx.zip -Dest c:nginx
• WORKDIR c:nginxnginx-1.12.0
• ENTRYPOINT powershell .nginx.exe
Docker SWARM II
• Test Container:
docker run -it -p 80:80 nginx
• Ip-Adresse ermitteln:
Docker exec 388f964ce3261c ipconfig
• IIS-Vorlagen-Image: [D:DockerDockerImagesSWARM-
WEBSERVER-IIS1]
• Docker build -t iis1 D:dockerDockerImagesSWARM-WEBSERVER-
IIS1
• docker run -it -p 80:80 iis1
Docker SWARM II
• Image aus Vorlage ableiten:
• Get-Container ab9fb2c7ec1b38e | stop-Container
• docker cp D:DockerDockerImagesSWARM-WEBSERVER-
IIS1index_new.html cdce48:C:inetpubwwwrootindex.html
• #Get-Container ab9fb2c7ec1b38e | start-Container
• Docker container stop ab9fb2c7ec1b3
• Docker commit ab9fb2c7ec1b3 web_1
• Get-ContainerImage
Docker SWARM III
• Nun die Wiederholung:
• PS C:Windowssystem32> docker cp D:DockerDockerImagesSWARM-
WEBSERVER-IIS1index_newer.html
ab9fb2c7ec1b38:C:inetpubwwwrootindex.html
• #Sollte Vorlagen-Container laufen – stoppen!
• Docker commit ab9fb2c7ec1b3 web_2
• Docker container stop ab9fb2c7ec1b3
• Get-ContainerImage
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
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!
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
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
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
Kubernetes
Container Dienste
Kubernetes
KubernetesKubernetes
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
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
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.
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]
Docker Sicherheit
Entwickler
Dockerfile
Sicherheitsbeauftragter
Dockerfile
Prüfung
System Administrator
Docker
Image
Build Local Docker
Repository
Deploy
Sichere
Infrastruktur
BackUP& Restore
 Docker save apache > D:DockerDockerfilesapache.tar
Docker load –input D:DockerDockerfilesapache.tar
Docker registry
Speicherdienst für Docker Images
Docker image pull
Docker image push
Verwendung des DOCKER HUB:
 Docker login --username thjaz
1. Umbenennen ID/name
2. Push <neues tag>
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
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
Code identification
 Vulnerability Scanning:
 Wurde aus Repository geladenes Container Image modifiziert?
 Docker Security Scanner
 Prüft Image aus privatem Repository

Contenu connexe

Tendances

Flexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeFlexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpike
os890
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
Steven Grzbielok
 
Aras PLM Installation
Aras PLM InstallationAras PLM Installation
Aras PLM Installation
Aras
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale Entwicklungsumgebung
Frank Schmittlein
 

Tendances (20)

Docker - Containervirtualisierung leichtgemacht
Docker - Containervirtualisierung leichtgemachtDocker - Containervirtualisierung leichtgemacht
Docker - Containervirtualisierung leichtgemacht
 
systemd & Docker
systemd & Dockersystemd & Docker
systemd & Docker
 
docker.io @ CentOS 7 - Secure And Portable Containers Made Easy
docker.io @ CentOS 7 - Secure And Portable Containers Made Easydocker.io @ CentOS 7 - Secure And Portable Containers Made Easy
docker.io @ CentOS 7 - Secure And Portable Containers Made Easy
 
Tipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerTipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit Docker
 
Dockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloudDockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloud
 
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
 
Flexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeFlexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpike
 
docker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easydocker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easy
 
Was ist Docker ?
Was ist Docker ?Was ist Docker ?
Was ist Docker ?
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
 
Build Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build ProzessBuild Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build Prozess
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker Container
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?
 
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
 
Aras PLM Installation
Aras PLM InstallationAras PLM Installation
Aras PLM Installation
 
Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale Entwicklungsumgebung
 
Jenkins Acceleration
Jenkins AccelerationJenkins Acceleration
Jenkins Acceleration
 
C++ Dependency Management 2.0
C++ Dependency Management 2.0C++ Dependency Management 2.0
C++ Dependency Management 2.0
 
Einstieg in das Windows Installer XML (WiX) ToolSet
Einstieg in das Windows Installer XML (WiX) ToolSetEinstieg in das Windows Installer XML (WiX) ToolSet
Einstieg in das Windows Installer XML (WiX) ToolSet
 

Similaire à Docker for Windows / Windows Container

Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfDockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Syahri Ramadhan
 

Similaire à Docker for Windows / Windows Container (20)

Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application VirtualizationDesktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
 
Oracle und Docker
Oracle und DockerOracle und Docker
Oracle und Docker
 
Was gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumWas gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-Universum
 
DOAG Webinar Oracle und Docker
DOAG Webinar Oracle und DockerDOAG Webinar Oracle und Docker
DOAG Webinar Oracle und Docker
 
Docker und IBM Bluemix
Docker und IBM BluemixDocker und IBM Bluemix
Docker und IBM Bluemix
 
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
 
Docker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DBDocker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DB
 
Wordpress im docker
Wordpress im dockerWordpress im docker
Wordpress im docker
 
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfDockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
 
Automatische Erstellung einer SharePoint 2013 Entwicklungsumgebung in Microso...
Automatische Erstellung einer SharePoint 2013 Entwicklungsumgebung in Microso...Automatische Erstellung einer SharePoint 2013 Entwicklungsumgebung in Microso...
Automatische Erstellung einer SharePoint 2013 Entwicklungsumgebung in Microso...
 
Umzug in die Cloud - flexible, dynamische Websites und Digital Marketing am B...
Umzug in die Cloud - flexible, dynamische Websites und Digital Marketing am B...Umzug in die Cloud - flexible, dynamische Websites und Digital Marketing am B...
Umzug in die Cloud - flexible, dynamische Websites und Digital Marketing am B...
 
Was ist Docker?
Was ist Docker?Was ist Docker?
Was ist Docker?
 
DevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCampDevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCamp
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
Webinar Windows auf AWS (Deutsch)
Webinar Windows auf AWS (Deutsch)Webinar Windows auf AWS (Deutsch)
Webinar Windows auf AWS (Deutsch)
 
Der Arbeitsalltag in einer containerisierten Umgebung
Der Arbeitsalltag in einer containerisierten UmgebungDer Arbeitsalltag in einer containerisierten Umgebung
Der Arbeitsalltag in einer containerisierten Umgebung
 
Ausrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerAusrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit Docker
 
Docker Hosting (Webinar vom 10. März 2016)
Docker Hosting (Webinar vom 10. März 2016)Docker Hosting (Webinar vom 10. März 2016)
Docker Hosting (Webinar vom 10. März 2016)
 
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
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
  • 4. Docker for Windows Verteilung Entwicklung Container Technologie Container Verwaltung PowerShell etcDocker etc…
  • 5. Posh Docker  Repository vorbereiten:  Register-PSRepository -Name DockerPS-Dev -SourceLocation https://ci.appveyor.com/nuget/docker-powershell-dev  Modul installieren:  Install-Module -Name Docker -Repository DockerPS-Dev  Modul in die Konsole laden:  Import-Module Docker  Übersicht:  Get-Command -Module Docker | Select-Object -Property noun -Unique | Sort-Object noun
  • 6. Docker CHECK • Docker –version • Get-Module -ListAvailable -Name Docker • Docker system info
  • 7. Server 2016 Container • Install-Module -Name DockerMsftProvider -Repository PSGallery –Force • Install-Package -Name docker -ProviderName DockerMsftProvider • Restart-Computer –force • docker run microsoft/dotnet-samples:dotnetapp-nanoserver
  • 8. Container Powershell AD App Single Page App WAMP App ASP MVC Sharepoint XAML WPS VM Cloud Dev Server Local Customer
  • 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
  • 12. Docker Images OS LAYER Framework Layer Application Layer • Docker image = application package. • Enthält Anwendung, Komponenten, Betriebssystem. • Push / Pull Verfahren zur Bereitstellung • Registry als Repository
  • 13. Posh Docker Image zurücksetzen  Get-Container  Stop-Container –ContainerIdOrName  Get-ContainerImage -ImageIdOrName sha256:f9f3e2056c | Remove- ContainerImage –Force  Get-ContainerImage
  • 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
  • 17. Container [ISOLATION] • docker run -d microsoft/windowsservercore ping localhost –t • Docker ps #Ermitteln der ID •
  • 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
  • 29. DOCKERFILE: Apache • # escape=` • FROM microsoft/windowsservercore as Download • SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] • ENV APACHE_VERSION 2.4.29 • RUN Invoke-WebRequest ('http://de.apachehaus.com/downloads/httpd-{0}- o102n-x64-vc14-r2.zip' -f $env:APACHE_VERSION) -OutFile 'apache.zip' - UseBasicParsing ; ` • Expand-Archive apache.zip -DestinationPath C: ; ` • Remove-Item -Path apache.zip • …..
  • 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
  • 31. EIGENE APPS bereitstellen • Variante A: • Plattform tooling • Nachteil: • Großes Image • Verbraucht darum mehr Festplattenplatz • App + Overhead
  • 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
  • 39. Docker Client [Docker.exe] OS Layer Docker Engine Docker Client [CLI, LifeCicle Mgmts für Container] Bin.: ‚C:Program FilesDocker‘ Docker Commands [Run,etc]
  • 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]
  • 41. DockEr Client  Hilfesystem  Docker cmd –help  Docker image --help
  • 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
  • 50. Docker Compose III version: "2.1" services: webserver: build: ./docker/webserver image: runwaytest_web ports: - "80:80" - "443:443" • volumes: • - E:Docker- ProjekteLAMPwww:/var/www/html • links: • - db • db: • image: mysql:5.7 • ports: ["3306:3306"] • volumes: • - .db:/var/lib/mysql • environment: • - MYSQL_ROOT_PASSWORD=docker • - MYSQL_DATATABASE=db_runwayte st SWITCH!
  • 52. Docker Compose IV • Container mit: • Apache • PHP • MySQL • [D:DockerDocker- ProjekteLAMP]
  • 54. Docker Network • Netzwerk Informationen • Docker network ls; Docker network inspect • Netzwerk erstellen • docker network create -d nat --subnet=192.168.178.0/24 --gateway=192.168.178.1 Netzwerk_Name • Netzwerkbindung aufheben • Stop-container Container_Name • Docker network disconnect nat Container_Name • Container an Netzwerk binden • Docker network connect Netzwerk_Name Container_Name • Netzwerk löschen • Docker network rm Netzwerk_Name [Nicht vordefinierte wie nat!]
  • 55. Docker GUI Tools • CLI Tools (Docker / PosH) Bandbreiten-schonend • CLITools lassen sich in Automatisierungs-Skripte integrieren • GUI Tools of instabil • Kitematic • Speisekarte für Docker • Vorhandene Container starten / stoppen • Im Hintergrund laufende Container konfigurieren [docker run -d ] • Images laden • Versucht GUI und Kommandozeile zu vereinen
  • 57. Docker GUI Tools I Verwaltung existierender Container
  • 58. portainer • GUI als Container implementiert • Dokumentation: http://portainer.readthedocs.io/en/stable/deployment.html • PS C:Windowssystem32> ./netsh advfirewall firewall add rule name="Docker" dir=in action=allow protocol=TCP localport=2375 enable=yes profile=domain,private,public #HOST kommuniziert über Port 2375 mit ‚Portainer‘ • Docker pull portainer/portainer • #Lden von Portainer in den lokalen Cache
  • 59. portainer • C:ProgramDataDockerconfigdaemon.json: • { "registry-mirrors":[],"insecure-registries":[], "debug":true, "experimental": false, "hosts": ["tcp://0.0.0.0:2375","npipe://"] } • Kommunikation auf Port 2375 ermöglichen
  • 60. portainer • docker run -d --restart always -- name portainer • -v C:ProgramDataContainersPorta iner:C:Data • -p 9000:9000 portainer/portainer IPadresse ermitteln: Docker container exec portainer ipconfig
  • 62. Docker machine • Docker installieren / verteilen • Bereitstellung und verwaltung mehrerer Remote-Hosts • Erstellen eines SWARM Clusters
  • 63. Docker Swarm Cluster • Skalierung • Orchestrierung • Load Balancing
  • 64. Docker SWARM I [WS] • Basis Webserver Image [D:DockerDockerImagesSWARM- WEBSERVER]: • FROM microsoft/windowsservercore • RUN powershell Invoke-webrequest http://nginx.org/download/nginx-1.12.0.zip -UseBasicParsing -outfile c:nginx.zip • RUN powershell Expand-Archive c:nginx.zip -Dest c:nginx • WORKDIR c:nginxnginx-1.12.0 • ENTRYPOINT powershell .nginx.exe
  • 65. Docker SWARM II • Test Container: docker run -it -p 80:80 nginx • Ip-Adresse ermitteln: Docker exec 388f964ce3261c ipconfig • IIS-Vorlagen-Image: [D:DockerDockerImagesSWARM- WEBSERVER-IIS1] • Docker build -t iis1 D:dockerDockerImagesSWARM-WEBSERVER- IIS1 • docker run -it -p 80:80 iis1
  • 66. Docker SWARM II • Image aus Vorlage ableiten: • Get-Container ab9fb2c7ec1b38e | stop-Container • docker cp D:DockerDockerImagesSWARM-WEBSERVER- IIS1index_new.html cdce48:C:inetpubwwwrootindex.html • #Get-Container ab9fb2c7ec1b38e | start-Container • Docker container stop ab9fb2c7ec1b3 • Docker commit ab9fb2c7ec1b3 web_1 • Get-ContainerImage
  • 67. Docker SWARM III • Nun die Wiederholung: • PS C:Windowssystem32> docker cp D:DockerDockerImagesSWARM- WEBSERVER-IIS1index_newer.html ab9fb2c7ec1b38:C:inetpubwwwrootindex.html • #Sollte Vorlagen-Container laufen – stoppen! • Docker commit ab9fb2c7ec1b3 web_2 • Docker container stop ab9fb2c7ec1b3 • Get-ContainerImage
  • 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]
  • 79. BackUP& Restore  Docker save apache > D:DockerDockerfilesapache.tar Docker load –input D:DockerDockerfilesapache.tar
  • 80. Docker registry Speicherdienst für Docker Images Docker image pull Docker image push Verwendung des DOCKER HUB:  Docker login --username thjaz 1. Umbenennen ID/name 2. Push <neues tag>
  • 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