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 [02/10/2022 - 12:25] – gelöscht thommie4docker [14/02/2024 - 14:42] – [Kubernetes] admin
Zeile 1: Zeile 1:
 +====== Docker ======
  
 +Doku: [[https://docs.docker.com/|https://docs.docker.com/]]
 +
 +===== Basisinstallation =====
 +
 +  * [[https://docs.docker.com/engine/installation/linux/suse/|https]][[https://docs.docker.com/engine/installation/linux/suse/|://docs.docker.com/engine/installation/linux/suse/]]
 +  * Installation auf Ubuntu[[https://docs.docker.com/engine/installation/linux/ubuntulinux/|https]][[https://docs.docker.com/engine/installation/linux/ubuntulinux/|://docs.docker.com/engine/installation/linux/ubuntulinux/]]
 +  * 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 auf btrfs Partition verlagern
 +
 +<code>
 +root@docker3:/etc/docker# less daemon.json 
 +
 +{
 +   "storage-driver": "btrfs",
 +   "data-root":  "/mnt/data/docker"
 +}
 +</code>
 +
 +==== Images ====
 +
 +Images aus Repository runterladen
 +
 +''docker pull ''
 +
 +Alle Images im lokalen repository zeigen
 +
 +<code>
 +root@develd:~# docker image ls
 +REPOSITORY                 TAG                 IMAGE ID       CREATED         SIZE
 +local_discourse/web_only   latest              21e8a905ef5c   4 weeks ago     2.65GB
 +grundic/jamulus            latest              9e97d3890ca8   5 weeks ago     90.3MB
 +discourse/base             2.0.20210217-2235   7027ba787aa6   2 months ago    2.22GB
 +discourse/base             2.0.20201221-2020   c0704d4ce2b4   4 months ago    2.11GB
 +local_discourse/data       latest              c7524a566464   5 months ago    2.44GB
 +discourse/base             2.0.20201004-2310   b64c37d7ab06   6 months ago    2.4GB
 +xbrowsersync/api           latest              a3554c99cc99   12 months ago   119MB
 +</code>
 +
 +Image löschen
 +
 +<code>
 +docker image rm [id]
 +</code>
 +
 +Image Repo aufräumen und ungenutzte Images löschen 
 +
 +<code>
 +docker image prune [OPTIONS]
 +</code>
 +
 +z.B: alle images löschen, die nicht von mindestens einem Container genutzt werden
 +
 +<code>
 +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>
 +
 +Container aus heruntergeladenem Image erzeugen
 +
 +''docker create''  erzeugt den Container und startet ihn **nicht,**  ''docker run''  macht beides.
 +
 +Alle laufenden und gestoppten Container zeigen:
 +
 +''docker ps -a ''
 +
 +Filtern auf laufende Container
 +
 +<code>
 +root@develd:~# docker ps -a -f status=running
 +CONTAINER ID   IMAGE                      COMMAND        CREATED        STATUS        PORTS                  NAMES
 +31f9a6ffcab8   grundic/jamulus            "Jamulus"      19 hours ago   Up 19 hours                          jolly_beaver
 +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
 +</code>
 +
 +Laufende und gestoppte, aber nur die container id ausgeben
 +
 +''docker ps -aq ''
 +
 +Container zeigen, die nicht laufen
 +
 +<code>
 +root@develd:~# docker ps -aq -f status=exited
 +b39916cf84e2
 +e6e7c809ad34
 +</code>
 +
 +Container starten/stoppen
 +
 +''docker start [ID] docker stop [ID] ''
 +
 +**Alle**  Container stoppen oder löschen
 +
 +<code>
 +docker stop $ (docker ps -a -q) docker rm $(docker ps -a -q)
 +</code>
 +
 +Diese können mit docker rm gelöscht werden
 +
 +<code>
 +root@develd:~# docker rm e6e7c809ad34
 +e6e7c809ad34
 +</code>
 +
 +Alle Container löschen, die nicht laufen
 +
 +<code>
 +docker container prune
 +</code>
 +
 +Restart policy ändern
 +
 +<code>docker update --restart=no matrix_synapse_1
 +</code>
 +
 +
 +==== Einen Container betreten ====
 +
 +<code>docker exec -t -i container_ID /bin/bash
 +</code>
 +
 +Alternativ: stdin/out an den Container hängen:
 +
 +<code>docker attach [OPTIONS] CONTAINER
 +</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/]]
 +
 +===== Docker Compose =====
 +
 +Docker Compose erzeugt Docker Applikationen, die aus mehreren Containern bestehen. docker compose up startet alles im Verbund.
 +
 +  - Das Dockerfile definiert die Laufzeit-Umgebung
 +  - docker-compose.yml beschreibt die Services, die in Containern zusammen arbeiten
 +  - "docker compose up" erzeugt und startet die gesamte Applikation
 +
 +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/ 
 +
 +<badge>Hinweis: Fü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.
 +
 +<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
 +
 +<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>
 +
 +===== 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
 +
 +<code>
 +docker compose -f docker-compose-pro.yaml pull
 +
 +</code>
 +
 +Daraus die Container neu bauen und startenb
 +
 +<code>
 +docker compose -f docker-compose-pro.yaml up --build
 +
 +</code>
 +<code>
 +docker compose -f docker-compose-pro.yaml up --force-recreate --build -d
 +
 +</code>
 +
 +Docker Compose startet die Container, aber nicht daemonisiert. Dazu -d hinzufügen:
 +
 +<code>
 +docker compose up -d
 +
 +</code>
 +
 +Üblicherweise nimmt man dafür systemd.
 +
 +
 +===== 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>
 +docker network inspect bridge
 +</code>
 +
 +sieht man den Zustand eines Docker networks
 +
 +==== Custom networks ====
 +
 +docker network create erzeugt ein eigenes Netzwerk:
 +
 +<code>
 +docker network create –subnet 192.168.82.0/24 –driver bridge bridge2
 +</code>
 +
 +<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
 +
 +<code>
 +docker attach container1
 +</code>
 +
 +sieht man das Netzwerk von innen
 +
 +===== Docker logs =====
 +
 +Analog zu tail -f:
 +
 +<code>
 +docker logs --follow [containerid]
 +
 +</code>
 +
 +
 +===== Docker 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/
 +
 +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>
 +
 +
 +==== Begrifflichkeiten ====
 +
 +  * 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, gemeinsame IP Adresse, Informationen, wie der Container zu betreiben ist). Pod = Container + gemeinsame Ressourcen (Speicher, RAM, CPU, Netzwerk usw.)
 +  * Service: Funktion, die von einem oder mehreren Pods bereitgestellt wird
 +
 +
 +===== Portainer =====
 +
 +<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