====== 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 |