Ako

Takto na svojom Raspberry Pi používate ukotviteľný panel

Raspberry Pi je ideálny na inštaláciu všetkých druhov programov, ktoré musia vždy bežať. Najspoľahlivejší spôsob je Docker: každý program beží izolovane v kontajneri, takže sa nemôžu navzájom ovplyvňovať. Ukážeme vám, ako používať Docker na Raspberry Pi a na čo treba pamätať.

Ak ste už doma Raspberry Pi nejaký čas mali, je pravdepodobné, že si doň nainštalujete čoraz viac softvéru. Home Assistant, Zwave2Mqtt, Node-RED, Rhasspy ... Všetko ide dobre, kým neaktualizujete všetok softvér na novú verziu a jeden z vašich programov zrazu prestane fungovať a zobrazí neurčité chybové hlásenie.

Čo sa stalo? Bežný scenár je nasledovný. Softvér A aj B používajú verziu 1.0 knižnice C. Medzitým je vydaná verzia 2.0 knižnice C, ktorá je nekompatibilná s C 1.0. Softvér A je prepísaný tak, aby používal knižnicu C 2.0, zatiaľ čo vývojári softvéru B nie sú tak rýchli a chvíľu sa držia knižnice C 1.0. Aktualizujete softvér A a je nainštalovaná knižnica C 2.0. Raspbian však môže nainštalovať iba jednu verziu knižnice. Výsledkom je, že softvér B zrazu už nefunguje, pretože nie je kompatibilný s knižnicou C 2.0.

V praxi robia distribúcie Linuxu všetko, čo je v ich silách, aby sa vyhli takýmto situáciám, ale stáva sa. Niekedy oveľa rafinovanejšími spôsobmi, aby nebolo vždy okamžite jasné, čo je príčinou problému.

01 Čo je Docker?

Docker vývojárom uľahčuje distribúciu aplikácií, ktoré sa dajú spustiť v ľubovoľnom systéme Linux. Tieto aplikácie možno nájsť vo forme obrázka v Docker Hub. Takýto obrázok je v podstate šablónou pre minimálny systém Linux, ktorý môžete spustiť nad Raspbian v podobe kontajnera.

Každá nádoba je úplne izolovaná od ostatných nádob. Aplikácia v kontajneri teda nevidí aplikácie v iných kontajneroch. Inštalácia a aktualizácia jedného kontajnera zabezpečí, že nová verzia nebude v konflikte s aplikáciami v iných kontajneroch. Takže ak chcete na svojom Raspberry Pi spustiť viac ako niekoľko aplikácií, Docker vám to spoľahlivo pomôže. Vďaka Dockeru môžete tiež bezpečne experimentovať s novým softvérom: ak sa vám nepáči, môžete nádobu potom jednoducho odstrániť.

02 Nainštalujte Docker

Predpokladáme, že ste si nainštalovali Raspbian, verzia Lite je dostatočná. Potom sa prihlásite cez ssh, aby ste mohli vykonávať úlohy v tomto základnom kurze. Najskôr nainštalujte Docker pomocou príkazu:

zvlnenie -sSL //get.docker.com | š

Potom zadajte používateľa pi (ste prihlásený) prístup do Dockeru, takže s príkazom nezískate všetky príkazy Dockeru sudo musí vykonávať:

sudo usermod pi -aG ukotviteľný panel

Odhláste sa výstupom a potom sa znova prihláste. Teraz používateľ patrí pi do skupiny docker.

03 Ahoj svet

Teraz by ste mali byť schopní zaviesť prvý kontajner Dockeru:

docker run --rm ahoj-svet

Tento príkaz spustí kontajner Docker hello-world. Tento kontajner vo svojom výstupe zobrazuje presne to, čo sa deje: obraz sa nenachádza na vašom Raspberry Pi a potom ho stiahne Docker z Docker Hubu. Potom Docker na základe tohto obrázka vytvorí kontajner a spustí v ňom program. Podľa možnosti -rm nádoba sa po ukončení programu vyčistí. Teraz viete, že Docker je správne nainštalovaný a funguje.

Hypriot

Do tohto základného tutoriálu si jednoducho nainštalujeme Docker na Raspbian, ale pokiaľ máte záujem o Docker na Raspberry Pi, sú možné aj iné operačné systémy. Existuje Hypriot: operačný systém pre Raspberry Pi, ktorý je optimalizovaný pre použitie Dockeru. Všetko, čo musíte urobiť, je nainštalovať tento obrázok na kartu micro-SD vášho Raspberry Pi a Docker môžete okamžite začať používať. Hypriot je obzvlášť zaujímavý, ak na svojom Raspberry Pi spúšťate iba kontajnery Docker a nič iné.

04 Vytvorte kontajnery

Základ pre prácu s kontajnermi Docker sa robí pomocou príkazu docker, ako sme si ukázali v predchádzajúcom kroku. Zvyčajne nechcete spustiť kontajner s Dockerom a okamžite ho zavrieť, ale nechajte ho bežať. Takže nepoužívame možnosť --rm. Navyše chcete, aby tento kontajner bežal na pozadí, bez toho, aby ste neustále videli výstup na obrazovke. To slúži možnosti -d.

Ak by ste chceli kontajner založiť týmto spôsobom, Docker by mu dal náhodný názov, čo nie je užitočné, ak máte viac ako niekoľko kontajnerov. S možnosťou - meno NÁZOV preto dajte kontajneru pevný názov.

Potom sa tiež musíte pozrieť na sieťové pripojenia. Pretože je každý kontajner Dockeru izolovaný, nemôžete iba pristupovať napríklad k webovému serveru bežiacemu na porte 80 v kontajneri. Preto musíte nariadiť spoločnosti Docker, aby preposlala akúkoľvek žiadosť povedzme na porte 8888 na Raspberry Pi na port 80 v konkrétnom kontajneri. Urobíte to pomocou možnosti -p 8888: 80. Ak spojíte všetky tieto možnosti pre vzorový kontajner containsous / whoami, spustite nasledujúci príkaz:

docker run -d --name whoami -p 8888: 80 obsahujúci / whoami

Ak všetko pôjde dobre, po chvíli uvidíte dlhý reťazec hexadecimálnych číslic (ako 5122c935ce5178751a59699d2c5605c607700bd04e5f57a6c18de434ae53956e). Toto je ID kontajnera. Ak surfujete do // IP: 8888 s namiesto IP IP adresa vášho Raspberry Pi, uvidíte v kontajneri webovú stránku vygenerovanú webovým serverom.

05 Sledujte svoje kontajnery

Po založení niekoľkých takýchto kontajnerov začne byť správa dôležitá. Najskôr je užitočné zistiť, ktoré kontajnery sú spustené:

docker ps

Potom uvidíte informácie o všetkých aktívnych kontajneroch (s možnosťou -a vrátane kontajnerov, ktoré boli zastavené). Prvý stĺpec obsahuje jedinečné ID každého kontajnera vedľa obrázka, z ktorého bol kontajner vytvorený. Stĺpec POSTAVENIE najlepsi pohlad na problemy. Napríklad ak sa váš kontajner neustále reštartuje s problémom, uvidíte ho tu.

V stĺpci PRÍSTAVY môžete vidieť použité porty. Napríklad whoami je tam pred našim kontajnerom 0.0.0.0:8888->80/tcp. To znamená, že port TCP 8888 na Raspberry Pi bude presmerovaný na port TCP 80 v kontajneri. V poslednom stĺpci vidíte názov kontajnera, ktorý môžete použiť v ďalších príkazoch Dockeru.

Ak chcete viac informácií, príde príkaz štatistiky ukotvenia užitočné. Potom uvidíte štatistiku pre každý kontajner, napríklad spotrebu procesora, pamäte a siete. Ak chcete získať všetky informácie, ktoré Docker vie o konkrétnom kontajneri, spustite tento príkaz s ID alebo názvom kontajnera:

ukotviteľný panel skontrolujte KONTAJNER

A nakoniec, ak chcete zobraziť protokoly kontajnera, spustite jeden z týchto dvoch príkazov:

docker logy KONTAJNER

docker logs -f KONTAJNER

S možnosťou -f sledujete protokoly v reálnom čase, zatiaľ čo ich kontajner generuje.

06 Spravujte svoje kontajnery a obrázky

Ak chcete zastaviť, spustiť alebo reštartovať bežiaci kontajner, môžete to ľahko urobiť pomocou týchto príkazov:

docker stop KONTAJNER

docker spustí KONTAJNER

docker restart KONTAJNER

Ak chcete dočasne pozastaviť kontajner (všetky programy v ňom budú dočasne „zmrazené“), spustite tento príkaz:

docker pause KONTAJNER

Po tomto príkaze sa všetky programy v kontajneri znova spustia:

ukotvenie doku zrušiť pauza

S príkazom ukotviteľné obrázky uvidíte zoznam obrázkov, ktoré Docker stiahol. Pre náš kontajner whoami môžete vidieť v stĺpci ÚLOŽISKO text obsahujúci / whoami stojan a v stĺpci ZNAČKA štát najnovšie. Celý názov obrázka by bol containsous / whoami: najnovšie sú, ale tie najnovšie je predvolená hodnota pre značku, takže ju možno vynechať. Preto v našom zadaní v odseku 4 používame docker run len obsahujúci / whoami ako obrázok.

V stĺpci VYTVORENÉ vidíte, ako dávno bol tento obrázok stiahnutý. Ak chcete aktualizovať tento obrázok, spustite nasledujúci príkaz:

docker pull containous / whoami: najnovšie

Docker potom stiahne najnovšiu verziu obrázka alebo vám oznámi, že obrázok je aktuálny. Ak pôjdete potom znova ukotviteľné obrázky uvidíte, že bol pridaný obrázok.

Ale súčasný kontajner s whoami stále používa starý obrázok. Ak to chcete inovovať, ukončite (docker stop whoami) a vymazať (docker rm wohami) vytvoríte kontajner a znova ho vytvoríte pomocou príkazu docker run z časti 4.

Upratané

Ak svoje obrázky Dockeru pravidelne aktualizujete, aby ste v kontajneri spustili najnovšiu verziu, staré obrázky zostanú. Karta micro-SD vášho Raspberry Pi s kapacitou najviac niekoľko desiatok gigabajtov sa preto môže rýchlo zaplniť, najmä ak prevádzkujete veľké kontajnery. Napríklad kontajnery ako tie od Home Assistant a Rhasspy majú veľkosť viac ako gigabajt. Teraz Docker pracuje so systémom, takže aktualizácia nestiahne a neuloží tento plný gigabajt znova, ale po mnohých aktualizáciách sa požadované úložisko stále zvyšuje. So zadaním docker rmi IMAGE_ID odstránite obrázok na základe ID, ktoré ste zadali na výstupe príkazu ukotviteľné obrázky nálezy. Príkaz pozná aj Docker docker obrázok prerezávať čím sa odstránia všetky obrázky, ktoré kontajner nepoužíva. S dokovací systém prerezávať tiež odstráňte zastavené kontajnery, siete nepoužívané najmenej jedným kontajnerom a súbory medzipamäte.

07 zväzkov

Náš ukážkový kontajner whoami nepoužil žiadne konfiguračné údaje ani údaje. Ale môžete zdieľať adresár na vašom Raspberry Pi s kontajnerom Docker, aby mal prístup k údajom z neho. Docker nazýva taký zdieľaný adresár zväzkom.

Ak budete na svojom Raspberry Pi pracovať s viacerými kontajnermi, odporúča sa spojiť všetky ich adresáre. Vytvorte pre to adresár, napríklad pomocou:

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

Potom vložte do priečinka kontajnery / nginx / dáta súbor index.html s html stránkou.

Potom môžete teraz spustiť kontajner s nginx (webový server), s ktorým zdieľate tento adresár:

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

Potom sa kontajner spustí s webovým serverom a pripojí adresár / home / pi / containers / nging / data na vašom Raspberry Pi v nádobe na danom mieste / usr / share / nginx / html, iba s prístupom na čítanie (ro znamená iba na čítanie). Ak surfujete do IP: 8080 dostanete html súbor index.html vidieť.

08 Docker Compose

Zatiaľ sme manuálne spustili Dockerove kontajnery príkazom docker run. Ak však prevádzkujete niekoľko ďalších kontajnerov Docker a chcete pravidelne upravovať ich konfiguráciu, je lepší iný prístup: vložiť všetko do jedného konfiguračného súboru. To funguje s programom Docker Compose.

Ak to chcete urobiť, najskôr nainštalujte pip Pythonovho manažéra balíkov a potom Docker Compose (čo je program Python) s týmito príkazmi:

sudo apt nainštalovať python3-pip

sudo pip3 install docker-compose

Teraz môžete nakonfigurovať viac kontajnerov Docker v jednom súbore docker-compose.yml dať. Ak to chcete urobiť, vytvorte súbor Docker Compose s:

nano docker-compose.yml

Pre naše vzorové kontajnery whoami a nginx vložte nasledujúcu konfiguráciu:

verzia: „3,7“

služby:

kto som:

obrázok: obsahujúci / whoami

container_name: whoami

reštart: vždy

prístavy:

- 8888:80

nginx:

obrázok: nginx

container_name: nginx

reštart: vždy

prístavy:

- 8080:80

objemy:

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

09 YAML

Uložte súbor pomocou Ctrl + O a zatvorte nano pomocou Ctrl + X. Toto je súbor YAML (s príponou .yml). YAML (znamená rekurzívnu skratku „YAML nie je značkovací jazyk“) je formát súboru na definovanie konfiguračných informácií čitateľným spôsobom. Viac informácií nájdete na oficiálnych stránkach.

V tomto súbore vidíte, že ako služby definujeme dva kontajnery. Pre každý kontajner definujeme použitý obrázok, názov, ktorý má mať kontajner a či sa má kontajner v prípade problémov automaticky reštartovať. Okrem toho definujeme aj presmerované porty a objemy.

Všetky tieto informácie nájdete tiež na príkazových riadkoch s docker run, ale v tomto súbore Docker Compose je trochu organizovanejší.

10 Práca s Docker Compose

Akonáhle získate súbor docker-compose.yml môžete ľahko vytvoriť a spustiť v ňom definované kontajnery:

ukotviť-zložiť hore -d

Potom môžete tieto kontajnery spravovať pomocou príkazu docker, ale samotné docker-compose má tiež veľa možností špeciálne na správu kontajnerov, ktoré ste vytvorili pomocou Docker Compose. Takže všetko vyčistíte nasledujúcim príkazom, všetky definované kontajnery sa zastavia a odstránia:

ukotviť-zložiť

Môžete tiež sledovať protokoly všetkých kontajnerov pomocou:

ukotviť-zložiť protokoly -f

Každý kontajner zobrazuje svoje správy protokolu v inej farbe. Docker Compose má tiež dobre známu melódiu na zastavenie, spustenie a reštartovanie všetkých kontajnerov:

docker-compose stop

začína docker-compose

docker-compose reštart

Aktualizácia všetkých kontajnerov v súbore Docker Compose sa vykonáva pomocou nasledujúcich dvoch príkazov:

ukotviť-zložiť ťah

docker-compose reštart

Prvý príkaz stiahne nové obrázky pre všetky kontajnery, ktoré ste definovali, a druhý príkaz reštartuje všetky tieto kontajnery, aby mohli používať nový obrázok. Potom môžete podľa potreby odstrániť staré obrázky pomocou:

docker obrázok prerezávať

11 A ďalej

Na serveri Docker Hub nájdete obrázky mnohých aplikácií Docker. LinuxServer.io má tiež desiatky obrázkov Dockeru udržiavaných dobrovoľníkmi. Tieto obrázky sú dobre udržiavané a zdokumentované a všetky používajú podobný prístup a základnú infraštruktúru.

Skúste sa obmedziť na „oficiálne“ obrázky Dockeru poskytované samotným projektom alebo obrázky od dôveryhodných strán, ako je LinuxServer.io. Pretože v zásade môže každý publikovať obrázky Dockeru na Docker Hub, ale nie vždy sú aktualizované.

Správna architektúra procesora

Je dôležité stiahnuť si obrázky Dockeru pre správnu architektúru procesora. Raspberry Pi má procesor ARM, ktorý nie je kompatibilný s procesormi Intel alebo AMD v počítačoch. Publikuje sa veľa obrázkov Dockeru, aby sa automaticky stiahla správna verzia pre vašu architektúru procesora. Na serveri Docker Hub nájdete na stránke podporujúce architektúry týkajúce sa požadovaného obrázka Docker. Pre Raspbian to je arm32v7, arm / v7 alebo armhf. Ak sa ti zobrazí chyba chyba formátu exec pravdepodobne ste si stiahli obrázok nesprávnej architektúry procesora. Ak sa tak stane, budete si musieť stiahnuť obrázok s inou značkou. Napríklad projekt motionEye distribuuje svoj oficiálny Dockerov obraz pomocou dvoch možných značiek: you run ccrisan / motioneye: master-amd64 na procesoroch kompatibilných s Intel a ccrisan / motioneye: master-armhf na Raspberry Pi.

$config[zx-auto] not found$config[zx-overlay] not found