Docker

Aus
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Docker Doku

https://docs.docker.com/

Docker Tutorial

https://techgoat.net/index.php?id=178
https://techgoat.net/index.php?c=docker

Grundkurs

https://jaxenter.de/einfuehrung-docker-tutorial-container-61528
https://jaxenter.de/10-wege-docker-images-zu-bauen-1-61421
https://jaxenter.de/12-docker-tipps-61328

26 Docker-Befehle mit Beispielen

https://geekflare.com/de/docker-commands/

Docker Cheat Sheet

https://www.docker.com/sites/default/files/d8/2019-09/docker-cheat-sheet.pdf

Docker Befehle / Spickzettel

https://www.brocksi.net/docker-befehle/

Murfman Wiki / Tools / Docker

http://notes.murfman.de/Tools/Docker

Docker einrichten unter Linux, Windows, macOS

https://www.heise.de/ct/artikel/Docker-einrichten-unter-Linux-Windows-macOS-4309355.html

How to install and use Portainer for easy Docker container management

https://www.techrepublic.com/article/how-to-install-and-use-portainer-for-easy-docker-container-management/
docker run -d  \
 --name myPortainer_9000 \
 --publish 9000:9000 \
 --volume /var/run/docker.sock:/var/run/docker.sock \
 --restart always \
 portainer/portainer

Workshop

https://www.ab-heute-programmieren.de/docker-teil-1-was-ist-docker/
https://www.ab-heute-programmieren.de/docker-teil-2-das-arbeiten-mit-containern/ 
https://www.ab-heute-programmieren.de/docker-teil-3-images/
https://www.ab-heute-programmieren.de/docker-teil-4-das-dockerfile/

commit

docker commit -m "myDebian aktuell" -a "Stefan Muehlbauer"  e45ba8fe0606c4fffab09d0776cde934a9af9cbe24c3d5d3cfb1bfcc9b7de5ed

build

docker build -t debian:smV1 .
(Dockerfile )

https://docs.docker.com/engine/reference/commandline/build/ 

run

docker run -i -t -d --hostname debian_test --name debian_test -p 9522:22 debian:smV1
https://docs.docker.com/engine/reference/commandline/run/

Debian

docker run -i -t -d --hostname debian_002 --name debian_002 -p 9122:22 debian:latest

VPN

https://mobilejazz.com/blog/setting-up-a-vpn-server-in-5-minutes-with-docker/

SSH Config

docker exec debian_002 apt-get install openssh-server -y

docker exec debian_001 service ssh status docker exec Debian_001 Service ssh start


Docker und VirtualBox / VMWare gleichzeitig unter Windows

https://www.guido-muehlwitz.de/2019/05/docker-und-virtualbox-vmware-gleichzeitig-unter-windows/

Über die Eingabeaufforderung (als Administrator) Hyper-V ausschalten:
bcdedit /set hypervisorlaunchtype off
Und wieder einschalten:
bcdedit /set hypervisorlaunchtype auto
Ist Hyper-V aus läuft VirtualBox (und kein Docker), ist es eingeschaltet läuft Docker (und kein VirtualBox). Beides wird (und kann) nicht parallel laufen. Windows wäre übrigens nicht Windows, wenn man an der Stelle den Rechner dann auch jedes Mal neu booten müsste. Danke dafür.

Docker Spickzettel

Zeige Docker Images an
docker ps, dockewr ps -a
Erstelle ein DockerImage
docker build
docker-cpmpose build
Starte ein Docker Image
docker run
docker-compose up -d
Stoppe ein DockerImage
docker stop
docker-compose stop
Zeige Logs zu einem DockerImage
docker logs <>
Verbinde zu DockerImage per bash
docker exec -u www-data -it <> bash
Kopiere date von local zu DockerImage
docker cp src/datei_kopieren.zip docker_image_name:/ziel_pfad
Kopiere eine Datei von deinem Docker-Image nach local
docker cp docker_image_name:/pfad_zur_datei/test.txt /local_pfad/ 
Befehl in Docker-Image ausführen ohne auf das Image zu gehen
docker exec -u www-data docker_image_name bash -c 'cd /var/www/magento/src && ./bin/magento setup:static-content:deploy de_DE'
IP-Adresse eines Docker-Images herausfinden
docker inspecht docker_image_name

Docker Volume

https://www.ionos.de/digitalguide/server/knowhow/docker-container-volumes/
https://www.modius-techblog.de/docker/docker-verwendung-von-volume/
Docker Tutorial [Teil 6 - Storage (Grundlagen)] 
https://techgoat.net/index.php?id=183
docker volume create vol1
docker volume ls
docker volume inspect vol1
[
   {
       "CreatedAt": "2021-03-17T23:56:32+01:00",
       "Driver": "local",
       "Labels": {},
       "Mountpoint": "/var/lib/docker/volumes/vol1/_data",
       "Name": "vol1",
       "Options": {},
       "Scope": "local"
   }
]

docker volume create nginx_data
docker volume inspect nginx_data
[
   {
       "CreatedAt": "2021-03-18T00:11:13+01:00",
       "Driver": "local",
       "Labels": {},
       "Mountpoint": "/var/lib/docker/volumes/nginx_data/_data",
       "Name": "nginx_data",
       "Options": {},
       "Scope": "local"
   }
]

docker run -p 5000:80 -d -ti -v nginx_data:/usr/share/nginx/html nginx

Udemy Docker Bootcamp - vom Anfänger zum Profi

Installation auf Debian

Debian:
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
#Verifizieren, dass der Fingerabdruck       9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88 lautet
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
Docker Compose
https://github.com/docker/compose/releases/
Version 1.28.5
curl -L https://github.com/docker/compose/releases/download/1.28.5/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose


sudo docker oder nur docker

(8) docker busybox

Container laden

docker pull busybox

Images anzeigen

docker images

Container starten

docker run busybox
docker run busybox echo "Hallo Welt 42"

Container anzeigen

docker ps
docker ps -a

container löschen

docker rm <containerid>
docker rm $(docker ps -a -q -f status=exited)
docker container prune

(9) Blick in den Container

-it
docker run -it busybox sh

(10) Ports mappen

-p
sudo docker pull nginx
sudo docker run nginx
sudo docker run -p 5000:80 nginx

(11) detached modus

-d
docker run -d -p 5000:80 nginx

(12) Zugriff auf detached container

exec
docker exec -ti <containerid> bash

attach
docker attach <containerid>
docker run -p 5000:80 -d -ti nginx
docker attach <containerid>
strg p; strg q

(13) Dateien an container übergeben

docker run -p 5000:80 -d -v source:destination nginx
docker run -p 5000:80 -d -ti -v /var/lib/docker/volumes/nginx/html/_data:/usr/share/nginx/html nginx

(13b) Volume erzeugen und verbinden

docker volume create nginx_data
docker run -p 5000:80 -d -ti -v nginx_data:/usr/share/nginx/html nginx

(14) container stoppen, löschen

docker ps
docker container ls
docker stop <containerid>
docker rm <containerid>
docker image ls
docker image rm <image>
docker image prume

(15) container automatisch starten

--restart on-failure, always, unless-stopped, never
docker run -p 5100:80 -dit --name mynginx nginx
docker run -p 5100:80 -dit --restart unless-stopped --name mynginx nginx
docker run -p 5000:80 -dit -v nginx_data:/usr/share/nginx/html --restart unless-stopped --name mynginx nginx:latest

(16) Stats

docker stats

(17) Resourcen limitieren

-m xm, --cpus=x.x
docker run -p 5100:80 -dit -m 4m --cpus="0.5" --restart unless-stopped --name mynginx nginx

(18) Logs lesen

logs
docker run -p 5100:80 -dit --restart unless-stopped --name mynginx nginx
docker attach <containerid>
docker logs <containerid>

(19) Logs in JSON Datei

docker run -p 5100:80 -dit --restart unless-stopped --log-driver json-file --log-opt=100m --log-opt max-file=100 --name mynginx nginx
sudo docker inspect -f Vorlage:.LogPath <containerid>

Aufgabe MYSQL Container exportieren

docker run --name myMYSQL_100 mysql:latest
docker run --name myMYSQL_100 -e MYSQL_ROOT_PASSWORD=myPW -p 53306:3306 -dit mysql:latest

docker exec -ti <containerID> bash

(20) Das erste Dockerfile

app.py

from flask import Flask
app = Flask(__name__)
@app.route("/")
def default():

html = "

Hello World from Flask App!

"

return html
if __name__ == "__main__":
app.run(host='0.0.0.0',port=80)
   

dockerfile
#Zgrundeliegende Image
FROM python:3.7-slim
WORKDIR /app
#Kopieren des aktuellen Verzeichnisses in /app
ADD . /app
#Installieren
RUN pip install --trusted-host pypi.python.org -r requirements.txt
#Port 80 veröffenlichen
EXPOSE 80
cmd ["python","app.py"]
app.py, Dockerfile, requirements.txt
sudo docker build -t first .
docker run -dit -p 5200:80 first

(22) Docker Hub

docker login smbsoft
docker tag first smbsoft/first:1.0
docker push smbsoft/first:1.0

(23) Environment

ENV=

(24) Python Deployment

(25) Node.js Deployment

(26) MailCow EMail Server

git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized/
./generate_config.sh
docker-compose pull
nano docker-compose.yml
sudo docker-compose up -d
admin
muhu

(27) Wordpress

docker-compose.yml

version: '3.6'
services:
   db:
       image: mysql:5.7
       volumes:
         - data_db:/var/lib/mysql
       ports:
           - 3306:3306
       restart: always
       environment:
           MYSQL_ROOT_PASSWORD: mypassword
           MYSQL_DATABASE: wordpress
           MYSQL_USER: wordpress
           MYSQL_PASSWORD: wordpress
   wordpress:
       image: wordpress:latest
       depends_on:
           - db
       ports:
           - 80:80
       restart: always
       environment:
           WORDPRESS_DB_HOST: db:3306
           WORDPRESS_DB_USER: wordpress
           WORDPRESS_DB_PASSWORD: wordpress
       volumes:
           - .wordpress/plugins:/var/www/html/wp-content/plugins
           - .wordpress/themes:/var/www/html/wp-content/themes
           - .wordpress/uploads:/var/www/html/wp-content/uploads
volumes:
   data_db:

(28) NextCloud

sudo docker pull nextcloud
sudo docker run -dit -p 8030:80 nextcloud

(29) Bonus Joomla

sudo docker pull joomla
version: '3.1'
services:
 joomla:
   image: joomla
   restart: always
   depends_on:
       - joomladb
   links:
     - joomladb:mysql
   ports:
     - 8080:80
   environment:
     JOOMLA_DB_HOST: joomladb:3306
     JOOMLA_DB_PASSWORD: example
 joomladb:
   image: mysql:5.6
   ports:
       - 3306:3306
   restart: always
   environment:
     MYSQL_ROOT_PASSWORD: example
sudo docker-compose up -d

(30) zusätzliche optionen von docker-compose

deploy:
  replicas: 3
  resources:
      limits:
          cpus: "0,5"
          memory: 200m

(31) Dateiformat docker-compose

version: '3.1'
docker-compose --version
docker --version
https://docs.docker.com/compose/compose-file/

Aufgabe 2 : Erstelle einen nginx-Server mit einer Dockerfile

(33) Docker Machine

$ curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine &&
chmod +x /tmp/docker-machine &&
sudo cp /tmp/docker-machine /usr/local/bin/docker-machine
docker-machine version
base=https://github.com/docker/machine/releases/download/v0.16.2
curl -L $base/docker-machine-$(uname -s)-$(uname -m) > /tmp/docker-machine
sudo install /tmp/docker-machine /usr/local/bin/docker-machine

(34) VM erstellen

docker-machine create --driver virtualbox myVM001
docker-machine create --driver virtualbox myVM002
docker-machine create --driver virtualbox myVM003
docker-machine ls
docker-machine stop <vm>

(35) VM inspizieren

docker-machine inspect <vm>

(36) Swarm erstellen

docker-machine swarm leave --force

docker-machine swarm init
docker-machine swarm init --advertise-addr <IP>
docker-machine ssh VM "docker swarm join --token <> <IP>"
docker node ls

(38) Swarm aufräumen

docker stack rm <>

docker-machine ssh VM "docker swarm leave"
docker swarm leave -f
docker-machine ls
docker-machine stop $(docker-machine ls -q)

docker-machine rm $(docker-machine ls -q)