====== Docker ====== 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: curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo usermod -aG docker raspberrypi_user_name Kontejnery, obrazy atp jsou pak instalovány zde: /var/lib/docker Nastavení dockeru, aby spustil služby po startu systému: systemctl enable docker {{youtube>pg19Z8LL06w?}} ===== instalace na Debian ===== Vycházel jsem z článku: [[https://linuxhint.com/install-docker-debian/|How to install Docker on Debian 11]]. 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 ===== užitečné příkazy ===== 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 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. docker system prune -a # to samé co výše jen nevyskočí potvrzovací hlášení docker system prune -a -f 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 ===== 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 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**. touch docker-compose.yml Nahraji například takový obsah: 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 Když chci otestovat, zda je konfigurační soubor ok, spustím: docker-compose config Pokud je všechno ok, tak tento příkaz nainstaluje kontejner: docker-compose up -d Tento příkaz kontejner vypne a smaže (kromě obsahu ve **volumes**): docker-compose down === 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: ports: - "127.0.0.1:9000:9000" 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?]] ====== Další kontejnery ====== ===== nextcloudpi ===== Zdroj pro instalaci: https://hub.docker.com/r/ownyourbits/nextcloudpi docker run --privileged -d -p 4443:4443 -p 443:443 -v /mnt/data/externaldisk:/data --name nextcloudpi ownyourbits/nextcloudpi 192.168.1.1 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í: sleep: cannot read realtime clock: Operation not permitted 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: version: '3.6' services:   nextcloudpi: container_name: nextcloudpi ports: - '80:80' - '4443:4443' - '443:443' privileged: true volumes: - '/mnt/nextcloud:/data' image: ownyourbits/nextcloudpi ==== updatování ==== docker stop nextcloupdpi docker pull ownyourbits/nextcloudpi docker start nextcloudpi docker system prune -a 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 ==== docker run -d --name=firefox -p 5800:5800 -v /docker/appdata/firefox:/config:rw --shm-size 2g jlesage/firefox ==== aktualizace kontejneru ==== docker pull jlesage/firefox ==== docker compose file ==== 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 ===== Mysql a phpmyadmin ===== Tady je obsah souboru //docker-dompose.yml// 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: 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í: apt-get install build-essential python3-dev python3-dev python3-pip python3-wheel Přesto se ukázala ještě chybová hláška: ModuleNotFoundError: No module named 'setuptools' [[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ů: apt-get install python3-setuptools apt-get install python-setuptools A teď jsem konečně mohl stáhnout IOTstack a spustit menu.sh bez chyb: git clone https://github.com/SensorsIot/IOTstack.git ~/IOTstack cd IOTstack ./menu.sh Update 1.1.2024: Aktuálně je doporučený postup instalace na existující systém: sudo apt install -y curl curl -fsSL https://raw.githubusercontent.com/SensorsIot/IOTstack/master/install.sh | bash 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 docker-compose up -d #-d => detached mode - na pozadí ==== updatování stacku pomocí docker-compose ==== Nejprve vypnout stack pomocí: docker-compose down Poté tento příkaz: docker-compose pull ==== 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