
# LINKS
# https://github.com/wsargent/docker-cheat-sheet

# Infos
docker --version
docker system df
docker info
docker system info

# Aufräumen
docker system prune
#This will remove:
#- all stopped containers
#- all volumes not used by at least one container
#- all networks not used by at least one container
#- all dangling images#

#Diagnose
docker events # in eigenem Prozess

return

restart-service docker

# Docker hub
docker pull microsoft/sample-dotnet

# Private Registry
docker pull server123:5000/sample-dotnet

# Details
docker inspect microsoft/sample-dotnet 

#herunterladen und starten
docker run microsoft/sample-dotnet 
docker run -it microsoft/sample-dotnet  powershell # geht nicht
docker run -it --entrypoint=powershell  microsoft/sample-dotnet #geht


# Images auflisten
docker images 

# Container auflisten
docker ps -a


# Hello World-Container von Docker https://hub.docker.com/_/hello-world/
docker run hello-world # geht nicht. Linux-Container.
docker run hello-world:nanoserver
docker inspect hello-world:nanoserver
# Start mit PowerShell-Konsole

# Startanwendung ändern
docker run hello-world:nanoserver powershell dir c:\ # Container endet nach Befehl
docker run -it hello-world:nanoserver powershell # Container bleibt interaktiv
docker run -it --entrypoint=powershell hello-world:nanoserver # alternativ

# Start mit 300 MB und max 50% CPU
docker run -it -m 300M --cpu-quota 5000 hello-world:nanoserver powershell
docker run -it -m 300M --name MeinWebserver1 --cpu-quota 5000 microsoft/iis 

# Container 2x starten
# Container das erste Mal starten
docker run --name helloworld hello-world:nanoserver
# Zustand des Containers anzeigen
docker ps -a -f "name=helloworld"
# Alel Details zum Container anzeigen
docker inspect helloworld
# Container noch mal starten
docker start -a helloworld

# Container im Hintergrund mit Portmapping
docker run -d -p 8123:80 microsoft/iis cmd

# Container im Hintergrund ohne Portmapping
docker run -d microsoft/iis cmd

# Container im Hintergrund mit Name 
docker run -d --name MeinWebserver1 microsoft/iis cmd  

# Container im Hintergrund mit Netzwerk "transparent"
docker network create -d transparent  LAN2
docker run -d --network LAN2 --name MeinWebserver2b microsoft/iis   

# Container im Hintergrund mit fixer IP
docker network create -d transparent --subnet 192.168.1.0/24 --gateway 192.168.1.253 LANFixedIP
docker run -d --network LANFixedIP --name MeinWebserver3 --ip 192.168.1.151  microsoft/iis cmd  

# Container als Hyper-V-Container
docker run -d --name MeinWebserver1 microsoft/iis cmd  
docker run -d --name MeinWebserver2 --isolation=hyperv microsoft/iis cmd  

# ping
Get-Process p*
Get-Process vmwp
docker run -d microsoft/windowsservercore ping web.de -t
Get-Process p* # Windows Server: neuer Ping-Process sichtbar
Get-Process vmwp
docker run -d --isolation=hyperv microsoft/windowsservercore ping -t localhost
Get-Process p*

ping 192.168.1.151

# CMD in Container öffnen (geht nicht in ISE!!!)
docker exec -i -t 3c713775b991 cmd 

# PowerShell in Container öffnen (geht nicht in ISE!!!)
docker exec -i -t 3c713775b991 powershell 

docker exec -i -t MeinWebserver3 powershell

# start container im Zustand exited
docker start MeinWebserver5

# Geschichte des Image
docker inspect microsoft/iis
docker history microsoft/iis

# Netzwerk
docker network ls
docker network inspect LAN
docker network inspect nat
docker network inspect None
docker network inspect LANFixedIP

Get-ContainerNetwork

Get-NetNatStaticMapping
Get-NetNatStaticMapping | ? ExternalPort -eq 8123 | Remove-NetNatStaticMapping

# Kopieren
docker cp foo.txt mycontainer:/foo.txt
docker cp mycontainer:/foo.txt foo.txt

# Alle container anhalten
Get-Container | where state -eq running | Stop-Container

# Alle container löschen
Get-Container | Remove-Container -force
Get-Container

# oder
docker stop $(docker ps -a -q)
docker rm $(docker ps -q -f status=exited)
docker rm $(docker ps -a -q)

# Alle Images löschen
docker rmi $(docker images -q)

# Image erstellen
cd C:\inetpub\wwwroot
del *.*
"<html><h2>Hallo Welt 2!</h2></html>" | set-content "default.htm"
docker stop MeinWebserver3
docker commit MeinWebserver3 meinwebserverimage_NanoServer_IIS
docker commit itvisions_hello itvisions/testpublic:hello_v1

Commit-Container -Container MeinWeberserver3 -

Stop-Container MeinWebserver3
get-container MeinWebserver3 | ConvertTo-ContainerImage -Repository meinwebserverimage_nanoserver_iis
Get-ContainerImage 

docker run -d --name MeinWebserver4  meinwebserverimage_nanoserver_iis 
docker history meinwebserverimage_nanoserver_iis

Stop-Container MeinWebserver4
get-container MeinWebserver4 | ConvertTo-ContainerImage -Repository meinwebserverimage_nanoserver_iis2
docker run -d --name MeinWebserver5  meinwebserverimage_nanoserver_iis2 

# lösche das erste Image, das IIS2-Image ist immer noch verwendbar!
Remove-ContainerImage meinwebserverimage_nanoserver_iis
docker history meinwebserverimage_nanoserver_iis2

docker rmi meinwebserverimage_nanoserver_iis2
Stop-Container MeinWebserver3
get-container MeinWebserver3 | ConvertTo-ContainerImage -Repository meinwebserverimage_nanoserver_iis3
docker history meinwebserverimage_nanoserver_iis3

Stop-Container MeinWebserver5
get-container MeinWebserver5 | ConvertTo-ContainerImage -Repository meinwebserverimage_nanoserver_iis5
docker history meinwebserverimage_nanoserver_iis5

# Tagging
docker tag meinwebserverimage_nanoserver_iis3 itvisions/test:v1
Tag-ContainerImage -Id meinwebserverimage_nanoserver_iis5 -Tag v2 -Repository itvisions/test
# tag löschen
docker rmi meinwebserverimage_nanoserver_iis3
Remove-ContainerImage -Id itvisions/test:v2
# alle Tags löschen => Image löschen!
Get-ContainerImage itvisions/test:v2 | foreach repotags | Remove-ContainerImage

# Veröffentlichen
docker login
docker login -u ihrname -p geheim
docker push itvisions/test:v1

#Docker file

cd H:\TFS\Demos\PowerShell\3_Einsatzgebiete\Docker

#problembehaftet
Get-Content t:\MeinWebserver.dockerfile | docker build - --tag meinwebserverimage_iis. 

# geht

$i = 7

docker build H:\TFS\Demos\PowerShell\3_Einsatzgebiete\Docker --tag meinwebserverimage_iis$i --rm=false

docker run -d --name MeinWebserver$i  meinwebserverimage_iis$i  cmd
docker run -d --name MeinWebserver62  meinwebserverimage_iis6 
docker exec -i -t MeinWebserver51 powershell
Get-Container | ft names,image,status


# Images löschen
Get-ContainerImage | ? repotags -like "*none*" | Remove-ContainerImage
Get-ContainerImage | ? repotags -like "*mein*" | Remove-ContainerImage

# Umschalten zwischen Windows und Linux

& 'C:\Program Files\Docker\Docker\DockerCli.exe' -SwitchDaemon
docker run hello-world

#misc
Restart-Service com.docker.service