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
Letzte ÜberarbeitungBeide Seiten der Revision
docker [19/09/2022 - 17:28] – [Container Management] thommie4docker [14/02/2024 - 14:42] – [Kubernetes] admin
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
  
 <code> <code>
Zeile 15: Zeile 15:
  
 { {
-  "graph":  "/mnt/data/docker"+   "storage-driver": "btrfs", 
 +   "data-root":  "/mnt/data/docker"
 } }
 </code> </code>
Zeile 138: Zeile 139:
 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=====+===== 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 147:
   - "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 zu benutzen, die in GOLANG neu geschrieben wurde. Installation siehe 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 (python) und V2 (golang) wechseln kann. 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 (python) und V2 (golang) wechseln kann.
Zeile 181: Zeile 182:
 </code> </code>
  
-Update per docker-compose+===== compose yaml validieren ===== 
 + 
 +<code> 
 +docker compose -f docker-compose-pro.yaml config 
 +</code> 
 + 
 + 
 +====== 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>
  
Zeile 192: Zeile 201:
  
 <code> <code>
-docker-compose up --build +docker compose -f docker-compose-pro.yaml up --build
-</code>+
  
 +</code>
 <code> <code>
-docker-compose up --force-recreate --build -d+docker compose -f docker-compose-pro.yaml up --force-recreate --build -d 
 </code> </code>
  
-===== Docker Netzwerk ===== +Docker Compose startet die Container, aber nicht daemonisiert. Dazu -d hinzufügen:
- +
-Standardmässig werden drei Netze angelegt:+
  
 <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+docker compose up -d 
 </code> </code>
  
-Container werden an die bridge (entspricht docker0 auf dem Host) gebunden, solange nicht beim docker create ein anderes Netzwerk gewählt wurde (''docker create –network=<NETWORK>'')+Üblicherweise nimmt man dafür systemd.
  
-Mit+ 
 +===== Docker Netzwerke ===== 
 + 
 +Standardmässig werden drei Netze bridge, host, none angelegt. Alle anderen sind custom Networks, die z.B: über compose angelegt wurden: 
 + 
 +<code>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> 
 + 
 +Container werden an die bridge "docker0" auf dem Host gebunden, solange nicht beim docker create ein anderes Netzwerk gewählt wurde (''docker create –network=<NETWORK>''). Mit
  
 <code> <code>
Zeile 215: Zeile 239:
 </code> </code>
  
-sieht man den Zustand der Docker Bridge+sieht man den Zustand eines Docker networks
  
 ==== Custom networks ==== ==== Custom networks ====
Zeile 221: Zeile 245:
 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 
 +</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> 
 +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 
 +</code>
  
 sieht man das Netzwerk von innen sieht man das Netzwerk von innen
Zeile 236: Zeile 266:
  
 <code> <code>
-docker logs --follow+docker logs --follow [containerid] 
 </code> </code>
 +
  
 ===== Docker volumes ===== ===== Docker volumes =====
  
-[[https://docs.docker.com/engine/admin/volumes/volumes/|https://docs.docker.com/engine/admin/volumes/volumes/]]+Volumes sind Verzeichnisse/Dtane, die vom lokalen Docker Host in den Container gemappt werden. 
 +Volumes werden vom Docker Dämon gemanagt, die Daten liegen innerhalb des vom Docker Dämon verwalteten Speicherbereichs.
  
 +Doku: https://docs.docker.com/engine/admin/volumes/
  
-===== Kubernetes =====+In compose: 
 +<code> 
 +services: 
 +  frontend: 
 +    image: node:lts 
 +    volumes: 
 +      - myapp:/home/node/app 
 +volumes: 
 +  myapp: 
 +    external: true 
 +</code> 
 + 
 +Syntax: **[lokales volume Verzeichnis Host]:[Verzeichnis im Container]** 
 + 
 +Immer relativ zum compose file gesehen! 
 +===== Docker build ===== 
 + 
 +<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>
  
-  * 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/]] 
-  * 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 ==== ==== Begrifflichkeiten ====
Zeile 257: Zeile 317:
   * Service: Funktion, die von einem oder mehreren Pods bereitgestellt wird   * Service: Funktion, die von einem oder mehreren Pods bereitgestellt wird
  
-==== Minikube - zum Üben ==== 
  
-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. +===== Portainer =====
- +
-[[https://github.com/kubernetes/minikube|https://github.com/kubernetes/minikube]] +
- +
-''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/ '' +
- +
-**Linux CI Installation Which Supports Running in a VM (example w/ kubectl installation)** +
- +
-''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 '' +
- +
-dann +
- +
-''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 '' +
- +
-und +
- +
-''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 i in {1..150} # timeout for 5 minutes do ./kubectl get po &> /dev/null if [ $? -ne 1 ] ; then break fi sleep 2 done '' +
- +
-Minikube mit node.js hello world applikation: +
- +
-[[https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/|https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/]]+
  
 +<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
 +</code>
  • docker.txt
  • Zuletzt geändert: 05/03/2024 - 10:52
  • von 127.0.0.1