| .. | ||
| img | ||
| README.md | ||
Table of Contents
- Docker
- Docker Installation
- Docker Befehle
- Anzeigen aller Container
- Anzeigen aller Images
- Ausgabe eines Containers anzeigen
- Docker logs
- Container starten
- Docker Container starten und neues Image hinzufügen (curl)
- Container stoppen / neu starten
- Befehl in Docker Container ausführen
- Import DB in docker container
- Backup DB in docker container
- SSH in docker
- Copying files/folders
- IP des Containers auslesen
- Container entfernen
- Daten Teilen
- 1. Möglichkeit: Verzeichnisse mappen (Host-Verzeichnis im Container mappen)
- 2. Möglichkeit: Daten-Container verwenden (zwischen Container und Container)
- Container verlinken
- Docker file
- Docker Hub
- Docker-compose
Docker
Image vs Container
Ein Container ist ein Image, welches gerade ausgeführt wird. Wenn ein Image mit docker run nginx ausgeführt wird, spricht man von einem Container. Es ist vergleichbar mit einem Prozess. Container wird auf Basis eines Ausgangs-Images gestartet.
Docker Volumes
There are three volume types:
- Docker volumes which are stored and handled internally by docker (c.f. docker config to choose where they are actually stored).
version: '3.9'
services:
caddy:
image: caddy:2.6.2
volumes:
- caddy_data:/data
volumes:
caddy_data
- Bind mounts which are direct access to the host file system from a container
version: '3.9'
services:
caddy:
image: caddy:2.6.2
volumes:
- /opt/docuteam/ssl/certifcate.pem:/cert.pem:ro</code>
3. Bind mounts of remote share which are defined through docker volumes
<code>version: '3.9'
services:
fedora:
image: docker.cloudsmith.io/docuteam/docker/fcrepo:6.2.0
volumes:
- fedora_data:/fcrepo_home
volumes:
fedora_data:
driver_opts:
type: cifs
device: //remote-hostname.com/path/to/share/fedora
o: addr=remote-hostname.com,username=user,password=mysuperpassword,nodev,noexec,nosuid,vers=2.1,uid=1000,gid=1000
Docker Installation
Windows Docker Desktop
CentOS
https://docs.docker.com/engine/install/centos/#install-using-the-repository
Ubuntu
https://docs.docker.com/engine/install/ubuntu/
Nachfolgend eine Anleitung für Docker und Docker-Compose Intallation unter Ubuntu 20.04, aus folgenden Quellen
- https://www.cloudbooklet.com/install-wordpress-with-docker-compose-nginx-apache-with-ssl/
- https://shownotes.opensourceisawesome.com/running-wordpress-with-docker/
Fügen Sie Ihrem System dann den GPG-Schlüssel für das offizielle Docker-Repository hinzu
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Fügen Sie das Docker-Repository zu APT-Quellen hinzu
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
Aktualisieren Sie als Nächstes die Paketdatenbank mit den Docker-Paketen aus dem neu hinzugefügten Repo
sudo apt update
Stellen Sie sicher, dass Sie aus dem Docker Repo und nicht aus dem Standard-Ubuntu-Repo installieren
apt-cache policy docker-ce
docker installieren
sudo apt install docker-ce
sudo usermod -aG docker ${USER}
prüfen ob docker ausgeführt wird
sudo systemctl status docker
installieren von docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
(neuste Version unter https://github.com/docker/compose/releases)
configure log
https://docs.docker.com/config/containers/logging/configure/
Das file muss möglicherweise zuerst erstellt werden, unter etc/docker/daemon.json
Post installation steps
https://docs.docker.com/engine/install/linux-postinstall/
Docker als Dienst einrichten und user der Gruppe docker hinzufügen (docker Gruppe wird bei Installation erstellt).
Docker Befehle
Anzeigen aller Container
sudo docker ps -a
Nur laufende:
sudo docker ps
Anzeigen aller Images
sudo docker images
Ausgabe eines Containers anzeigen
docker logs <docker id>
Docker logs
journalctl -xu docker.service
Container starten
docker run -it %%--%%name Test_run ubuntu:20.04 /bin/bash
ist wie
docker create -it %%--%%name <IrgendEinName> <IMAGE> <COMMAND>
und anschliessend
docker start -ai <IrgendEinName>
Das Docker Image ubuntu:20.04 muss vorher heruntergeladen worden sein. Man kann natürlich auch eigene Images erstellen.
Will man ein Docker starten ohne gleich in der Shell zu landen, also als Daemon, dann die Option -itd anstatt -it verwenden. Man kann später mit docker exec ein Befehl ausführen, z.B. docker exec Test_run ls -la oder um direkt in die Shell des Containers rein zu gehen docker exec -it Test_run /bin/bash.
Docker Container starten und neues Image hinzufügen (curl)
- Docker Container starten aufgrund Image ubuntu:20.04
docker run -it %%--%%name Testcontainer ubuntu:20.04 apt install curl- Somit haben wir Basis Image um neues Programm erweitert
- mit
exitaus dem Container gehen docker ps -aStatus ist "Exited"- Commit machen:
docker commit -m "curl hinzugefügt" <CONTAINER ID> <docker hub user>/ubuntu_mit_curl docker imagessieht man neues Image- Wenn man will kann man jetzt nach docker hub pushen.
Container stoppen / neu starten
docker stop. Restart: `docker restart``
Befehl in Docker Container ausführen
Z.B. MySQL, wobei wordpress-baumfreunde_db_1 der Container-Name ist, den man mit docker ps herausfindet.
sudo docker exec -it wordpress-baumfreunde_db_1 mysql -uroot -p
Import DB in docker container
sudo docker exec -i wp_db mysql -h 172.17.0.1 -P 3306 --protocol=tcp -uroot -p wp_baum < /var/www/wordpress-from-docker/wp_baum.sql
Backup DB in docker container
docker exec -it wordpress-baumfreunde_db_1 mysqldump --add-drop-table -uroot -pXXX wp_baum > /home/roru/wordpress-baumfreunde/wp_baum_backup.sql
SSH in docker
sudo docker exec –it <container-name> /bin/bash
#als root
docker exec -u root -it <container-name> /bin/bash
Copying files/folders
Copy file from host to docker
sudo docker cp "file.txt" c30c199ec89c:/home/actions
Copy folder from docker to host
sudo docker cp "c30c199ec89c:/home/actions/conf /home/rogrut
IP des Containers auslesen
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name
Container entfernen
Zum Container entfernen: docker stop Test_run und docker rm Test_run.
Daten Teilen
1. Möglichkeit: Verzeichnisse mappen (Host-Verzeichnis im Container mappen)
docker run -v <HOST DIR>:<DOCKER DIR>
Konkret:
$ docker run -it -v ~/Desktop/LokaleDaten:/home/daten --name Datentest ubuntu:20.04 /bin/bash
2. Möglichkeit: Daten-Container verwenden (zwischen Container und Container)
Datencontainer mit Volume /data/db erstellen
docker create -v /data/db --name datenbox busybox true
Neuen Container für Anwendung erstellen
$ docker run -it --volumes-from datenbox ubuntu:20.04 /bin/bash
$ cd /data/db
$ touch datei.txt
$ exit
Die Datei ist jetzt im Datencontainer unter /data/db. Der Datencontainer muss gar nicht gestartet werden um ihn zu verwenden.
Container verlinken
Ports verbinden
Beispiel Image martinblaha/testapp starten, localhost Port 4000, docker Port 1337
docker run -it -d --name myApp -p 4000:1337 martinblaha/testapp sh -c 'cd /var/www/test/myapp && sails lift'
Environment Variablen
Variante 1
$ docker run -it --name TestEnv -e MY_VAR="hello world" ubunut:20.04 /bin/bash
$ env
Variante 2
So wird der Wert von MY_VAR vom hostsystem automatisch mitgegeben:
$ docker run -it --name TestEnv -e MY_VAR ubunut:20.04 /bin/bash
$ env
Variante 3
Env Variable Liste übergeben
$ docker run -it --name TestEnv -env-file ./env.list ubunut:20.04 /bin/bash
$ env
Link zwischen 2 Container
Sicherer Tunnel zwischen beiden Container. Ports müssen nicht geöffnet werden. Dabei geschieht folgendes:
- Umgebungsvariablen des Quellcontainers werden im Zielcontainer veröffentlicht.
- Einträge in ''/etc/hosts'' des Zielcontainers gesetzt, die zum Quellcontainer führen.
Beispiel:
Ubuntu 20.04 Image erstellen und mit mongodb:mongo Container verlinken.
mongodb: NAMES, mongo: IMAGE (sieht man, wenn man docker ps macht)
$ docker run -it -P --link mongodb:mongo ubuntu:20.04 /bin/bash
Docker file
Dockerifle ist eine einfache Textdatei. Kann Images anhand der Schritte, die in einem Dockerfile definiert werden, bauen.
Wenn wir ein solches Imagefile erhalten, können wir es bauen, bevor man es mit docker run starten kann.
Dockerfile erstellen, siehe Doku unter https://docs.docker.com/reference/builder
$ docker build -t REPOSITORY/TAG .
Docker Hub
$ docker login
$ docker pull
etc.
Docker-compose
Starten
Ins Verzeichnis gehen wo docker-compose.yml liegt, und dann docker-compose start -d
Stoppen
- The
docker-compose stopcommand will stop your containers, but it won’t remove them. - The
docker-compose downcommand will stop your containers, but it also removes the stopped containers as well as any networks that were created. - You can take down 1 step further and add the
-vflag to remove all volumes too. This is great for doing a full blown reset on your environment by runningdocker-compose down -v.

