Zeile 3: |
Zeile 3: |
| == Installation == | | == Installation == |
| | | |
| + | ==== Installation unter Debian 9 Stretch ==== |
| + | |
| + | Siehe |
| + | * https://linuxconfig.org/how-to-install-docker-engine-on-debian-9-stretch-linux |
| + | |
| + | |
| + | ==== Installation unter Ubuntu ==== |
| sudo aptitude install lxc apparmor docker.io | | sudo aptitude install lxc apparmor docker.io |
| sudo addgroup USER docker | | sudo addgroup USER docker |
| docker info | | docker info |
| + | |
| + | == Speicherort für Images etc. umhängen == |
| + | Mit |
| + | docker info |
| + | kann man sich anzeigen lassen, wo Docker Images u.Ä. abspeichert. In der <code>/etc/fstab</code> kann man das auf einen Ordner einer anderen Partition umhängen: |
| + | /media/anderePartiton/aufsRoot /var/lib/docker/aufs none bind 0 0 |
| + | |
| + | |
| + | Alternativ gibt man in der Datei <code>/etc/default/docker</code> in den <code>DOCKER_OPTS</code> den zusätzlichen Parameter <code>-g</code> an. Beispiel: |
| + | DOCKER_OPTS="-g /mnt/mybigdata/dockerroot" |
| + | |
| + | == Erstellen eines eigenen Basis-Images == |
| + | |
| + | Auf Ubuntu / Debian-Basis lässt sich mit Hilfe von [[debootstrap]] und [[tar]] ein Basisimage erstellen. Siehe dazu die [https://docs.docker.com/engine/articles/baseimages/ Docker-Anleitung]. |
| + | |
| + | Dazu erstellt man die Grundstruktur des neuen Systems mit debootstrap: |
| + | |
| + | mkdir wheezyBaseFiles |
| + | sudo debootstrap --variant=minbase wheezy wheezyBaseFiles |
| + | |
| + | Anschließend wird die komplette Verzeichnisstruktur in ein tar-Archiv gepackt und über eine Linux-[[Pipe]] sofort in docker importiert: |
| + | |
| + | sudo tar -C wheezyBaseFiles -c . | docker import - myuser/wheezy_base |
| + | |
| + | Kleiner Test: |
| + | docker run myuser/wheezy_base cat /etc/os-release |
| + | |
| + | oder die Shell starten mit |
| + | docker run -t -i myuser/wheezy_base /bin/bash |
| + | |
| + | |
| + | == Bauen eines Images mit Dockerfile == |
| + | |
| + | Dazu erstellt man eine Datei namens <code>Dockerfile</code> in einem (leeren) Verzeichnis mit folgendem Inhalt: |
| + | FROM wheezy_base |
| + | MAINTAINER email@mailprovider.com |
| + | RUN apt-get update && apt-get -y install apache2-mpm-prefork apache2 mediawiki |
| + | |
| + | |
| + | Dann wechselt man in das Verzeichnis mit <code>cd</code> und baut das Image mit folgendem Befehl: |
| + | docker build -t IMAGENAME:IMAGETAG . |
| + | |
| + | == Ausführen einer Shell == |
| + | |
| + | Mittels der Flags <code>-i</code> (für interaktiv) und <code>-t</code> (für Binden von stdin und stdout ans Terminal) lässt sich auch eine interaktive Shell ausführen. |
| + | docker run -i -t wheezy_base /bin/bash |
| + | |
| + | == Starten eines zweiten Terminals == |
| + | |
| + | Braucht man eine zweite Shell für einen laufenden Container, sucht man zunächst den Containernamen |
| + | docker ps |
| + | Dann startet man die [[Bash]] das zweite Mal: |
| + | docker exec -t -i myuser/wheezy_base /bin/bash |
| + | |
| + | |
| + | == Privates Repository == |
| + | |
| + | |
| + | === Installation und Start === |
| + | Für ein privates Repository startet man - ganz docker-like - einen entsprechenden Container mit dem Image "registry":<ref>Siehe https://docs.docker.com/registry/deploying/ .</ref> |
| + | docker run -d -p 5000:5000 --restart=always --name registry -v `pwd`/data:/var/lib/registry registry:2 |
| + | |
| + | === Konfiguration einer unsicheren privaten Registry === |
| + | Für Testzwecke kann man auch von anderen Rechnern im privaten Netzwerk UNGESICHERT auf die Registry zugreifen. Dazu muss man dem Daemon das aber explizit erlauben, indem man folgende Zeile in <code>/etc/default/docker</code> einfügt: |
| + | DOCKER_OPTS="--insecure-registry registryrechner:5000" |
| + | |
| + | Dann muss man diesen Daemon neu starten: |
| + | sudo service docker restart |
| + | |
| + | === Eintragen eines Images im Registry === |
| + | |
| + | Zunächst muss das vorhandene Image umgetaggt werden: |
| + | |
| + | docker tag user/eigenesimage registryrechner:5000/user/eigenesimage |
| + | |
| + | Dann muss es hochgeschoben werden: |
| + | docker push registryrechner:5000/user/eigenesimage |
| + | |
| + | == Docker und Netzwerk == |
| + | |
| + | Einen Port des Containers kann man mit der Option -p als Port des Hosts zur Verfügung stellen: |
| + | docker run -p 4304:4304 myimage |
| + | |
| + | Leider scheint es Probleme mit IPv4-Adressen des Hosts zu geben. Abhilfe schafft in kleineren Fällen die Option <code>--net=host</code>. Diese sollte aber aus Sicherheitsgründen vermieden werden, weil damit von außen voller Zugriff auf alle Ports des Containers gegeben wird. |
| + | |
| + | === Docker und IPv6 === |
| + | |
| + | Docker hat standardmäßig die IPv6-Unterstützung nicht eingeschaltet. Das kann man aber |
| + | machen: |
| + | * https://docs.docker.com/config/daemon/ipv6/ |
| + | * https://gdevillele.github.io/engine/userguide/networking/default_network/ipv6/ |
| + | * https://medium.com/@skleeschulte/how-to-enable-ipv6-for-docker-containers-on-ubuntu-18-04-c68394a219a2 |
| + | * https://dev.to/joeneville_/build-a-docker-ipv6-network-dfj |
| + | |
| + | == Docker updates == |
| + | |
| + | Auch Docker container müssen auf neue Versionen überwacht werden. |
| + | |
| + | === Monitoring container updates === |
| + | |
| + | Mit [https://fmartinou.github.io/whats-up-docker/#/ What's up Docker] kann man sich z.B. eine Email zuschicken lassen, wenn ein Container-Image upgedatet wurde. |
| + | |
| + | == Troubleshooting Docker == |
| + | |
| + | === SystemD läuft nicht === |
| + | |
| + | Es gibt grundsätzlich zwei Möglichkeiten, [[systemd]]-services bereitzustellen: |
| + | |
| + | * SystemD installieren und viel Funktionalität zu entfernen oder |
| + | * https://github.com/gdraheim/docker-systemctl-replacement |
| + | |
| + | === Chrome/Chromium startet nicht === |
| + | |
| + | Wenn Chrome nicht startet (Fehlermeldung: <small>Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted</small>), hilft das Argument <code>--no-sandbox</code>.<ref>Siehe https://github.com/wechaty/wechaty/issues/26</ref> |
| + | |
| + | == Einzelne Images == |
| + | |
| + | === MySQL-Image === |
| + | |
| + | Siehe für ein einfaches Dockerfile für einen [[MySQL]]-Container: |
| + | * https://entwickler.de/online/docker-am-praktischen-beispiel-mit-wordpress-150107.html |
| + | |
| + | Wenn MySQL nicht mit |
| + | mysqld |
| + | startet, kann es daran liegen, dass der Socket nicht erstellt werden kann. Dann: |
| + | mkdir /var/run/mysqld/ |
| + | chmod a+w /var/run/mysqld/ |
| | | |
| | | |