Änderungen

Zur Navigation springen Zur Suche springen
5.041 Bytes hinzugefügt ,  13:10, 23. Jul. 2024
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 ==
 
== Erstellen eines eigenen Basis-Images ==
Zeile 14: Zeile 31:     
   mkdir wheezyBaseFiles
 
   mkdir wheezyBaseFiles
   sudo debootstrap wheezy 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/
   −
Anschließend wird die komplette Verzeichnisstruktur in ein tar-Archiv gepackt.
      
-----
 
-----

Navigationsmenü