Docker ist aktuell die führende Virtualisierung für Micro-Services.
docker run hello-world
"docker ps" listet die laufenden Prozesse, "docker ps -a" listet die auf der Maschine befindlichen Images.
Die Maschine wird gelöscht und angelegt mit:
$ docker-machine rm default $ docker-machine create --driver virtualbox default
Hinweis: "default" ist der Standardname der Docker-Maschine.
docker-machine env
docker-machine ssh default
<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <imageName>${project.artifactId}</imageName> <dockerHost>https://192.168.99.101:2376</dockerHost> <dockerCertPath>${env.USER_HOME}\.docker\machine\machines\default</dockerCertPath> <baseImage>java:8-jdk</baseImage> <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> <exposes> <expose>80</expose> </exposes> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
Key | Value | Bedeutung |
---|---|---|
bip | 192.168.1.5/24 | Netzwerk range |
fixed-cidr | 192.168.1.20 | IP-Adresse der eigenen Maschine |
curl https://get.docker.com | bash
mkdir /etc/systemd/system/docker.service.d/ nano /etc/systemd/system/docker.service.d/docker.conf
Der Inhalt kann etwa wie folgt aussehen:
[Service] ExecStart= ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
Der Daemon dockerd hat viele Parameter (Docker Daemon Parameters), unter anderem das Port-Binding mit -H. Neben dem Parameter -H fd:// (UNIX Pipe) kann man -H tcp://0.0.0.0:2375 hinzufügen (ohne SSH) oder tcp://0.0.0.0:2376 (mit SSH). Dann sind folgende Befehle auszuführen:
systemctl daemon-reload systemctl restart docker.service
Mit
systemctl stop docker.service systemctl start docker.service
kann der Service gestoppt und gestartet werden.
In docker.service können zusätzliche DNS-Server angegeben werden:
ExecStart=/usr/bin/dockerd --dns 192.168.1.1 [...]
set DOCKER_HOST=tcp://192.168.1.99:2375
Damit kann man ganz normal das docker command (docker ps etc. Docker Toolbox) nutzen.
docker exec -it <container-name> bash
Hinweis: Manche Container nutzen "sh" statt "bash".
docker stats --no-stream
Erklärung: Ohne die Option --no-stream wird, ähnlich beim Unix-Command "top" die Ausgabe ständig aktualisiert. Mit dieser Option erhält man eine einmalige Ausgabe.
docker volume create --name <name>
erzeugt werden. Dieser werden dann verbunden mit
docker run [...] -v <volume>:/<container-path> docker run [...] -v /<host-path>:/<container-path>
Die Installation braucht eine Volume:
docker volume create portainer-data docker run --name portainer --restart always -p 9000:9000 -v portainer-data:/data portainer/portainer
Hinweis: Das Passwort wird beim ersten Start eingerichtet.
Von da ab kann man die meisten Operationen über Portainer ausführen.
Wenn Portainer über Apache freigegeben wird, braucht die Console einen Web-Socker:
<Location /portainer/> ProxyPass http://192.168.1.50:9000/ ProxyPassReverse http://192.168.1.50:9000/ </Location> <Location /portainer/api/websocket/> RewriteEngine on RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC] RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC] RewriteRule /api/websocket/(.*) ws://192.168.1.50:9000/api/websocket/$1 [P] </Location>
Siehe Markus Blog und Github Issue 1887.
Der Zugriff auf Docker erfolgt durch ein Binding: /var/run/docker.sock:/var/run/docker.sock
Dann konfiguriert man einige Environment-Variablen:
Variable | Erklärung | Wert |
---|---|---|
SELF_UPDATE | Ob der Updater sich selbst updaten soll | true |
MONITOR | Welche Container überwacht welchen sollen | mongo mongo-express jenkins portainer rabbitmq |
DOCKER_SOCKETS | Docker Connection | unix://var/run/docker.sock tcp://192.168.1.1:2375 |
Update: Eventuell containrrr/watchtower verwenden.
Möchte man keinen SSH-Key installieren, muss in /etc/docker/daemon.json die Registry als insecure eingetragen werden:
{ "insecure-registries" : ["<host>:5000"] }
Name | Bedeutung | Beispiel |
---|---|---|
ALLOW_RECURSION | Netzwerke an die eine DNS-Weiterleitung der DNS_FORWARDER erfolgt. Die restlichen Netzwerke können nur auf die direkten Host-Einträge dieses Servers zugreifen | 192.168.0.0/16,127.0.0.1 |
DNS_FORWARDER | Hosts die für die DNS-Weiterleitung befragt werden | 192.168.1.1 |
EXTRA_HOSTS | Host-Eintrag für example.tld inklusive PTR-Eintrag (Reverse Resolution) | example.tld=1.2.3.4=example.tld |
WILDCARD_DNS | Host-Eintrag für example.tld und *.example.tld inklusive PTR-Eintrag (Reverse Resolution) | example.tld=1.2.3.4=example.tld |