docker

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
docker [19/09/2022 - 17:54] thommie4docker [08/06/2025 - 10:35] (aktuell) thommie_netzwissen.de
Zeile 9: Zeile 9:
   * Docker UI: [[http://linoxide.com/linux-how-to/setup-dockerui-web-interface-docker/|http://linoxide.com/linux-how-to/setup-dockerui-web-interface-docker/]]   * Docker UI: [[http://linoxide.com/linux-how-to/setup-dockerui-web-interface-docker/|http://linoxide.com/linux-how-to/setup-dockerui-web-interface-docker/]]
  
-Docker Daten-Ablage verlagern+Docker Daten-Ablage auf btrfs Partition verlagern
  
 +root@docker3:/etc/docker/daemon.json
 <code> <code>
-root@docker3:/etc/docker# less daemon.json  
  
 { {
-  "graph":  "/mnt/data/docker"+   "storage-driver": "btrfs", 
 +   "data-root":  "/mnt/data/docker"
 } }
 +
 +</code>
 +
 +===== Docker Build =====
 +
 +[[https://stackify.com/docker-build-a-beginners-guide-to-building-docker-images/|https://stackify.com/docker-build-a-beginners-guide-to-building-docker-images/]]
 +
 +Der Build geht immer von einem Dockerfile aus: [[https://docs.docker.com/reference/dockerfile/|https://docs.docker.com/reference/dockerfile/]] und erzeugt ein Image
 +<code>
 +
 +# Use official Alpine release
 +FROM alpine:3.19.3 as build
 +
 +# Maintainer
 +LABEL maintainer="Thomas Rother <thomas.rother@devoteam.com>"
 +LABEL version="1.2"
 +LABEL description="radsec proxy server for remote RADIUS operation with TLS security"
 +
 +ENV RADSECVERSION 1.11.0
 +ENV RADSECURL https://github.com/radsecproxy/radsecproxy/releases/download/${RADSECVERSION}/
 +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=/root/output --sysconfdir=/etc
 +
 +# Make and install to output dir
 +RUN make && make install
 +
 +# Create radsecproxy container
 +FROM alpine:3.19.3
 +
 +# Update apk
 +RUN apk update
 +
 +# Install openssl, ca-certificates, nettle and tini
 +RUN apk add --no-cache openssl ca-certificates bash nettle tini
 +
 +# Copy from 'build' stage
 +COPY --from=build /root/output/ /
 +# COPY --from=build /root/radsecproxy.conf-example /etc/radsecproxy/radsecproxy.conf
 +
 +# create config directory and add certs
 +RUN mkdir /etc/radsecproxy/
 +COPY radsecproxy/ /etc/radsecproxy/
 +COPY certs/       /etc/radsecproxy/
 +
 +# Copy start.sh
 +COPY start.sh /root/start.sh
 +
 +# Make start.sh executeable
 +RUN chmod u+x /root/start.sh
 +
 +# Create Radsecproxy logging
 +RUN mkdir /var/log/radsecproxy
 +
 +# Export volumes
 +VOLUME /var/log/radsecproxy
 +
 +# Make Radsecproxy's ports available
 +EXPOSE 2083
 +
 +# Set Tini entrypoint
 +# https://computingpost.medium.com/how-to-use-tini-init-system-in-docker-containers-69283d0099ed
 +ENTRYPOINT ["/sbin/tini", "--"]
 +
 +    # Start Radsecproxy
 +    CMD ["/root/start.sh"]
 +
 +</code>
 +
 +Dockerfile Syntax check
 +
 +<code>
 +docker build --check .
 +
 +</code>
 +
 +Der Build wird normalerweise gecacht, das kann man abschalten:
 +
 +<code>
 +docker --no-cache build .
 +
 +</code>
 +
 +Docker build ohne cache, aber mit tag:
 +
 +<code>
 +docker build --no-cache -t thommie/freeradius01:v1 .
 +
 +</code>
 +
 +Danach kann man das image in einen Registry schieben, z.B. die Docker Registry.
 +
 +<code>
 +docker login
 +
 +</code>
 +
 +Neu: mit Versionsnummer taggen
 +
 +<code>
 +docker tag thommie/radsecproxymb psammechinus/radsecproxymb:v1
 +
 +</code>
 +
 +Und dann hochladen:
 +
 +<code>
 +thommie@odysseus4:~/Dokumente/docker/radsecproxy> docker push psammechinus/radsecproxymb:v1The push refers to repository [docker.io/psammechinus/radsecproxymb]
 +fef40b964b90: Pushed
 +a0cb24bdb2c8: Pushed
 +a105c78eaead: Pushed
 +b10598bffc84: Pushed
 +5e1cdb76f1d7: Pushed
 +c903625bb716: Pushed
 +8b191fa4fbcc: Pushed
 +4b606c4525db: Pushed
 +7e4e46af816c: Pushed
 +b895814e9e64: Pushed
 +v1: digest: sha256:64c0f5a9498a66bb5714efbda60263fd42886d3420b51ec89e3a0b56df08bba3 size: 2404
 +
 +</code>
 +
 +<code>
 +thommie@odysseus3:~/git/gitea/dockerbuilds/myradius> docker build -f myradius.docker .
 +Sending build context to Docker daemon  5.632kB
 +Step 1/3 : FROM freeradius/freeradius-server:latest
 + ---> 0a093ead10b6
 +Step 2/3 : COPY raddb/ /etc/raddb/
 + ---> 096f00c66db0
 +Step 3/3 : EXPOSE 1812-1813/udp
 + ---> Running in 6d5f572b0a8b
 +Removing intermediate container 6d5f572b0a8b
 + ---> c6c0d41f944a
 +Successfully built c6c0d41f944a
 +
 </code> </code>
  
Zeile 37: Zeile 192:
 discourse/base             2.0.20201004-2310   b64c37d7ab06   6 months ago    2.4GB discourse/base             2.0.20201004-2310   b64c37d7ab06   6 months ago    2.4GB
 xbrowsersync/api           latest              a3554c99cc99   12 months ago   119MB xbrowsersync/api           latest              a3554c99cc99   12 months ago   119MB
 +
 </code> </code>
  
Zeile 43: Zeile 199:
 <code> <code>
 docker image rm [id] docker image rm [id]
 +
 </code> </code>
  
-Image Repo aufräumen und ungenutzte Images löschen +Image Repo aufräumen und ungenutzte Images löschen
  
 <code> <code>
 docker image prune [OPTIONS] docker image prune [OPTIONS]
 +
 </code> </code>
  
Zeile 55: Zeile 213:
 <code> <code>
 docker image prune -a docker image prune -a
-</code> 
  
-==== Container Management ==== 
- 
-Alle Container auf einmal stoppen 
- 
-<code> 
-    docker kill $(docker ps -q) 
-    docker rm $(docker ps -a -q) 
-    docker rmi $(docker images -q) 
 </code> </code>
  
-Container aus heruntergeladenem Image erzeugen+==== Container aus heruntergeladenem Image erzeugen ====
  
 ''docker create''  erzeugt den Container und startet ihn **nicht,**  ''docker run''  macht beides. ''docker create''  erzeugt den Container und startet ihn **nicht,**  ''docker run''  macht beides.
 +
 +<file>
 +docker run --name radiusclient -p 1812-1813:1812-1813/udp -d radsecclient:v1
 +
 +</file>
  
 Alle laufenden und gestoppten Container zeigen: Alle laufenden und gestoppten Container zeigen:
Zeile 83: Zeile 237:
 7c3cd1abf744   local_discourse/web_only   "/sbin/boot"   4 weeks ago    Up 5 days     127.0.0.1:84->80/tcp   web_only 7c3cd1abf744   local_discourse/web_only   "/sbin/boot"   4 weeks ago    Up 5 days     127.0.0.1:84->80/tcp   web_only
 05f7f43d0493   local_discourse/data       "/sbin/boot"   5 months ago   Up 5 days                            data 05f7f43d0493   local_discourse/data       "/sbin/boot"   5 months ago   Up 5 days                            data
 +
 </code> </code>
  
Zeile 95: Zeile 250:
 b39916cf84e2 b39916cf84e2
 e6e7c809ad34 e6e7c809ad34
 +
 </code> </code>
  
Zeile 105: Zeile 261:
 <code> <code>
 docker stop $ (docker ps -a -q) docker rm $(docker ps -a -q) docker stop $ (docker ps -a -q) docker rm $(docker ps -a -q)
 +
 </code> </code>
  
Zeile 112: Zeile 269:
 root@develd:~# docker rm e6e7c809ad34 root@develd:~# docker rm e6e7c809ad34
 e6e7c809ad34 e6e7c809ad34
 +
 </code> </code>
  
Zeile 118: Zeile 276:
 <code> <code>
 docker container prune docker container prune
 +
 </code> </code>
  
 Restart policy ändern Restart policy ändern
  
-<code>docker update --restart=no matrix_synapse_1+<code> 
 +docker update --restart=no matrix_synapse_1 
 </code> </code>
  
 +==== Container Management ====
 +
 +Alle Container auf einmal stoppen
 +
 +<code>
 +    docker kill $(docker ps -q)
 +    docker rm $(docker ps -a -q)
 +    docker rmi $(docker images -q)
 +
 +</code>
  
 ==== Einen Container betreten ==== ==== Einen Container betreten ====
  
-<code>docker exec -t -i container_ID /bin/bash+<code> 
 +docker exec -t -i container_ID /bin/bash 
 </code> </code>
  
 Alternativ: stdin/out an den Container hängen: Alternativ: stdin/out an den Container hängen:
  
-<code>docker attach [OPTIONS] CONTAINER+<code> 
 +docker attach [OPTIONS] CONTAINER 
 </code> </code>
  
 Achtung: wieder raus mit **CTRL-p CTRL-q. **Details siehe [[https://docs.docker.com/engine/reference/commandline/attach/|https://docs.docker.com/engine/reference/commandline/attach/]] Achtung: wieder raus mit **CTRL-p CTRL-q. **Details siehe [[https://docs.docker.com/engine/reference/commandline/attach/|https://docs.docker.com/engine/reference/commandline/attach/]]
  
-===== Docker Compose V2=====+===== Image Management ===== 
 + 
 +Image wegsichern 
 +<code> 
 + 
 +docker save -o mariadb:10.11.tar [Image-ID] 
 + 
 +</code> 
 + 
 +Das image kann man dann woanders hin transferieren (scp) und mit docker load dort neu bereitstellen. Ein schon vorhandenes Image mit gleichem Namen wird umbenannt: 
 + 
 +<code> 
 +root@docker3a:/etc/docker/passbolt# docker load -i mariadb_10.11.tar 
 +270a1170e7e3: Loading layer [==================================================> 80.41MB/80.41MB 
 +6d035e66c4fd: Loading layer [==================================================> 337.9kB/337.9kB 
 +1a966a87cda4: Loading layer [==================================================> 16.31MB/16.31MB 
 +76a062be1274: Loading layer [==================================================> 1.536kB/1.536kB 
 +4cc02cc5cc3f: Loading layer [==================================================>  5.12kB/5.12kB 
 +d714cd160054: Loading layer [==================================================> 235.5MB/235.5MB 
 +56f8438cbcbd: Loading layer [==================================================> 13.82kB/13.82kB 
 +03543ca2a586: Loading layer [==================================================>  29.7kB/29.7kB 
 +The image mariadb:10.11 already exists, renaming the old one with ID sha256:ba7defb864a8f2bba6824a7991b8569abc8cc053938493e0d559d539103ec6bd to empty string 
 +Loaded image: mariadb:10.11 
 + 
 +</code> 
 + 
 +===== Docker Compose =====
  
-Docker Compose erzeugt Docker Applikationen, die aus mehreren Containern bestehen. docker-compose up startet alles im Verbund.+Docker Compose erzeugt Docker Applikationen, die aus mehreren Containern bestehen. docker compose up startet alles im Verbund.
  
   - Das Dockerfile definiert die Laufzeit-Umgebung   - Das Dockerfile definiert die Laufzeit-Umgebung
Zeile 146: Zeile 347:
   - "docker compose up" erzeugt und startet die gesamte Applikation   - "docker compose up" erzeugt und startet die gesamte Applikation
  
-Achtung: Die python basierten Docker Versionen (V1) in den Distro-Repos sind meist veraltet. Es empfiehlt sich, die V2 aus https://github.com/docker/compose zu benutzen, die in GOLANG neu geschrieben wurde.+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/docker/compose/|https://github.com/docker/compose/]]
  
-Installation siehe https://github.com/docker/compose/ +<badge>HinweisFür Raspis wird das Binary für …-linux-armv7 benutzt (ARM Architektur)</badge>
- +
-Um docker-compose files im Format V1 auszuführen, gibt es "compose switch": https://github.com/docker/compose-switch. Dafür muss das golang binary in /usr/local/lib/docker/cli-plugins/docker-compose vorhanden sein. composer switch bindet composer V2 so ein, dass man mit update-alternatives zwischen V1 (pythonund V2 (golang) wechseln kann.+
  
 +compose yaml validieren
 <code> <code>
-root@docker2:/usr/local/lib/docker/cli-plugins# curl -fL https://raw.githubusercontent.com/docker/compose-switch/master/install_on_linux.sh | sh 
-  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current 
-                                 Dload  Upload   Total   Spent    Left  Speed 
-100  1410  100  1410    0       7230      0 --:--:-- --:--:-- --:--:--  7230 
-  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current 
-                                 Dload  Upload   Total   Spent    Left  Speed 
-  0        0        0          0      0 --:--:-- --:--:-- --:--:--     0 
-100 2884k  100 2884k    0      5291k      0 --:--:-- --:--:-- --:--:-- 5291k 
-/usr/bin/update-alternatives 
-Configuring docker-compose alternatives 
-update-alternatives: /usr/local/bin/docker-compose-v1 wird verwendet, um /usr/local/bin/docker-compose (docker-compose) im automatischen Modus bereitzustellen 
-update-alternatives: /usr/local/bin/compose-switch wird verwendet, um /usr/local/bin/docker-compose (docker-compose) im automatischen Modus bereitzustellen 
-'docker-compose' is now set to run Compose V2 
-use 'update-alternatives --config docker-compose' if you want to switch back to Compose V1 
-</code> 
  
-Test+docker compose -f docker-compose-pro.yaml config
  
-<code> 
-root@docker2:/usr/local/lib/docker/cli-plugins# update-alternatives --display docker-compose 
-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 
-/usr/local/bin/compose-switch - Priorität 99 
-/usr/local/bin/docker-compose-v1 - Priorität 1 
 </code> </code>
  
-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
  
 <code> <code>
-docker-compose pull+docker compose -f docker-compose-pro.yaml pull 
 </code> </code>
  
-Daraus die Container neu bauen und startenb+Daraus die Container neu bauen und starten
  
 <code> <code>
-docker-compose up --build+docker compose -f docker-compose-pro.yaml up --build 
 </code> </code>
 +
 +Bauen **ohne**  caching und dann starten
  
 <code> <code>
-docker-compose up --force-recreate --build -d+docker compose -f docker-compose-pro.yaml up --force-recreate --build 
 </code> </code>
 +
 +Docker Compose startet Container nicht daemonisiert. Dafür -d hinzufügen:
 +
 +<code>
 +docker compose up --force-recreate --build -d
 +
 +</code>
 +
 +Um Container als Daemon zu starten, nimmt man systemd.
  
 ===== Docker Netzwerke ===== ===== Docker Netzwerke =====
  
-Standardmässig werden drei Netze angelegt:+Standardmässig werden drei Netze bridge, host, none angelegt. Alle anderen sind custom Networks, die z.B. über compose angelegt wurden:
  
 <code> <code>
-root@nas:~# docker network ls NETWORK ID NAME DRIVER SCOPE c14b1455af82 bridge bridge local d80bf7ff4673 host host local 269bb4261727 none null local cd1ba9150e2f ownclouddockerserver_default bridge local+root@docker1:~# docker network ls 
 +NETWORK ID     NAME           DRIVER    SCOPE 
 +54e670dd998d   bridge         bridge    local 
 +5b1cd745d5a3   docker_back    bridge    local 
 +b56f108784b3   docker_dbnet   bridge    local 
 +f3619965eb7b   docker_front   bridge    local 
 +c91196bf89eb   host           host      local 
 +b4f69adafbb3   none           null      local 
 </code> </code>
  
-Container werden an die bridge (entspricht docker0 auf dem Hostgebunden, solange nicht beim docker create ein anderes Netzwerk gewählt wurde (''docker create –network=<NETWORK>'')+Container werden an die bridge "docker0auf dem Host gebunden, solange nicht beim docker create ein anderes Netzwerk gewählt wurde (''docker create –network=<NETWORK>''). Mit
  
-Mit+Dies zeigt den Zustand eines Docker networks
  
 <code> <code>
 docker network inspect bridge docker network inspect bridge
 +
 </code> </code>
  
-sieht man den Zustand der Docker Bridge +==== Docker Custom networks ====
- +
-==== Custom networks ====+
  
 docker network create erzeugt ein eigenes Netzwerk: docker network create erzeugt ein eigenes Netzwerk:
  
-''docker network create –subnet 192.168.82.0/24 –driver bridge bridge2''+<code> 
 +docker network create –subnet 192.168.82.0/24 –driver bridge bridge2
  
-''locutus:/home/thommie # docker network inspect bridge2 [ { "Name": "bridge2", "Id": "9c353bcf0c2c6ccee0b821e1ff4d1740a074bdea94e93959c522d46a4e6fde8e", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "192.168.82.0/24" } ] }, "Internal": false, "Containers": {}, "Options": {}, "Labels": {} } ] ''+</code> 
 + 
 +Danach anschauen 
 + 
 +<code> 
 +locutus:/home/thommie # docker network inspect bridge2 [ { "Name": "bridge2", "Id": "9c353bcf0c2c6ccee0b821e1ff4d1740a074bdea94e93959c522d46a4e6fde8e", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "192.168.82.0/24" } ] }, "Internal": false, "Containers": {}, "Options": {}, "Labels": {} } ] 
 + 
 +</code>
  
 Mit Mit
  
-docker attach container1'' ''+<code> 
 +docker attach container1
  
-sieht man das Netzwerk von innen+</code>
  
-===== Docker logs =====+sieht man das Netzwerk aus Sicht des Containers
  
-Analog zu tail -f:+=====   =====
  
 +===== Docker volumes =====
 +
 +Volumes sind Verzeichnisse/Dateien, die vom lokalen Docker Host in den Container gemappt werden. Volumes werden vom Docker Dämon gemanagt, Daten liegen innerhalb des vom Docker Dämon verwalteten Speicherbereichs.
 +
 +Doku: [[https://docs.docker.com/engine/admin/volumes/|https://docs.docker.com/engine/admin/volumes/]]
 +
 +In compose:
 <code> <code>
-docker logs --follow+ 
 +services: 
 +  frontend: 
 +    image: node:lts 
 +    volumes: 
 +      myapp:/home/node/app 
 +volumes: 
 +  myapp: 
 +    external: true 
 </code> </code>
  
-===== Docker volumes =====+Allgemeine Syntax: **[lokales volume Verzeichnis Host]:[Verzeichnis im Container]**
  
-[[https://docs.docker.com/engine/admin/volumes/volumes/|https://docs.docker.com/engine/admin/volumes/volumes/]]+Die Verzeichnisorte werden immer relativ zum Ort des compose file gesehen!
  
 +====== Portainer ======
  
-===== Kubernetes =====+<code> 
 +docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
  
-  * Auf Ubuntu: [[http://thedevopsblog.com/containers/kubernetes-1-4-setup-in-ubuntu-16-04/|http://thedevopsblog.com/containers/kubernetes-1-4-setup-in-ubuntu-16-04/]] +</code>
-  * Offizielle Tutorials: [[https://kubernetes.io/docs/tutorials/kubernetes-basics/|https://kubernetes.io/docs/tutorials/kubernetes-basics/]] +
-  * weitere: [[https://marc.wäckerlin.ch/computer/kubernetes-on-ubuntu-16-04#Cleanup_In_Case_of_Unsolvable_Problems|https://marc.wäckerlin.ch/computer/kubernetes-on-ubuntu-16-04]]+
  
-==== Begrifflichkeiten ====+====== Logging ======
  
-  * Master = koordiniert den Cluster über die Kubernetes API - auf dem Master laufen keine Pods +Docker logs direkt lesenanalog zu tail -f:
-  * Node = Maschineauf 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, gemeinsame IP Adresse, Informationen, wie der Container zu betreiben ist). Pod = Container + gemeinsame Ressourcen (Speicher, RAM, CPU, Netzwerk usw.) +
-  * ServiceFunktion, die von einem oder mehreren Pods bereitgestellt wird+
  
-==== Minikube zum Üben ====+<code> 
 +docker logs --follow [containerid]
  
-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.+</code>
  
-[[https://github.com/kubernetes/minikube|https://github.com/kubernetes/minikube]]+Umleiten der log Ausgabe nach journald mit setting in der daemon.json
  
-''curl -Lo minikube [[https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64|https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64]] chmod +x minikube mv minikube /usr/local/bin/ ''+<code> 
 +
 + "data-root" "/mnt/data/docker", 
 +  "log-driver""journald" 
 +}
  
-**Linux CI Installation Which Supports Running in a VM (example wkubectl installation)**+</code>
  
-''curl -Lo minikube [[https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64|https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64]] chmod +x minikube ''+<code> 
 +journalctl --b CONTAINER_NAME=radiusclient
  
-dann+</code>
  
-''curl -Lo kubectl [[https://storage.googleapis.com/kubernetes-release/release/|https://storage.googleapis.com/kubernetes-release/release/]] $( curl -s [[https://storage.googleapis.com/kubernetes-release/release/stable.txt|https://storage.googleapis.com/kubernetes-release/release/stable.txt]] ) /bin/linux/amd64/kubectl chmod +x kubectl ''+====== Docker commit Container auf neue Maschine migrieren ======
  
-und+Auf der Quellmaschine wir der Container in ein image commited. Während des Commits wird der Container pausiert.
  
-''export MINIKUBE_WANTUPDATENOTIFICATION=false export MINIKUBE_WANTREPORTERRORPROMPT=false export MINIKUBE_HOME= $HOME export CHANGE_MINIKUBE_NONE_USER=true mkdir $HOME /.kube || true touch $HOME /.kube/config export KUBECONFIG= $HOME /.kube/config sudo -E ./minikube start –vm-driver=none # this for loop waits until kubectl can access the api server that minikube has created for in {1..150} # timeout for 5 minutes do ./kubectl get po &> /dev/null if $? -ne 1 ; then break fi sleep 2 done ''+<code> 
 +''  docker commit [CONTAINER_ID_OR_NAME] [new_image_name]'' 
 + 
 +</code> 
 + 
 +Danach packt man das image in einen tarball 
 + 
 +<code> 
 +''  docker save -o [path_to_save]/[image_name].tar [image_name]'' 
 + 
 +</code> 
 + 
 +Der Container wird auf die neue Maschien transferiert und dort ausgepackt. 
 + 
 +<code> 
 +''  docker load -i /path/to/[image_name].tar'' 
 + 
 +</code> 
 + 
 +Danach baut man aus dem transferierten Image einen neuen Container. 
 + 
 +<code> 
 +''  docker run -d [other_options] [image_name]'' 
 + 
 +</code>
  
-Minikube mit node.js hello world applikation:+**Achtungvolumes und Netzwerke werden nicht transferiert!**
  
-[[https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/|https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/]] 
  
  • docker.1663610040.txt.gz
  • Zuletzt geändert: 17/08/2024 - 07:06
  • (Externe Bearbeitung)