This page (revision-61) was last changed on 25-May-2021 08:04 by Dieter Käppel

This page was created on 16-Dec-2016 11:25 by Dieter Käppel

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
61 25-May-2021 08:04 12 KB Dieter Käppel to previous

Page References

Incoming links Outgoing links

Version management

Difference between version and

At line 3 removed 3 lines
!!!Inhalt
[{TableOfContents title='Page contents' numbered='true'}]
At line 10 added one line
!!Prozesse
At line 15 changed one line
!!Virtualbox
!!!Virtualbox
At line 42 changed one line
Standard-Images werden vom [Docker-Hub|https://hub.docker.com/search/] über das Internet heruntergeladen. Da sind einfache Linuxe mit Java, Tomcat, MySQL etc. verfügbar.
Standard-Images werden vom Docker-Hub über das Internet heruntergeladen. Da sind einfache Linuxe mit Java, Tomcat, MySQL etc. verfügbar.
At line 42 added 7 lines
!!!Netwerk
Netzwerk konfigurieren
{{{
ifconfig eth0 192.168.3.1 netmask 255.255.0.0 broadcast 192.168.255.255 up
}}}
At line 45 changed one line
Die eigene Anwendung wird mit dem Docker-Command deployed oder über das Maven-Plugin com.spotify:docker-maven-plugin. Komplexere Konfigurationen können mit dem Maven-Plugin io.fabric8:docker-maven-plugin vorgenommen werden.
Die eigene Anwendung wird mit dem Docker-Command deployed oder über das Maven-Plugin com.spotify:docker-maven-plugin.
At line 75 removed 42 lines
!!Google Jib
Mit dem jib-maven-plugin steht seit kurzem eine neue Möglichekit zur Verfügung, Docker Container zu bauen. Dabei braucht keine laufende Docker Installation zur Verfügung zu stehen. [Unterstützte Parameter|https://github.com/GoogleContainerTools/jib/blob/master/jib-gradle-plugin/README.md].
{{{
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.4.0</version>
<configuration>
<from>
<image>openjdk:15-jdk-alpine</image>
</from>
<to>
<image>docker.example.com/${project.build.finalName}</image>
<tags>
<tag>${project.version}</tag>
<tag>latest</tag>
</tags>
</to>
<container>
<ports>
<port>8080</port>
</ports>
</container>
</configuration>
</plugin>
}}}
!Jib Build
Der Build direkt in Nexus erfolgt mit Jib durch maven:
{{{
mvn -DsendCredentialsOverHttp=true clean install jib:build
}}}
Es kann auch offline als TAR-File gebaut werden und dann in Docker geladen:
{{{
mvn --offline clean install jib:buildTar
docker load -i target\jib-image.tar
}}}
At line 121 changed one line
Customizing findet statt durch /etc/docker/daemon.json innerhalb der virtuellen Docker-Maschine.
Customizing findet statt durch /etc/docker/docker.json innerhalb der virtuellen Docker-Maschine.
At line 137 changed 2 lines
!!Einstellungen
Die eigentliche Konfigurationsdatei liegt unter /lib/systemd/system/docker.service. Diese Datei wird aber automatisch verwaltet. Für Änderungen kann eine neue Datei erzeugt werden:
!!Port Öffnen
Leider klappt die Konfiguration per sogenannten Drop-In über /etc/systemd/system/docker.service.d nicht. Einzige Lösung scheint das direkte Editieren des Startup-Script in /lib/systemd/system/docker.service zu sein:
At line 141 changed 2 lines
mkdir /etc/systemd/system/docker.service.d/
nano /etc/systemd/system/docker.service.d/docker.conf
nano /lib/systemd/system/docker.service
At line 145 changed one line
Der Inhalt kann etwa wie folgt aussehen:
Der Daemon dockerd hat viele Parameter ([Docker Daemon Parameters|https://docs.docker.com/engine/reference/commandline/dockerd/]), unter anderem das Port-Binding mit -H. Neben dem Parameter -H fd:// (wohl für das docker command selbst) 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:
At line 148 removed 8 lines
[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|https://docs.docker.com/engine/reference/commandline/dockerd/]), 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:
{{{
At line 160 changed one line
Mit
Mit systemctl stop docker.service und systemctl start docker.service kann der Service nur gestoppt oder gestartet werden.
At line 162 changed 17 lines
{{{
systemctl stop docker.service
systemctl start docker.service
}}}
kann der Service gestoppt und gestartet werden.
!!DNS konfigurieren
Grundsätzlich verwendet [Docker] den DNS-Server des unterliegenden [Linux-Systems|Ubuntu] und sollte dort richtig einstellt werden.
In docker.service können zusätzliche DNS-Server angegeben werden:
{{{
ExecStart=/usr/bin/dockerd --dns 192.168.1.1 [...]
}}}
!!Docker Toolbox
!!Docker Tools
At line 185 changed one line
Damit kann man ganz normal das docker command (docker ps etc. [Docker Toolbox|https://docs.docker.com/toolbox/toolbox_install_windows/]) nutzen.
Damit kann man ganz normal das docker command (docker ps etc.) nutzen.
At line 187 removed 167 lines
!!!Docker Commands
Das Command docker ist sowohl auf der installierten Docker-Version verfügbar, als auch auf Windows durch die Installation von Docker-Toolbox. Genau genommen braucht nur docker.exe in den Windows-Path kopiert werden.
!!Container Bash
Im Docker-Container kann eine Bash geöffnet werden:
{{{
docker exec -it <container-name> bash
}}}
__Hinweis:__ Manche Container nutzen "sh" statt "bash".
Ein neuer Container kann mit einer Shell gestartet werden:
{{{
docker start --name suse -it registry.suse.com/suse/sles12sp5:latest
}}}
Wenn der Container nicht läuft, kann eine Shell gestartet werden mit:
{{{
docker start suse -i
}}}
!!Stats
Mit dem Stats-Command kann die CPU-Auslastung angezeigt werden:
{{{
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.
!!!Volumes
Mit der Volumes Option -v können Dateien und Laufwerke verbunden werden. Laufwerke werden mit
{{{
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>
}}}
!!!Container für Docker
Diese Container erleichtern den Umgang mit Docker selbst.
!!Portainer
Portainer ist die Oberfläche für Docker. In der Regel ist sie der einzige Container, der manuell über die Shell installiert wird.
Die Installation braucht eine Volume:
{{{
docker volume create portainer-data
docker run -d --name portainer --restart unless-stopped -p 9000:9000 -v portainer-data:/data -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce
}}}
__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|https://markus-blog.de/index.php/2018/05/07/docker-container-mit-portainer-verwalten-auf-ubuntu-16-04-lts-mit-apache2-als-reverse-proxy/] und [Github Issue 1887|https://github.com/portainer/portainer/issues/1887].
!!Automatische Updates
Docker Container können mit [v2tec/watchtower|https://hub.docker.com/r/v2tec/watchtower] bzw. [containrrr/watchtower|https://hub.docker.com/r/containrrr/watchtower] automatisch upgedated werden.
Die Startparameter lauten:
* __Socket:__ -v /var/run/docker.sock:/var/run/docker.sock
* __Credentials:__ -v /home/<user>/.docker/config.json:/config.json
* __Intervall:__ --interval 28800
* __Argumente:__ [Arguments|https://containrrr.dev/watchtower/arguments/]
__Hinweis:__ Die User können auf dem Docker-Host angelegt werden mit: docker login -u <username> -p <password> <server>
!!Jenkins
Um in Jenkins Docker-Befehle auszuführen, kann das Docker-Command in den Jenkins-Container kopiert werden:
# Create/change your Jenkins (I use portainer) with environment variables DOCKER_HOST=tcp://192.168.1.50 (when using unix protocol you also have to mount your docker socket) and append :/var/jenkins_home/bin to the actual PATH variable
# On your docker host copy the docker command to the jenkins image "docker cp /usr/bin/docker jenkins:/var/jenkins_home/bin/"
# Restart the Jenkins container
!!Registry
[Docker] Images können in einer Registry gespeichert werden. Dazu das Image registry verwenden. Port ist 5000, Volume ist /var/lib/registry.
Möchte man keinen SSH-Key installieren, muss in /etc/docker/daemon.json die Registry als insecure eingetragen werden:
{{{
{
"insecure-registries" : ["<host>:5000"]
}
}}}
!!Sonatype Nexus
Das klassische Repository für Maven Artifakte kann auch für Docker-Images verwendet werden.
!Password Recovery
Verbinden zur Datenbank "Orient":
{{{
cd /nexus-data/db
java -jar /opt/sonatype/nexus/lib/support/nexus-orient-console.jar
connect plocal:/nexus-data/db/security admin admin
}}}
Dann können die User angesehen werden:
{{{
select * from user
repair database --fix-links
rebuild index *
update user SET password="$shiro1$SHA-512$1024$NE+wqQq/TmjZMvfI7ENh/g==$V4yPw8T64UQ6GfJfxYq2hLsVrBY8D1v+bktfOxGdt4b/9BthpWPNUy/CBk6V9iA0nHpzYzJFWO8v/tZFtES8CA==" UPSERT WHERE id="admin"
INSERT INTO user_role_mapping (userId, source, roles) VALUES ('admin', 'default', 'nx-admin')
INSERT INTO realm (realm_names) VALUES (['NexusAuthenticatingRealm','NexusAuthorizingRealm'])
}}}
__Hinweis:__ Das Werkspasswort ist "admin123".
Datenbank komplett neu erstellen. Das Beispiel ist für config, kann auch mit security gemacht werden:
{{{
connect plocal:/nexus-data/db/config admin admin
export database config-export
drop database
create database plocal:/nexus-data/db/config
import database config-export.json.gz -preserveClusterIDs=true
rebuild index *
}}}
!!!Weitere Container
Im folgenden werden nützliche Container behandelt.
!!Minimal Bind (DNS)
Ein sehr minimalistisches Bind ist [cytopia/bind|https://hub.docker.com/r/cytopia/bind]. Das System enthält keine persistenten Daten. Die komplette Konfiguration wird durch Environment-Variablen gesteuert. Es wird lediglich Port 53 TCP und UDP freigegeben:
||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
!!Full Bind (DNS)
Ein komplettes Bind inklusive Webmin Adminstrationsoberfläche ist [sameersbn/bind|https://hub.docker.com/r/sameersbn/bind]. Der Service stellt die Ports 53 TCP und UDP, sowie 10.000 TCP für die Webmin-Oberfläche zur Verfügung. Letztlich interessant ist Servers -> BIND DNS Server. Factory login ist root/password, kann mit ROOT_PASSWORD gesetzt werden. A volume can be mounted on /data to persist the configuration:
* Github auf [https://github.com/sameersbn/docker-bind]
* [Context Path Ändern|https://stackoverflow.com/questions/27581863/webmin-login-keeps-looping-to-session-login-cgi]
!!Postfix
Ein komplettes Image für Postfix, Postfixadmin und Roundcube findet man unter [marooou/postfix-roundcube|https://hub.docker.com/r/marooou/postfix-roundcube].