it:server:docker

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

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
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:

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/

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/

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

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
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.

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

docker run -d --name=firefox -p 5800:5800 -v /docker/appdata/firefox:/config:rw --shm-size 2g jlesage/firefox
docker pull jlesage/firefox
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

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.

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 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í 

Nejprve vypnout stack pomocí:

docker-compose down

Poté tento příkaz:

docker-compose pull

Defaultně využívá port: 9000.

Portainer je nástroj na webovou správu kontejnerů. Návody pro zapnutí SSL pro Portainer.

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: 2024/07/20 10:50
  • autor: Petr Nosek