Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
docker [13/11/2023 - 11:02] – [Docker Compose] thommie4 | docker [08/06/2025 - 10:35] (aktuell) – thommie_netzwissen.de | ||
---|---|---|---|
Zeile 11: | Zeile 11: | ||
Docker Daten-Ablage auf btrfs Partition verlagern | Docker Daten-Ablage auf btrfs Partition verlagern | ||
+ | root@docker3:/ | ||
< | < | ||
- | root@docker3:/ | ||
{ | { | ||
Zeile 18: | Zeile 18: | ||
" | " | ||
} | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Docker Build ===== | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | Der Build geht immer von einem Dockerfile aus: [[https:// | ||
+ | < | ||
+ | |||
+ | # Use official Alpine release | ||
+ | FROM alpine: | ||
+ | |||
+ | # Maintainer | ||
+ | LABEL maintainer=" | ||
+ | LABEL version=" | ||
+ | LABEL description=" | ||
+ | |||
+ | ENV RADSECVERSION 1.11.0 | ||
+ | ENV RADSECURL https:// | ||
+ | ENV RADSECFILENAME radsecproxy-${RADSECVERSION}.tar.gz | ||
+ | |||
+ | # Change working dir | ||
+ | WORKDIR /root | ||
+ | |||
+ | # Update apk | ||
+ | RUN apk update | ||
+ | |||
+ | # Install buildtools | ||
+ | RUN apk add --no-cache make g++ openssl-dev nettle-dev musl-dev | ||
+ | |||
+ | # Create output dir | ||
+ | RUN mkdir output | ||
+ | |||
+ | # Download radsecproxy source files | ||
+ | RUN wget ${RADSECURL}${RADSECFILENAME} | ||
+ | |||
+ | # Untar radsecproxy | ||
+ | RUN tar xf ${RADSECFILENAME} --strip-components=1 | ||
+ | |||
+ | # Configure | ||
+ | RUN ./configure --prefix=/ | ||
+ | |||
+ | # Make and install to output dir | ||
+ | RUN make && make install | ||
+ | |||
+ | # Create radsecproxy container | ||
+ | FROM alpine: | ||
+ | |||
+ | # Update apk | ||
+ | RUN apk update | ||
+ | |||
+ | # Install openssl, ca-certificates, | ||
+ | RUN apk add --no-cache openssl ca-certificates bash nettle tini | ||
+ | |||
+ | # Copy from ' | ||
+ | COPY --from=build / | ||
+ | # COPY --from=build / | ||
+ | |||
+ | # create config directory and add certs | ||
+ | RUN mkdir / | ||
+ | COPY radsecproxy/ | ||
+ | COPY certs/ | ||
+ | |||
+ | # Copy start.sh | ||
+ | COPY start.sh / | ||
+ | |||
+ | # Make start.sh executeable | ||
+ | RUN chmod u+x / | ||
+ | |||
+ | # Create Radsecproxy logging | ||
+ | RUN mkdir / | ||
+ | |||
+ | # Export volumes | ||
+ | VOLUME / | ||
+ | |||
+ | # Make Radsecproxy' | ||
+ | EXPOSE 2083 | ||
+ | |||
+ | # Set Tini entrypoint | ||
+ | # https:// | ||
+ | ENTRYPOINT ["/ | ||
+ | |||
+ | # Start Radsecproxy | ||
+ | CMD ["/ | ||
+ | |||
+ | </ | ||
+ | |||
+ | Dockerfile Syntax check | ||
+ | |||
+ | < | ||
+ | docker build --check . | ||
+ | |||
+ | </ | ||
+ | |||
+ | Der Build wird normalerweise gecacht, das kann man abschalten: | ||
+ | |||
+ | < | ||
+ | docker --no-cache build . | ||
+ | |||
+ | </ | ||
+ | |||
+ | Docker build ohne cache, aber mit tag: | ||
+ | |||
+ | < | ||
+ | docker build --no-cache -t thommie/ | ||
+ | |||
+ | </ | ||
+ | |||
+ | Danach kann man das image in einen Registry schieben, z.B. die Docker Registry. | ||
+ | |||
+ | < | ||
+ | docker login | ||
+ | |||
+ | </ | ||
+ | |||
+ | Neu: mit Versionsnummer taggen | ||
+ | |||
+ | < | ||
+ | docker tag thommie/ | ||
+ | |||
+ | </ | ||
+ | |||
+ | Und dann hochladen: | ||
+ | |||
+ | < | ||
+ | thommie@odysseus4: | ||
+ | fef40b964b90: | ||
+ | a0cb24bdb2c8: | ||
+ | a105c78eaead: | ||
+ | b10598bffc84: | ||
+ | 5e1cdb76f1d7: | ||
+ | c903625bb716: | ||
+ | 8b191fa4fbcc: | ||
+ | 4b606c4525db: | ||
+ | 7e4e46af816c: | ||
+ | b895814e9e64: | ||
+ | v1: digest: sha256: | ||
+ | |||
+ | </ | ||
+ | |||
+ | < | ||
+ | thommie@odysseus3: | ||
+ | Sending build context to Docker daemon | ||
+ | Step 1/3 : FROM freeradius/ | ||
+ | | ||
+ | Step 2/3 : COPY raddb/ /etc/raddb/ | ||
+ | | ||
+ | Step 3/3 : EXPOSE 1812-1813/ | ||
+ | | ||
+ | Removing intermediate container 6d5f572b0a8b | ||
+ | | ||
+ | Successfully built c6c0d41f944a | ||
+ | |||
</ | </ | ||
Zeile 38: | Zeile 192: | ||
discourse/ | discourse/ | ||
xbrowsersync/ | xbrowsersync/ | ||
+ | |||
</ | </ | ||
Zeile 44: | Zeile 199: | ||
< | < | ||
docker image rm [id] | docker image rm [id] | ||
+ | |||
</ | </ | ||
- | Image Repo aufräumen und ungenutzte Images löschen | + | Image Repo aufräumen und ungenutzte Images löschen |
< | < | ||
docker image prune [OPTIONS] | docker image prune [OPTIONS] | ||
+ | |||
</ | </ | ||
Zeile 56: | Zeile 213: | ||
< | < | ||
docker image prune -a | docker image prune -a | ||
+ | |||
</ | </ | ||
- | ==== Container | + | ==== Container |
- | Alle Container | + | '' |
- | <code> | + | <file> |
- | docker | + | docker |
- | docker rm $(docker ps -a -q) | + | |
- | docker rmi $(docker images | + | |
- | </code> | + | |
- | Container aus heruntergeladenem Image erzeugen | + | </ |
- | + | ||
- | '' | + | |
Alle laufenden und gestoppten Container zeigen: | Alle laufenden und gestoppten Container zeigen: | ||
Zeile 84: | Zeile 237: | ||
7c3cd1abf744 | 7c3cd1abf744 | ||
05f7f43d0493 | 05f7f43d0493 | ||
+ | |||
</ | </ | ||
Zeile 96: | Zeile 250: | ||
b39916cf84e2 | b39916cf84e2 | ||
e6e7c809ad34 | e6e7c809ad34 | ||
+ | |||
</ | </ | ||
Zeile 106: | Zeile 261: | ||
< | < | ||
docker stop $ (docker ps -a -q) docker rm $(docker ps -a -q) | docker stop $ (docker ps -a -q) docker rm $(docker ps -a -q) | ||
+ | |||
</ | </ | ||
Zeile 113: | Zeile 269: | ||
root@develd: | root@develd: | ||
e6e7c809ad34 | e6e7c809ad34 | ||
+ | |||
</ | </ | ||
Zeile 119: | Zeile 276: | ||
< | < | ||
docker container prune | docker container prune | ||
+ | |||
</ | </ | ||
Restart policy ändern | Restart policy ändern | ||
- | < | + | < |
+ | docker update --restart=no matrix_synapse_1 | ||
</ | </ | ||
+ | ==== Container Management ==== | ||
+ | |||
+ | Alle Container auf einmal stoppen | ||
+ | |||
+ | < | ||
+ | docker kill $(docker ps -q) | ||
+ | docker rm $(docker ps -a -q) | ||
+ | docker rmi $(docker images -q) | ||
+ | |||
+ | </ | ||
==== Einen Container betreten ==== | ==== Einen Container betreten ==== | ||
- | < | + | < |
+ | docker exec -t -i container_ID /bin/bash | ||
</ | </ | ||
Alternativ: stdin/out an den Container hängen: | Alternativ: stdin/out an den Container hängen: | ||
- | < | + | < |
+ | docker attach [OPTIONS] CONTAINER | ||
</ | </ | ||
Achtung: wieder raus mit **CTRL-p CTRL-q. **Details siehe [[https:// | Achtung: wieder raus mit **CTRL-p CTRL-q. **Details siehe [[https:// | ||
- | ===== Docker Dompose | + | ===== Image Management |
- | Docker Compose erzeugt Docker Applikationen, | + | Image wegsichern |
+ | < | ||
- | - Das Dockerfile definiert die Laufzeit-Umgebung | + | docker |
- | - docker-compose.yml beschreibt die Services, die in Containern zusammen arbeiten | + | |
- | | + | |
- | Achtung: Die python basierten Docker Versionen (V1) in manchen Distro-Repos sind veraltet. Es empfiehlt sich, die V2 aus https:// | + | </code> |
- | + | ||
- | < | + | |
- | Um docker-compose files im Format V1 auszuführen, | + | Das image kann man dann woanders hin transferieren |
< | < | ||
- | root@docker2:/usr/ | + | root@docker3a:/etc/docker/passbolt# docker load -i mariadb_10.11.tar |
- | | + | 270a1170e7e3: Loading layer [==================================================> |
- | Dload Upload | + | 6d035e66c4fd: |
- | 100 1410 100 1410 0 | + | 1a966a87cda4: |
- | % Total % Received % Xferd Average Speed | + | 76a062be1274: |
- | Dload Upload | + | 4cc02cc5cc3f: Loading layer [==================================================> |
- | | + | d714cd160054: |
- | 100 2884k 100 2884k 0 | + | 56f8438cbcbd: Loading layer [==================================================> |
- | /usr/ | + | 03543ca2a586: Loading layer [==================================================> |
- | Configuring docker-compose alternatives | + | The image mariadb:10.11 already exists, renaming the old one with ID sha256: |
- | update-alternatives: /usr/ | + | Loaded image: mariadb: |
- | update-alternatives: / | + | |
- | ' | + | |
- | use ' | + | |
</ | </ | ||
- | Test | + | ===== Docker Compose ===== |
- | < | + | Docker Compose erzeugt Docker Applikationen, |
- | root@docker2:/ | + | |
- | docker-compose - automatischer Modus | + | |
- | beste Version des Links ist /usr/local/bin/compose-switch | + | |
- | Link verweist zur Zeit auf /usr/local/bin/compose-switch | + | - " |
- | Link docker-compose ist /usr/local/bin/docker-compose | + | |
- | / | + | Achtung: Die python basierten Docker Versionen (V1) in manchen Distro-Repos sind veraltet. Es empfiehlt sich, die V2 aus [[https://github.com/docker/compose|https://github.com/docker/compose]] zu benutzen, die in GOLANG neu geschrieben wurde. Installation siehe [[https://github.com/ |
- | /usr/local/bin/docker-compose-v1 - Priorität 1 | + | |
- | </code> | + | |
- | ===== compose yaml validieren ===== | + | < |
+ | compose yaml validieren | ||
< | < | ||
+ | |||
docker compose -f docker-compose-pro.yaml config | docker compose -f docker-compose-pro.yaml config | ||
+ | |||
</ | </ | ||
- | + | ==== Update per docker compose ==== | |
- | ====== Update per docker compose | + | |
Update der Images, die im compose file referenziert sind | Update der Images, die im compose file referenziert sind | ||
< | < | ||
- | docker compose pull | + | docker compose |
</ | </ | ||
- | Daraus die Container neu bauen und startenb | + | Daraus die Container neu bauen und starten |
< | < | ||
- | docker compose up --build | + | docker compose |
</ | </ | ||
+ | |||
+ | Bauen **ohne** | ||
< | < | ||
- | docker compose up --force-recreate --build | + | docker compose |
</ | </ | ||
- | + | Docker Compose startet Container nicht daemonisiert. | |
- | Docker Compose startet | + | |
< | < | ||
- | docker compose up -d | + | docker compose up --force-recreate --build |
</ | </ | ||
- | Üblicherweise | + | Um Container als Daemon zu starten, |
===== Docker Netzwerke ===== | ===== Docker Netzwerke ===== | ||
- | Standardmässig werden drei Netze bridge, host, none angelegt. Alle anderen sind custom Networks, die z.B: über compose angelegt wurden: | + | Standardmässig werden drei Netze bridge, host, none angelegt. Alle anderen sind custom Networks, die z.B. über compose angelegt wurden: |
- | < | + | < |
+ | root@docker1: | ||
NETWORK ID | NETWORK ID | ||
54e670dd998d | 54e670dd998d | ||
Zeile 227: | Zeile 403: | ||
c91196bf89eb | c91196bf89eb | ||
b4f69adafbb3 | b4f69adafbb3 | ||
+ | |||
</ | </ | ||
Container werden an die bridge " | Container werden an die bridge " | ||
+ | |||
+ | Dies zeigt den Zustand eines Docker networks | ||
< | < | ||
docker network inspect bridge | docker network inspect bridge | ||
+ | |||
</ | </ | ||
- | sieht man den Zustand eines Docker networks | + | ==== Docker |
- | + | ||
- | ==== Custom networks ==== | + | |
docker network create erzeugt ein eigenes Netzwerk: | docker network create erzeugt ein eigenes Netzwerk: | ||
Zeile 243: | Zeile 421: | ||
< | < | ||
docker network create –subnet 192.168.82.0/ | docker network create –subnet 192.168.82.0/ | ||
+ | |||
</ | </ | ||
+ | |||
+ | Danach anschauen | ||
< | < | ||
- | locutus:/ | + | locutus:/ |
</ | </ | ||
Zeile 253: | Zeile 435: | ||
< | < | ||
docker attach container1 | docker attach container1 | ||
+ | |||
</ | </ | ||
- | sieht man das Netzwerk | + | sieht man das Netzwerk |
- | ===== Docker logs ===== | + | ===== |
- | + | ||
- | Analog zu tail -f: | + | |
- | + | ||
- | < | + | |
- | docker logs --follow | + | |
- | </ | + | |
===== Docker volumes ===== | ===== Docker volumes ===== | ||
- | Volumes sind Verzeichnisse/ | + | Volumes sind Verzeichnisse/ |
- | Volumes werden vom Docker Dämon gemanagt, | + | |
- | Doku: https:// | + | Doku: [[https:// |
In compose: | In compose: | ||
< | < | ||
+ | |||
services: | services: | ||
frontend: | frontend: | ||
Zeile 282: | Zeile 459: | ||
myapp: | myapp: | ||
external: true | external: true | ||
+ | |||
</ | </ | ||
- | Syntax: **[lokales volume Verzeichnis Host]: | + | Allgemeine |
- | Immer relativ zum compose file gesehen! | + | Die Verzeichnisorte werden immer relativ zum Ort des compose file gesehen! |
- | ===== Docker build ===== | + | |
+ | ====== Portainer | ||
< | < | ||
- | thommie@odysseus3: | + | docker |
- | Sending build context to Docker daemon | + | |
- | Step 1/3 : FROM freeradius/ | + | |
- | ---> 0a093ead10b6 | + | |
- | Step 2/3 : COPY raddb/ /etc/raddb/ | + | |
- | ---> 096f00c66db0 | + | |
- | Step 3/3 : EXPOSE 1812-1813/udp | + | |
- | ---> Running in 6d5f572b0a8b | + | |
- | Removing intermediate container 6d5f572b0a8b | + | |
- | | + | |
- | Successfully built c6c0d41f944a | + | |
</ | </ | ||
- | ===== Kubernetes | + | ====== Logging ====== |
- | * Auf Ubuntu: [[http:// | + | Docker logs direkt lesen, analog zu tail -f: |
- | * Offizielle Tutorials: [[https:// | + | |
- | * weitere: [[https:// | + | |
- | ==== Begrifflichkeiten ==== | + | < |
+ | docker logs --follow [containerid] | ||
- | * Master = koordiniert den Cluster über die Kubernetes API - auf dem Master laufen keine Pods | + | </ |
- | * Node = Maschine, auf der Cluster (Pod) laufen (kann eine oder mehrere phys. Maschine oder VMs sein) | + | |
- | * Pod = einer oder mehrere Container, die gemeinsam Ressourcen nutzen (z.B. gemeinsamer Speicherplatz, | + | |
- | * Service: Funktion, die von einem oder mehreren Pods bereitgestellt wird | + | |
- | ==== Minikube - zum Üben ==== | + | Umleiten der log Ausgabe nach journald mit setting in der daemon.json |
- | Minikube is a tool that makes it easy to run Kubernetes locally. Minikube runs a single-node Kubernetes cluster inside a VM on your laptop for users looking to try out Kubernetes or develop with it day-to-day. | + | < |
+ | { | ||
+ | " | ||
+ | "log-driver": | ||
+ | } | ||
- | [[https:// | + | </code> |
- | '' | + | < |
+ | journalctl | ||
- | **Linux CI Installation Which Supports Running in a VM (example w/ kubectl installation)** | + | </code> |
- | '' | + | ====== Docker commit |
- | dann | + | Auf der Quellmaschine wir der Container in ein image commited. Während des Commits wird der Container pausiert. |
- | '' | + | < |
+ | '' | ||
- | und | + | </ |
- | '' | + | Danach packt man das image in einen tarball |
- | Minikube mit node.js hello world applikation: | + | < |
+ | '' | ||
- | [[https:// | + | </code> |
- | ===== Portainer ===== | + | Der Container wird auf die neue Maschien transferiert und dort ausgepackt. |
< | < | ||
- | docker | + | '' |
</ | </ | ||
+ | |||
+ | Danach baut man aus dem transferierten Image einen neuen Container. | ||
+ | |||
+ | < | ||
+ | '' | ||
+ | |||
+ | </ | ||
+ | |||
+ | **Achtung: volumes und Netzwerke werden nicht transferiert!** | ||
+ | |||
+ |