Jak

Takto na svém Raspberry Pi používáte ukotvitelný panel

Raspberry Pi je ideální pro instalaci všech druhů programů, které musí vždy běžet. Nejspolehlivější způsob, jak to udělat, je Docker: každý program běží izolovaně v kontejneru, takže se nemohou navzájem rušit. Ukážeme vám, jak používat Docker na Raspberry Pi a na co pamatovat.

Pokud už máte Raspberry Pi doma nějakou dobu, je pravděpodobné, že na něj budete instalovat stále více a více softwaru. Home Assistant, Zwave2Mqtt, Node-RED, Rhasspy ... Všechno jde dobře, dokud neaktualizujete veškerý software na novou verzi a najednou jeden z vašich programů přestane fungovat a zobrazí vágní chybovou zprávu.

Co se stalo? Běžný scénář je následující. Software A i B používají verzi 1.0 knihovny C. Mezitím je vydána verze 2.0 knihovny C, která je nekompatibilní s C 1.0. Software A je přepisován tak, aby používal knihovnu C 2.0, zatímco vývojáři softwaru B nejsou tak rychlí a na chvíli se drží knihovny C 1.0. Aktualizujete software A a je nainstalována knihovna C 2.0. Raspbian však může nainstalovat pouze jednu verzi knihovny. Výsledkem je, že software B náhle již nefunguje, protože není kompatibilní s knihovnou C 2.0.

V praxi dělají distribuce Linuxu všechno, co je v jejich silách, aby se podobným situacím vyhnuly, ale stává se to. Někdy mnohem jemnějšími způsoby, aby nebylo vždy okamžitě jasné, co je příčinou problému.

01 Co je Docker?

Docker usnadňuje vývojářům distribuci aplikací pro provoz na jakémkoli systému Linux. Tyto aplikace najdete ve formě obrázku v Docker Hubu. Takový obrázek je v zásadě šablonou pro minimální systém Linux, který můžete spustit na Raspbian ve formě kontejneru.

Každý kontejner je zcela izolován od ostatních kontejnerů. Takže aplikace v kontejneru nevidí aplikace v jiných kontejnerech. Instalace a aktualizace jednoho kontejneru zajistí, že nová verze nebude v konfliktu s aplikacemi v jiných kontejnerech. Pokud tedy chcete na svém Raspberry Pi provozovat více než hrst aplikací, Docker vám s tím pomůže spolehlivě. Díky Dockeru můžete také bezpečně experimentovat s novým softwarem: pokud se vám nelíbí, můžete kontejner jednoduše vyjmout.

02 Nainstalujte Docker

Předpokládáme, že jste nainstalovali Raspbian, verze Lite je dostatečná. Poté se přihlásíte přes ssh, abyste mohli provádět úkoly v tomto základním kurzu. Nejprve nainstalujte Docker pomocí příkazu:

curl -sSL //get.docker.com | sh

Poté zadejte uživatele pi (jste přihlášeni) přístup k Dockeru, takže s tímto příkazem nedostanete všechny příkazy Dockeru sudo musí provést:

sudo usermod pi -aG ukotvitelný panel

Odhlaste se pomocí exit a poté se znovu přihlaste. Nyní uživatel patří pi do skupiny přístavní dělník.

03 Ahoj světe

Nyní byste měli být schopni zavést první kontejner Dockeru:

docker run --rm ahoj-svět

Tento příkaz spustí Docker kontejner hello-world. Tento kontejner ve svém výstupu ukazuje přesně to, co se děje: obrázek se nenachází na vašem Raspberry Pi a poté jej stáhne Docker z Docker Hubu. Potom Docker na základě tohoto obrázku vytvoří kontejner a spustí v něm program. Podle možnosti -rm nádoba bude po ukončení programu vyčištěna. Nyní víte, že Docker je správně nainstalován a funguje.

Hypriot

V tomto základním tutoriálu jednoduše nainstalujeme Docker na Raspbian, ale pokud máte zájem o Docker na Raspberry Pi, jsou možné i jiné operační systémy. Existuje Hypriot: operační systém pro Raspberry Pi, který je optimalizován pro použití Dockeru. Jediné, co musíte udělat, je nainstalovat tento obrázek na kartu micro-SD vašeho Raspberry Pi a můžete okamžitě začít používat Docker. Hypriot je obzvláště zajímavý, pokud na svém Raspberry Pi spouštíte pouze kontejnery Docker a nic jiného.

04 Vytváření kontejnerů

Základ pro práci s kontejnery Docker se provádí pomocí příkazu přístavní dělník, jak jsme ukázali v předchozím kroku. Obvykle nechcete spustit kontejner s Dockerem a okamžitě ho zavřít, ale nechat ho běžet. Tuto možnost tedy nepoužíváme --rm. Navíc chcete, aby tento kontejner běžel na pozadí, aniž byste neustále viděli výstup na obrazovce. K tomu slouží tato možnost -d.

Pokud byste měli spustit kontejner tímto způsobem, Docker by mu dal náhodný název, což není užitečné, pokud máte více než hrstku kontejnerů. S možností - jméno JMÉNO proto pojmenujte kontejner pevným názvem.

Pak se musíte podívat také na síťová připojení. Protože každý kontejner Dockeru je izolovaný, nemůžete pouze přistupovat například k webovému serveru běžícímu na portu 80 v kontejneru. Proto musíte instruovat Dockera, aby předal jakýkoli požadavek, řekněme, na port 8888 na Raspberry Pi na port 80 v konkrétním kontejneru. Uděláte to s možností -p 8888: 80. Pokud spojíte všechny tyto možnosti pro ukázkový kontejner obsahující / whoami, spusťte následující příkaz:

docker run -d --name whoami -p 8888: 80 obsahující / whoami

Pokud vše půjde dobře, po chvíli uvidíte dlouhý řetězec hexadecimálních číslic (jako 5122c935ce5178751a59699d2c5605c607700bd04e5f57a6c18de434ae53956e). Toto je ID kontejneru. Pokud budete surfovat // IP: 8888 s místo IP IP adresa vašeho Raspberry Pi, uvidíte v kontejneru webovou stránku vygenerovanou webovým serverem.

05 Sledujte své kontejnery

Jakmile spustíte několik podobných kontejnerů, začne být správa důležitá. Nejprve je užitečné zjistit, které kontejnery běží:

docker ps

Poté uvidíte informace o všech kontejnerech, které jsou aktivní (s možností -A včetně kontejnerů, které byly zastaveny). První sloupec obsahuje jedinečné ID pro každý kontejner vedle obrázku, ze kterého byl kontejner vytvořen. Sloupec POSTAVENÍ nejlepší pohled na problémy. Například pokud se váš kontejner neustále restartuje s problémem, uvidíte jej zde.

Ve sloupci PŘÍSTAVY můžete vidět použité porty. Například whoami je tam před naším kontejnerem 0.0.0.0:8888->80/tcp. To znamená, že port TCP 8888 na Raspberry Pi bude přesměrován na port TCP 80 v kontejneru. V posledním sloupci vidíte název kontejneru, který můžete použít v dalších příkazech Dockeru.

Pokud chcete více informací, přijde příkaz docker statistiky užitečný. Poté uvidíte statistiky pro každý kontejner, například spotřebu procesoru, paměti a sítě. Pokud chcete všechny informace, které Docker ví o konkrétním kontejneru, spusťte tento příkaz s ID nebo názvem kontejneru:

ukotvitelný panel zkontrolovat KONTEJNER

A konečně, pokud chcete zobrazit protokoly kontejneru, spusťte jeden z těchto dvou příkazů:

přístavní dělník přihlásí KONTEJNER

docker logs -f KONTEJNER

S možností -F sledujete protokoly v reálném čase, zatímco je generuje kontejner.

06 Spravujte své kontejnery a obrázky

Pokud chcete zastavit, spustit nebo restartovat spuštěný kontejner, můžete to snadno provést pomocí těchto příkazů:

docker stop KONTEJNER

ukotvitelný panel spustí KONTEJNER

docker restartujte KONTEJNER

Pokud chcete dočasně pozastavit kontejner (všechny programy v něm budou dočasně „zmrazeny“), spusťte tento příkaz:

docker pause KONTEJNER

Po tomto příkazu se znovu spustí všechny programy v kontejneru:

ukotvitelný panel zrušit pozastavení KONTEJNER

S příkazem docker obrázky uvidíte seznam obrázků, které Docker stáhl. U našeho kontejneru whoami můžete vidět ve sloupci REPOSITÁRNÍ text obsahující / whoami stojan a ve sloupci ŠTÍTEK Stát nejnovější. Celé jméno obrázku by bylo containsous / whoami: nejnovější jsou, ale ty nejnovější je výchozí hodnota značky, takže ji lze vynechat. Proto v našem úkolu v odstavci 4 používáme docker run prostě obsahující / whoami jako obrázek.

Ve sloupci VYTVOŘENO vidíte, jak dávno byl tento obrázek stažen. Chcete-li tento obrázek aktualizovat, spusťte následující příkaz:

docker pull containous / whoami: nejnovější

Docker poté stáhne nejnovější verzi obrázku nebo vám řekne, že obrázek je aktuální. Pokud potom půjdete znovu docker obrázky uvidíte, že byl přidán obrázek.

Ale současný kontejner whoami stále používá starý obrázek. Chcete-li to upgradovat, ukončete (docker stop whoami) a odstranit (docker rm wohami) vytvoříte kontejner a znovu jej vytvoříte pomocí příkazu docker run ze sekce 4.

Uklidit

Pokud své obrázky Dockeru pravidelně aktualizujete, aby se v kontejneru spouštěla ​​nejnovější verze, staré obrázky zůstanou. Karta micro-SD vašeho Raspberry Pi s kapacitou maximálně několika desítek gigabajtů se proto může rychle zaplnit, zejména pokud provozujete velké kontejnery. Například kontejnery, jako jsou ty od Home Assistant a Rhasspy, mají velikost větší než gigabajt. Nyní Docker pracuje se systémem, takže aktualizace nestáhne a neuloží celý plný gigabajt znovu, ale po mnoha aktualizacích se požadované úložiště stále zvyšuje. S úkolem docker rmi IMAGE_ID odstraníte obrázek na základě ID, které jste uvedli ve výstupu příkazu docker obrázky najde. Docker také zná příkaz docker image prořezávat který odstraní všechny obrázky, které kontejner nepoužívá. S dokovací systém prořezávat také odstranit zastavené kontejnery, sítě nepoužívané alespoň jedním kontejnerem a soubory mezipaměti.

07 Svazky

Náš ukázkový kontejner whoami nepoužil žádná konfigurační data ani data. Ale můžete na svém Raspberry Pi sdílet adresář s kontejnerem Docker, aby z něj mohl přistupovat k datům. Docker nazývá takový sdílený adresář svazkem.

Pokud se chystáte na Raspberry Pi pracovat s více kontejnery, doporučuje se dát jejich adresáře dohromady. Vytvořte pro to adresář, například pomocí:

mkdir -p / home / pi / containers / nginx / data

Poté vložte do složky kontejnery / nginx / data soubor index.html s html stránkou.

Pak můžete nyní spustit kontejner s nginx (webový server), se kterým sdílíte tento adresář:

docker run -d --name nginx -p 8080: 80 -v / home / pi / containers / nginx / data: / usr / share / nginx / html: ro nginx

Pak se kontejner spustí s webovým serverem a připojí adresář / home / pi / containers / nging / data na Raspberry Pi v kontejneru na místě / usr / share / nginx / html, pouze s přístupem pro čtení (ro znamená pouze pro čtení). Pokud budete surfovat IP: 8080 dostanete html soubor index.html vidět.

08 Docker Compose

Zatím jsme ručně spustili Docker kontejnery pomocí příkazu docker run. Pokud ale používáte několik dalších kontejnerů Dockeru a chcete pravidelně upravovat jejich konfiguraci, je lepší jiný přístup: dát vše do jednoho konfiguračního souboru. To funguje s Docker Compose.

Chcete-li to provést, nejprve nainstalujte pip manažera balíčků Pythonu a poté Docker Compose (což je program Pythonu) s těmito příkazy:

sudo apt nainstalovat python3-pip

sudo pip3 install docker-compose

Nyní můžete nakonfigurovat více kontejnerů Docker v jednom souboru docker-compose.yml dát. Chcete-li to provést, vytvořte soubor Docker Compose s:

nano docker-compose.yml

Vložte následující konfiguraci pro naše ukázkové kontejnery whoami a nginx:

verze: '3.7'

služby:

kdo jsem:

obrázek: containous / whoami

container_name: whoami

restart: vždy

porty:

- 8888:80

nginx:

obrázek: nginx

container_name: nginx

restart: vždy

porty:

- 8080:80

objemy:

- / home / pi / containers / nginx / data: / usr / share / nginx / html: ro

09 YAML

Uložte soubor pomocí Ctrl + O a zavřete nano pomocí Ctrl + X. Toto je soubor YAML (s příponou .yml). YAML (zkratka pro rekurzivní zkratku „YAML není značkovací jazyk“) je formát souboru pro definování informací o konfiguraci čitelným způsobem. Více informací najdete na oficiálních stránkách.

V tomto souboru vidíte, že definujeme dva kontejnery jako služby. Pro každý kontejner definujeme použitý obrázek, název, kterému má být kontejner dán, a zda by se měl kontejner v případě problémů automaticky restartovat. Kromě toho také definujeme přesměrované porty a svazky.

Všechny tyto informace najdete také na příkazových řádcích pomocí docker run, ale v tomto souboru Docker Compose je trochu organizovanější.

10 Práce s Docker Compose

Jakmile získáte soubor docker-compose.yml můžete snadno vytvořit a spustit v něm definované kontejnery:

docker-compose up -d

Poté můžete tyto kontejnery spravovat pomocí příkazu docker, ale samotné docker-compose má také mnoho možností konkrétně pro správu kontejnerů, které jste vytvořili pomocí Docker Compose. Takže vše vyčistíte pomocí následujícího příkazu, všechny definované kontejnery budou zastaveny a odstraněny:

docker-compose down

Můžete také sledovat protokoly všech kontejnerů pomocí:

docker-compose logs -f

Každý kontejner zobrazuje své zprávy protokolu v jiné barvě. Docker Compose má také dobře známou melodii pro zastavení, spuštění a restartování všech kontejnerů:

docker-compose stop

začíná docker-compose

restart docker-compose

Aktualizace všech kontejnerů v souboru Docker Compose se provádí pomocí následujících dvou příkazů:

docker-compose pull

restart docker-compose

První příkaz stáhne nové obrázky pro všechny kontejnery, které jste definovali, a druhý příkaz restartuje všechny tyto kontejnery, aby používali nový obrázek. Potom můžete staré obrázky podle potřeby odstranit pomocí:

docker image prořezávat

11 A dále

Na Docker Hubu najdete obrázky Docker mnoha aplikací. LinuxServer.io má také desítky obrazů Dockeru udržovaných dobrovolníky. Tyto obrázky jsou dobře udržovány a dokumentovány a všechny používají podobný přístup a základní infrastrukturu.

Zkuste se omezit na „oficiální“ obrázky Dockeru poskytované samotným projektem nebo obrázky od důvěryhodných stran, jako je LinuxServer.io. Protože v zásadě může kdokoli publikovat obrázky Dockeru v Docker Hubu, nejsou vždy aktualizovány.

Správná architektura procesoru

Je důležité stáhnout obrázky Dockeru pro správnou architekturu procesoru. Raspberry Pi má procesor ARM, který není kompatibilní s procesory Intel nebo AMD v počítačích. Mnoho obrázků Dockeru se publikuje, aby se automaticky stáhla správná verze pro architekturu procesoru. Na Docker Hubu najdete, které architektury jsou podporovány na stránce o požadovaném obrazu Dockeru. Pro Raspbian to je arm32v7, arm / v7 nebo armhf. Pokud se zobrazí chyba chyba formátu exec pravděpodobně jste stáhli obrázek nesprávné architektury procesoru. Pokud k tomu dojde, budete si muset stáhnout obrázek s jinou značkou. Například projekt motionEye distribuuje svůj oficiální obraz Dockeru se dvěma možnými značkami: spustíte ccrisan / motioneye: master-amd64 na procesorech kompatibilních s Intel a ccrisan / motioneye: master-armhf na Raspberry Pi.