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
instalace na Debian
Vycházel jsem z článku: 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:
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: 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:
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 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 firefoxu v dockeru.
Další možnosti konfigurace kontejneru lze 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. linuxserver.io obsahuje zajímavé kontejnery a mezi ně patří i desktop i pro arm64, který se jmenuje 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.
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:
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'
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é 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.
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