Diese Seite ist nicht editierbar. Sie können den Quelltext sehen, jedoch nicht verändern. Kontaktieren Sie den Administrator, wenn Sie glauben, dass hier ein Fehler vorliegt. ====== 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 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 0 0 --:--:-- --:--:-- --:--:-- 0 100 2884k 100 2884k 0 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> CKG Edit docker.txt Zuletzt geändert: 05/03/2024 - 10:52von 127.0.0.1