Zobrazit stránkuStarší verzeZpětné odkazyNahoru Tato stránka je pouze pro čtení. Můžete si pouze prohlédnout zdrojový kód, ale ne ho měnit. Zeptejte se správce, pokud si myslíte, že něco není v pořádku. ====== Docker ====== ===== Vysvětlení příkazů Dockeru ===== ==== Příkaz docker system prune -f ==== Tento příkaz slouží k odstranění nepotřebných dat z Dockeru, což zahrnuje zastavené kontejnery, visící svazky (volumes), nepoužívané sítě a nepřiřazené obrazy. Použití parametru **-f** způsobí, že příkaz proběhne bez nutnosti potvrzení od uživatele. <code bash> docker system prune -f </code> **Vysvětlení:** Tento příkaz okamžitě odstraní všechny nepotřebné objekty bez požadavku na potvrzení. Používá se, když chcete rychle uvolnit místo v systému. **Poznámka:** Buďte opatrní při použití tohoto příkazu, protože odstraní i objekty, které mohou být potenciálně ještě použitelné. Doporučuje se tento příkaz použít po zajištění, že dané kontejnery nebo obrazy již nejsou potřeba. ---- ==== Příkaz docker stats ==== Příkaz docker stats umožňuje sledovat v reálném čase využití systémových prostředků (jako je CPU, paměť nebo síť) jednotlivými kontejnery. <code bash> docker stats </code> **Vysvětlení:** Tento příkaz zobrazí tabulku s metrikami pro všechny běžící kontejnery. Pokud chcete sledovat konkrétní kontejner, můžete specifikovat jeho název nebo ID. Příklad pro konkrétní kontejner <code bash> docker stats <container_name_or_id> </code> **Výsledek:** Zobrazí informace o využití systémových prostředků pouze pro kontejner "my_container". **Poznámka:** Tento příkaz je užitečný při diagnostice výkonu kontejnerů, zejména pokud některý z nich spotřebovává více prostředků, než je očekáváno. ===== Instalace ===== Instalace dockeru pro Raspberry Pi: https://www.simplilearn.com/tutorials/docker-tutorial/raspberry-pi-docker nebo tento návod: https://dev.to/elalemanyo/how-to-install-docker-and-docker-compose-on-raspberry-pi-1mo Instalační skript: <code bash> curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo usermod -aG docker raspberrypi_user_name </code> Kontejnery, obrazy atp jsou pak instalovány zde: <code bash> /var/lib/docker </code> Nastavení dockeru, aby spustil služby po startu systému: <code bash> systemctl enable docker </code> {{youtube>pg19Z8LL06w?}} ===== instalace na Debian ===== Vycházel jsem z článku: [[https://linuxhint.com/install-docker-debian/|How to install Docker on Debian 11]]. <code bash> apt -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list apt update apt install -y docker-ce docker-ce-cli containerd.io docker -v </code> ===== užitečné příkazy ===== <code bash> docker images #spuštění bashe v konkrétním kontejneru docker exec -it nextcloudpi bash #vypsání všech kontenerů - včetně nespuštěných docker ps -a </code> zdroj: * [[https://docs.docker.com/engine/reference/commandline/docker/|Příkazy pro použití dockeru]] ===== uvolnění místa ===== Tyto příkazy slouží k vyčištění nevyužitých kontejnerů a zejména tedy k odstranění starých verzí. Bez používání těchto příkazů se mi za půl roku zaplnil disk a hledal jsem příčinu problému. <code bash> docker system prune -a # to samé co výše jen nevyskočí potvrzovací hlášení docker system prune -a -f </code> Informace o bezpečném odstraňování jsem čerpal z tohoto zdroje: https://linuxize.com/post/how-to-remove-docker-images-containers-volumes-and-networks/ ===== docker compose ===== <code bash> sudo apt-get install libffi-dev libssl-dev sudo apt install python3-dev sudo apt-get install -y python3 python3-pip sudo pip3 install docker-compose </code> Nástroj na převedení příkazu dockeru pro docker-compose: https://www.composerize.com/ ==== Tvorba docker composer souboru ==== Nejprve vytvořit **docker-conpose.yml**. <code bash> touch docker-compose.yml </code> Nahraji například takový obsah: <code bash> version: '3.6' services: #https://github.com/jlesage/docker-firefox#environment-variables firefox: container_name: firefox ports: - '5800:5800' environment: - LANG=cs_CZ.UTF-8 - SECURE_CONNECTION=1 - SECURE_CONNECTION_VNC_METHOD=SSL #ATTENTION: Password is limited to 8 characters. - VNC_PASSWORD=secret volumes: - '/mnt/firefox:/config:rw' shm_size: '2gb' image: jlesage/firefox </code> Když chci otestovat, zda je konfigurační soubor ok, spustím: <code bash> docker-compose config </code> Pokud je všechno ok, tak tento příkaz nainstaluje kontejner: <code bash> docker-compose up -d </code> Tento příkaz kontejner vypne a smaže (kromě obsahu ve **volumes**): <code bash> docker-compose down </code> === docker-compose - služba pouze na localhostu === Pokud chci, aby běžela služba pouze na localhostu, tak se v konfiguračním souboru v sekci ports napíše toto: <code> ports: - "127.0.0.1:9000:9000" </code> Konfigurace zajistí, že port 9000 bude přístupný pouze na localhostu. Čerpal jsem z diskuse: [[https://stackoverflow.com/questions/45109398/how-can-i-make-docker-compose-bind-the-containers-only-on-defined-network-instea|How can I make docker-compose bind the containers only on defined network instead of 0.0.0.0?]] ==== Aktualizace kontejnerů pomocí docker-compose ==== === 1. Stáhnout nové verze obrazů === V příkazovém řádku spusťte: <code bash> docker-compose pull </code> Tento příkaz stáhne nejnovější verze obrazů, které jsou definované v `docker-compose.yml`. === 2. Restartovat kontejnery s novými obrazy === Po stažení nových verzí spusťte: <code bash> docker-compose up -d </code> Tento příkaz: * Spustí nové kontejnery s aktualizovanými obrazy. * Nepoužije cache a vynutí rekreaci všech kontejnerů. Pokud chcete kontejnery úplně odstranit a vytvořit nové, použijte: <code bash> docker-compose down docker-compose up -d </code> Tento postup zajistí kompletní restart všech služeb. === 3. Odstranění starých nepoužívaných obrazů === Po úspěšné aktualizaci můžete smazat staré nepoužívané obrazy, aby nezabíraly místo: <code bash> docker image prune -f </code> === 4. Ověření verzí === Chcete-li zjistit, jaké verze kontejnerů běží, použijte: <code bash> docker ps </code> Případně si zobrazte detaily konkrétního kontejneru: <code bash> docker inspect <container_name> </code> Tento postup zajišťuje bezpečnou a efektivní aktualizaci kontejnerů s minimálním výpadkem služby. 🚀 ====== Další kontejnery ====== ===== nextcloudpi ===== Zdroj pro instalaci: https://hub.docker.com/r/ownyourbits/nextcloudpi <code bash> docker run --privileged -d -p 4443:4443 -p 443:443 -v /mnt/data/externaldisk:/data --name nextcloudpi ownyourbits/nextcloudpi 192.168.1.1 </code> IP adresa na konci příkazu je adresa serveru, na kterém nextcloudpi poběží. Musel jsem přidat i parametr privileged, protože jinak jsem měl problémy s databází. Při startu kontejnteru jsem viděl toto hlášení: <code> sleep: cannot read realtime clock: Operation not permitted </code> K řešení mě dovedly tyto diskuse: * https://unix.stackexchange.com/questions/598471/docker-container-shows-sleep-cannot-read-realtime-clock-operation-not-permit * https://forum.inductiveautomation.com/t/docker-container-does-not-start/43915/8 Tady je ještě varianta konfiguračního souboru pro instalaci skrze docker compose: <code> version: '3.6' services: nextcloudpi: container_name: nextcloudpi ports: - '80:80' - '4443:4443' - '443:443' privileged: true volumes: - '/mnt/nextcloud:/data' image: ownyourbits/nextcloudpi </code> ==== updatování ==== <code bash> docker stop nextcloupdpi docker pull ownyourbits/nextcloudpi docker start nextcloudpi docker system prune -a </code> Nejprve stopnout kontejner, stáhnout novou verzi, nastartovat novou verzi a na závěr vymazat pomocné soubory a staré verze. Dle [[https://help.nextcloud.com/t/staying-up-to-date/126259|tohoto příspěvku]] není vhodné upgradovat nextcloudpi uvnitř kontejneru. Měl by se využívat postup aktualizace celého kontejneru výše. Nicméně samotný nextcloud by se zase měl aktualizovat uvnitř kontejneru. Mělo by to být tak, že samotný kontejner nedovolí nainstalovat vyšší verzi nextcloudu, než je vyzkoušeno. Zdroje k tomuto postupu jsou opravdu zmatené. Nicméně zatím jsem došel k popsanému závěru. Proto jsem zapnul automatickou aktualizaci **nc-autoupdate-nc**. Dříve bylo možné aktualizovat i pomocí **nc-autoupdate-ncp**, ale v latest verzi kontejneru už tuto možnost nevidím. Ruční spuštění naopak varuje, že bych měl vědět co dělám. K závěru, že to tak funguje jsem došel i kvůli tomu, že mám 3 měsíce starou verzi latest kontejneru latest. Ovšem když jsem nainstalovat nový kontejner, tak nextcloud je hned po instalaci ve vyšší verzi. Takže bych měl mít nextcloud i v dříve nainstalovaném kontejneru ve vyšší verzi. Proto jsem tuto možnost povolil. ===== firefox ===== Defaultně využívá port: **5800**. Jsou situace, kdy chci přes noc stáhnout něco většího ze serveru, nicméně potřebuji k tomu celý web browser - kvůli autentizaci je někdy nemožné použít příkazovou řádku pro stažení. Je lepší použít webový prohlížeč a neukončovat ho, dokud se soubor nestáhne. Dříve jsem to řešil tak, že jsem měl na mikropočítači nainstalovaný celý desktop a připojoval jsem se vzdáleně přes VNC. Nicméně pokud se jedná o server, tak je docela nešikovné, kvůli této jednorázovce instalovat celý desktop. Problém perfektně vyřeší instalace [[https://hub.docker.com/r/jlesage/firefox|firefoxu v dockeru]]. Další možnosti konfigurace kontejneru lze [[https://github.com/jlesage/docker-firefox|vyčíst z dokumentace na githubu]] ==== instalace ==== <code bash> docker run -d --name=firefox -p 5800:5800 -v /docker/appdata/firefox:/config:rw --shm-size 2g jlesage/firefox </code> ==== aktualizace kontejneru ==== <code bash> docker pull jlesage/firefox </code> ==== docker compose file ==== <code bash> version: '3.6' services: #https://github.com/jlesage/docker-firefox#environment-variables firefox: container_name: firefox ports: - '5800:5800' environment: - LANG=cs_CZ.UTF-8 - SECURE_CONNECTION=1 - SECURE_CONNECTION_VNC_METHOD=SSL #ATTENTION: Password is limited to 8 characters. - VNC_PASSWORD=secret volumes: - '/mnt/firefox:/config:rw' shm_size: '2gb' image: jlesage/firefox </code> ===== Mysql a phpmyadmin ===== Tady je obsah souboru //docker-dompose.yml// <code> version: '3.7' services: mariadb: container_name: mysql image: mysql:latest ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: supersecretpassword # Změňte heslo podle vašich potřeb volumes: - mysql-data:/var/lib/mysql restart: unless-stopped phpmyadmin: container_name: phpmyadmin image: phpmyadmin/phpmyadmin environment: PMA_HOST: mariadb MYSQL_ROOT_PASSWORD: supersecretpassword # Musí být stejné jako v mariadb depends_on: - mariadb ports: - "8080:80" # PHPMyAdmin bude dostupný na portu 8080 restart: unless-stopped volumes: mysql-data: </code> Pro připojení k mysql serveru používat IP adresu: 127.0.0.1. Při použití localhost a mi nepodařilo připojit k databázi. ===== Linux desktop ===== Kontejnery umožňují mít celý Linuxový desktop v prohlížeči jako službu. V něčem to může být užitečné kvůli bezpečnosti - když se něco pokazí, tak smažu kontejner a začnu znovu. Nebo pro návštěvu. [[https://fleet.linuxserver.io/|linuxserver.io]] obsahuje zajímavé kontejnery a mezi ně patří i desktop i pro arm64, který se jmenuje [[https://fleet.linuxserver.io/image?name=linuxserver/webtop|linuxserver/webtop]]. Na videu je podrobný popis instalace zvoleného desktopu **ubuntu-mate**. Ve videu je důležitá zmínka, že je doporučeno aktualizovat a instalovat systém uvnitř kontejneru. Aktualizací celého kontejneru člověk přijde o nastavení systému uvnitř kontejneru a také o nainstalované programy. {{youtube>Gd9bvdkIXOQ?}} ===== IOTstack ===== IOTstack je utilita, která pomáhá chystat konfigurační soubor pro docker-compose. IOTstack obsahuje často používaný software pro IOT (Internet Of Things) pro Raspberry Pi. Použití utility je vidět na videu zde: {{youtube>a6mjt8tWUws?}} Abych mohl IOTstack spustit, musel jsem nainstalovat následující: <code bash> apt-get install build-essential python3-dev python3-dev python3-pip python3-wheel </code> Přesto se ukázala ještě chybová hláška: <code> ModuleNotFoundError: No module named 'setuptools' </code> [[https://programmerah.com/error-command-arm-linux-gnueabihf-gcc-failed-with-exit-status-1-raspberry-pi-installation-paramiko-6041/|Z dalších diskusí]] jsem našel řešení v doinstalaci těchto nástrojů: <code bash> apt-get install python3-setuptools apt-get install python-setuptools </code> A teď jsem konečně mohl stáhnout IOTstack a spustit menu.sh bez chyb: <code bash> git clone https://github.com/SensorsIot/IOTstack.git ~/IOTstack cd IOTstack ./menu.sh </code> Update 1.1.2024: Aktuálně je doporučený postup instalace na existující systém: <code bash> sudo apt install -y curl curl -fsSL https://raw.githubusercontent.com/SensorsIot/IOTstack/master/install.sh | bash </code> Pozor, systém se restartuje. Pomocí IOTstack lze nainstalovat i samotný docker a docker-composer. Nebo aktualizovat celý stack. Kromě videa lze využít také [[https://sensorsiot.github.io/IOTstack/Basic_setup/|dokumentaci k IOStack]], ve které jsou další užitečné příkazy. Když pak vyberu služby, které chci nainstalovat, vytvoří se konfigurační soubor **docker-dcompose.yml**. Pak už jenom stačí spustit <code bash> docker-compose up -d #-d => detached mode - na pozadí </code> ==== updatování stacku pomocí docker-compose ==== Nejprve vypnout stack pomocí: <code bash> docker-compose down </code> Poté tento příkaz: <code bash> docker-compose pull </code> ==== Portainer ==== Defaultně využívá **port: 9000**. Portainer je nástroj na webovou správu kontejnerů. Návody pro zapnutí SSL pro Portainer. * https://stackoverflow.com/questions/52819468/portainer-how-to-specify-ssl-in-docker-compose-yml * https://docs.portainer.io/advanced/ssl * https://kifarunix.com/setup-portainer-with-ssl-certificates/ ==== Nodered ==== Defaultně využívá **port: 1880**. Návod na zabezpečení Node-Redu přes SSL a autentizace: http://stevesnoderedguide.com/securing-node-red-ssl it/server/docker.txt Poslední úprava: 2025/02/11 17:29autor: Petr Nosek