====== Persistenz mit Volumes ======
Beispiel: Kartenansicht für GPX Track Dateien
git installieren:
apt install -y git
++++ RockyLinux |
dnf install -y git
++++
Quellcode laden:
git clone https://github.com/RalfNieuwenhuizen/routes-explorer.git
cd routes-explorer/
Dockerfile: Version hinzufügen
…
LABEL version="0.0.1"
Image bauen:
docker build -t='ingo/routes-explorer:0.0.1' .
===== Docker CLI =====
==== ohne Volume ====
Container starten:
docker container run -d -p 5000:5000 --name routes-explorer ingo/routes-explorer:0.0.1
GPX-Tracks aussuchen und herunterladen: https://wildnis-wandern.de/gpx-downloads/
http://localhost:5000
-> GPX-Dateien hochladen
Container updaten:
…
LABEL version="0.0.2"
docker build -t='ingo/routes-explorer:0.0.2' .
++++ Podman |
podman container run -d --replace -p 5000:5000 --name routes-explorer ingo/routes-explorer:0.0.2
++++
docker container rm -f routes-explorer
docker container run -d -p 5000:5000 --name routes-explorer ingo/routes-explorer:0.0.2
http://localhost:5000
-> GPX-Dateien sind weg
==== anonymes Volume ====
Container löschen:
docker container rm -f routes-explorer
Container starten:
docker container run -d --restart=always -v /routes -p 5000:5000 --name routes-explorer ingo/routes-explorer:0.0.1
http://localhost:5000
-> GPX-Dateien hochladen
docker inspect routes-explorer --format json | jq '.[0].Mounts'
-> die hochgeladenen GPX-Dateien liegen in "Source"
Container updaten:
++++ Podman |
podman container run -d --restart=always -v /routes -p 5000:5000 --name routes-explorer ingo/routes-explorer:0.0.2
++++
docker container rm -f routes-explorer
docker container run -d --restart=always -v /routes -p 5000:5000 --name routes-explorer ingo/routes-explorer:0.0.2
http://localhost:5000
-> GPX-Dateien sind nicht sichtbar: sie liegen noch in dem alten anonymen Volume.
docker volume ls
==== relativer Pfad ====
Container löschen:
docker container rm -f routes-explorer
Daten im Verzeichnis ''routes'' speichern:
mkdir routes
++++ Podman mit SELinux |
podman container run -d --restart=always -v ./routes:/routes:Z -p 5000:5000 --name routes-explorer ingo/routes-explorer:0.0.1
++++
docker container run -d --restart=always -v ./routes:/routes -p 5000:5000 --name routes-explorer ingo/routes-explorer:0.0.1
http://localhost:5000
-> GPX-Dateien hochladen
ls routes/
-> zeigt die hochgeladenen GPX-Dateien
Container updaten:
++++ Podman |
podman container run -d --replace --restart=always -v ./routes:/routes:Z -p 5000:5000 --name routes-explorer ingo/routes-explorer:0.0.2
++++
docker container rm -f routes-explorer
docker container run -d --restart=always -v ./routes:/routes -p 5000:5000 --name routes-explorer ingo/routes-explorer:0.0.2
http://localhost:5000
-> GPX-Dateien sind noch da
docker inspect routes-explorer --format json | jq '.[0].Mounts'
-> relativer Pfad wird von Docker als absoluter Pfad verarbeitet.
=== Sicherheit ===
container exec -it routes-explorer bash
cp /usr/bin/cat /routes
chmod u+sx,go+x /routes/cat
ls -l /routes/cat
exit
ls -l ./routes/cat
==== benanntes Volume ====
Container löschen:
docker container rm -f routes-explorer
Daten im Volume ''routes'' speichern:
docker volume create routes
docker container run -d --restart=always -v routes:/routes -p 5000:5000 --name routes-explorer ingo/routes-explorer:0.0.1
http://localhost:5000
-> GPX-Dateien hochladen
++++ Podman |
podman volume mount routes
++++
docker inspect routes-explorer --format json | jq '.[0].Mounts.[0].Source'
-> die hochgeladenen GPX-Dateien liegen in diesem Verzeichnis
Container updaten:
++++ Podman |
podman container run -d --replace --restart=always -v routes:/routes -p 5000:5000 --name routes-explorer ingo/routes-explorer:0.0.2
++++
docker container rm -f routes-explorer
docker container run -d --restart=always -v routes:/routes -p 5000:5000 --name routes-explorer ingo/routes-explorer:0.0.2
http://localhost:5000
-> GPX-Dateien sind noch da
===== Docker Compose =====
Docker CLI Container löschen:
docker container rm -f routes-explorer
Compose Verzeichnis anlegen:
mkdir -p /srv/docker/routes-explorer
cd /srv/docker/routes-explorer
==== ohne Volume ====
services:
routes-explorer:
image: ingo/routes-explorer:0.0.1
ports:
- "5000:5000"
Container starten:
docker compose up -d
http://localhost:5000
-> GPX-Dateien hochladen
Container updaten:
…
image: ingo/routes-explorer:0.0.2
…
docker compose up -d
http://localhost:5000
-> GPX-Dateien sind weg
==== anonymes Volume ====
Container löschen:
docker compose down
Container starten:
…
image: ingo/routes-explorer:0.0.1
volumes:
- /routes
Container starten:
docker compose up -d
http://localhost:5000
-> GPX-Dateien hochladen
++++ Podman |
podman inspect routes-explorer_routes-explorer_1 --format json | jq '.[0].Mounts'
++++
docker inspect routes-explorer-routes-explorer-1 --format json | jq '.[0].Mounts'
-> die hochgeladenen GPX-Dateien liegen in "Source"
Container updaten:
…
image: ingo/routes-explorer:0.0.2
…
docker compose up -d
http://localhost:5000
-> GPX-Dateien sind sind noch da ;-)
docker volume ls
==== relativer Pfad ====
Container löschen:
docker compose down
Daten im Verzeichnis ''routes'' speichern:
mkdir routes
++++ Podman mit SELinux |
…
image: ingo/routes-explorer:0.0.1
volumes:
- ./routes:/routes:Z
++++
…
image: ingo/routes-explorer:0.0.1
volumes:
- ./routes:/routes
restart: unless-stopped
Container starten:
docker compose up -d
http://localhost:5000
-> GPX-Dateien hochladen
ls routes/
-> zeigt die hochgeladenen GPX-Dateien
Container updaten:
…
image: ingo/routes-explorer:0.0.2
…
docker compose up -d
http://localhost:5000
-> GPX-Dateien sind noch da
++++ Podman |
docker inspect routes-explorer_routes-explorer_1 --format json | jq '.[0].Mounts'
++++
-> relativer Pfad wird von Docker als absoluter Pfad verarbeitet.
==== benanntes Volume ====
Container löschen:
docker compose down
…
image: ingo/routes-explorer:0.0.1
volumes:
- routes:/routes
restart: unless-stopped
…
volumes:
routes:
Container starten:
docker compose up -d
http://localhost:5000
-> GPX-Dateien hochladen
++++ Podman |
podman volume mount routes
++++
docker inspect routes-explorer-routes-explorer-1 --format json | jq '.[0].Mounts.[0].Source'
-> die hochgeladenen GPX-Dateien liegen in diesem Verzeichnis
Container updaten:
…
image: ingo/routes-explorer:0.0.2
…
docker compose up -d
http://localhost:5000
-> GPX-Dateien sind noch da
===== Übersicht =====
^ ^ Docker CLI ^ compose ^
^ ohne Volume | nicht persistent | nicht persistent |
^ anonymes Volume | nicht sichtbar | persistent |
^ relativer Pfad | persistent | persistent |
^ benantes Volume | persistent | persistent |