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 [02/10/2022 - 12:25] – gelöscht thommie4docker [05/03/2024 - 10:52] (aktuell) – Externe Bearbeitung 127.0.0.1
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.1664713551.txt.gz
  • Zuletzt geändert: 05/03/2024 - 10:52
  • (Externe Bearbeitung)