Šādi jūs savā Raspberry Pi izmantojat dokstaciju

Raspberry Pi ir ideāli piemērots visu veidu programmu instalēšanai, kurām vienmēr ir jāpalaiž. Uzticamākais veids, kā to izdarīt, ir ar Docker: katra programma darbojas atsevišķi konteinerā, tāpēc tās nevar traucēt viena otrai. Mēs parādīsim, kā lietot Docker uz Raspberry Pi un kas jāpatur prātā.

Ja kādu laiku jau esat mājās atradis Raspberry Pi, iespējams, turpināsiet tajā instalēt arvien vairāk programmatūras. Mājas palīgs, Zwave2Mqtt, Node-RED, Rhasspy ... Viss notiek labi, līdz jūs atjaunināt visu programmatūru uz jaunu versiju, un pēkšņi kāda no jūsu programmām vairs nedarbojas un sniedz neskaidru kļūdas ziņojumu.

Kas notika? Izplatīts scenārijs ir šāds. Gan programmatūrā A, gan B tiek izmantota bibliotēkas C versija 1.0. Tikmēr tiek izlaista bibliotēkas C versija 2.0, kas nav saderīga ar versiju C 1.0. Programmatūra A tiek pārrakstīta, lai izmantotu bibliotēku C 2.0, savukārt programmatūras B izstrādātāji nav tik ātri un kādu laiku turas pie bibliotēkas C 1.0. Jūs atjaunināt programmatūru A un ir instalēta bibliotēka C 2.0. Bet Raspbian var instalēt tikai vienu bibliotēkas versiju. Rezultātā programmatūra B pēkšņi vairs nedarbojas, jo tā nav saderīga ar bibliotēku C 2.0.

Praksē Linux izplatītāji dara visu iespējamo, lai izvairītos no šādām situācijām, taču tas notiek. Dažreiz daudz smalkākos veidos, lai ne vienmēr būtu uzreiz skaidrs, kas ir problēmas cēlonis.

01 Kas ir Dokers?

Docker ļauj izstrādātājiem viegli izplatīt lietojumprogrammas darbībai jebkurā Linux sistēmā. Šīs lietojumprogrammas var atrast attēla veidā Docker Hub. Šāds attēls būtībā ir veidne minimālai Linux sistēmai, kuru konteinera veidā varat palaist virs Raspbian.

Katrs konteiners ir pilnībā izolēts no citiem konteineriem. Tātad lietojumprogramma traukā neredz lietojumprogrammas citos konteineros. Viena konteinera instalēšana un atjaunināšana nodrošina, ka šī jaunā versija nav pretrunā ar lietojumprogrammām citos konteineros. Tātad, ja savā Raspberry Pi vēlaties palaist vairāk nekā dažas lietojumprogrammas, Docker palīdzēs jums to droši izdarīt. Pateicoties Docker, jūs varat arī droši eksperimentēt ar jaunu programmatūru: ja jums tas nepatīk, pēc tam varat vienkārši noņemt konteineru.

02 Instalējiet Docker

Mēs pieņemam, ka esat instalējis Raspbian, pietiek ar Lite versiju. Tad jūs piesakāties, izmantojot ssh, lai veiktu uzdevumus šajā pamatkursā. Vispirms instalējiet Docker ar komandu:

čokurošanās -sSL //get.docker.com | sh

Pēc tam norādiet lietotāju pi (ar kuru esat pieteicies) piekļuve Docker, tāpēc ar komandu nesaņemat visas Docker komandas sudo jāveic:

sudo usermod pi -aG docker

Iziet ar izeju un pēc tam piesakieties vēlreiz. Tagad lietotājs pieder pi grupai dokeris.

03 Sveika pasaule

Tagad jums vajadzētu būt iespējai palaist pirmo Docker konteineru:

docker run - rm sveika pasaule

Šī komanda palaidīs Docker konteinera sveiki pasauli. Šis konteiners izvadē parāda tieši to, kas notiek: attēls nav atrodams jūsu Raspberry Pi un pēc tam Docker to lejupielādē no Docker Hub. Tad Dokers, pamatojoties uz šo attēlu, izveido konteineru un palaiž tajā esošo programmu. Pēc opcijas -rm konteiners tiks iztīrīts pēc programmas slēgšanas. Tagad jūs zināt, ka Docker ir pareizi instalēts un darbojas.

Hipriots

Šajā pamata apmācībā mēs vienkārši instalēsim Docker uz Raspbian, taču ir iespējamas arī citas operētājsistēmas, ja jūs interesē Docker Raspberry Pi. Ir Hypriot: Raspberry Pi operētājsistēma, kas ir optimizēta Docker lietošanai. Viss, kas jums jādara, ir jāinstalē šis attēls jūsu Raspberry Pi mikro-SD kartē, un jūs varat nekavējoties sākt lietot Docker. Hipotiete ir īpaši interesanta, ja savā Raspberry Pi jūs darbināt tikai Docker konteinerus un neko citu.

04 Izveidojiet konteinerus

Pamats darbam ar Docker konteineriem tiek veikts ar komandu dokeris, kā parādījām iepriekšējā solī. Parasti jūs nevēlaties palaist konteineru ar Docker un nekavējoties to aizvērt, bet ļaujiet tam darboties. Tāpēc mēs neizmantojam iespēju --rm. Turklāt jūs vēlaties, lai šis konteiners darbotos fonā, visu laiku neredzot izvadi uz ekrāna. Tas ir tas, ko kalpo variants -d.

Ja jūs sāktu konteineru šādā veidā, Docker tam piešķirtu nejaušu nosaukumu, kas nav noderīgi, ja jums ir vairāk nekā nedaudz konteineru. Ar iespēju --nosaukums NAME tāpēc piešķiriet konteineram noteiktu nosaukumu.

Tad jums jāaplūko arī tīkla savienojumi. Tā kā katrs Docker konteiners ir izolēts, konteinerā nevar piekļūt, piemēram, tīmekļa serverim, kas darbojas 80. portā. Tāpēc jums ir jāuzdod Docker pārsūtīt jebkuru pieprasījumu, teiksim, Raspberry Pi 8888 ostai uz 80 portu noteiktā konteinerā. Jūs to darāt ar iespēju -p 8888: 80. Ja visas šīs opcijas saliekat konteinera saturošam / whoami paraugam, palaidiet šādu komandu:

docker run -d --name whoami -p 8888: 80 saturošs / whoami

Ja viss izdosies, pēc kāda laika jūs redzēsiet garu virkni sešciparu (piemēram, 5122c935ce5178751a59699d2c5605c607700bd04e5f57a6c18de434ae53956e). Šis ir konteinera ID. Ja jūs sērfojat uz // IP: 8888 ar vietā IP jūsu Raspberry Pi ip adresi, konteinerā redzēsit tīmekļa lapu, ko izveidojis tīmekļa serveris.

05 Vērojiet savus konteinerus

Kad esat palaidis dažus šādus konteinerus, vadība sāk kļūt svarīga. Pirmkārt, ir lietderīgi uzzināt, kuri konteineri darbojas:

dokers ps

Pēc tam jūs redzēsiet informāciju par visiem aktīvajiem konteineriem (ar opciju -a ieskaitot apturētos konteinerus). Pirmajā kolonnā ir unikāls katra konteinera ID blakus attēlam, no kura konteiners tika izveidots. Kolonna STATUSS vislabāk apskatīt problēmas. Piemēram, ja jūsu konteiners joprojām tiek restartēts ar problēmu, to redzēsit šeit.

Kolonnā OSTAS jūs varat redzēt izmantotās ostas. Piemēram, whoami ir mūsu konteinera priekšā 0.0.0.0:8888->80/tcp. Tas nozīmē, ka Raspberry Pi TCP ports 8888 tiks novirzīts uz TCP 80. portu konteinerā. Pēdējā slejā redzams konteinera nosaukums, kuru varat izmantot turpmākajās Docker komandās.

Ja vēlaties iegūt vairāk informācijas, nāk komanda dokeru statistika noderīga. Pēc tam jūs redzēsiet statistiku par katru konteineru, piemēram, procesora, atmiņas un tīkla patēriņu. Ja vēlaties visu informāciju, ko Docker zina par konkrētu konteineru, palaidiet šo komandu ar konteinera ID vai nosaukumu:

dokeris pārbauda KONTEINERU

Un visbeidzot, ja vēlaties apskatīt konteinera žurnālus, izpildiet vienu no šīm divām komandām:

docker logs KONTEINERS

docker logs -f KONTEINERS

Ar iespēju -f jūs sekojat žurnāliem reāllaikā, kamēr konteiners tos ģenerē.

06 Pārvaldiet savus konteinerus un attēlus

Ja vēlaties pārtraukt, palaist vai restartēt darbojošos konteineru, to varat viegli izdarīt, izmantojot attiecīgi šīs komandas:

dokstacijas pietura CONTAINER

dokeris sāk lietot CONTAINER

docker restartējiet CONTAINER

Ja vēlaties īslaicīgi pārtraukt konteinera darbību (visas tajā esošās programmas tiks īslaicīgi "iesaldētas"), palaidiet šo komandu:

docker pauze CONTAINER

Pēc šīs komandas visas konteinerā esošās programmas atkal darbosies:

docker unpause CONTAINER

Ar komandu dokeru attēli jūs redzēsiet Docker lejupielādēto attēlu sarakstu. Mūsu whoami konteineram jūs varat redzēt kolonnā Glabātava teksts saturošs / whoami stāvēt un kolonnā TAG Valsts vēlākais. Pilns attēla nosaukums būtu saturošs / whoami: jaunākais ir, bet tie vēlākais ir taga noklusējuma vērtība, tāpēc to var izlaist. Tāpēc mūsu uzdevumā 4. punktā mēs izmantojam dokeru skrējiens tikai saturošs / whoami kā attēlu.

Kolonnā IZVEIDOTS jūs varat redzēt, cik sen šis attēls tika lejupielādēts. Lai atjauninātu šo attēlu, izpildiet šādu komandu:

docker pull saturošs / whoami: jaunākais

Pēc tam Docker lejupielādēs jaunāko attēla versiju vai pateiks, ka attēls ir atjaunināts. Ja pēc tam atkal ejat dokeru attēli jūs redzēsiet, ka attēls ir pievienots.

Bet pašreizējais whoami konteiners joprojām izmanto veco attēlu. Lai to jauninātu, izejiet no (docker stop whoami) un dzēst (docker rm wohami) jūs izveidojat konteineru un no jauna izveidojiet konteineru, izmantojot komandu Docker run no 4. sadaļas.

Kārtīgs

Ja regulāri atjaunināsiet savus Docker attēlus, lai konteinerā palaistu jaunāko versiju, vecie attēli paliks. Tāpēc jūsu Raspberry Pi micro-SD karte ar ietilpību līdz dažiem desmitiem gigabaitu var ātri piepildīties, īpaši, ja izmantojat lielus konteinerus. Piemēram, tvertnes, piemēram, Home Assistant un Rhasspy, ir lielākas par gigabaitu. Tagad Docker strādā ar sistēmu, lai atjauninājums vairs nenokopētu un nesaglabātu šo pilnu gigabaitu, taču pēc daudziem atjauninājumiem nepieciešamā krātuve turpina pieaugt. Ar uzdevumu docker rmi IMAGE_ID jūs izdzēšat attēlu, pamatojoties uz ID, kuru norādījāt komandas izvadā dokeru attēli atrod. Dokers zina arī komandu dokera attēla apgriešana kas noņem visus attēlus, kurus konteiners neizmanto. Ar dokeru sistēmas apgriešana izdzēsiet arī apturētos konteinerus, tīklus, kurus neizmanto vismaz viens konteiners, un kešatmiņas failus.

07 sējumi

Mūsu parauga konteinerā whoami netika izmantoti nekādi konfigurācijas dati vai dati. Bet jūs varat kopīgot direktoriju savā Raspberry Pi ar Docker konteineru, lai tas varētu piekļūt datiem no tā. Šādu koplietojamu direktoriju Dokers sauc par sējumu.

Ja jūs gatavojaties strādāt ar vairākiem konteineriem savā Raspberry Pi, ieteicams visus salikt viņu direktorijus. Izveidojiet tam direktoriju, piemēram, izmantojot:

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

Pēc tam ievietojiet mapē konteineri / nginx / dati fails index.html ar html lapu.

Tad tagad varat sākt konteineru ar nginx (tīmekļa serveri), ar kuru koplietojat šo direktoriju:

docker palaist -d - nosaukums nginx -p 8080: 80 -v / home / pi / konteineri / nginx / dati: / usr / share / nginx / html: ro nginx

Tad konteiners tiek palaists kopā ar tīmekļa serveri un piestiprina direktoriju / home / pi / container / nging / data uz jūsu Raspberry Pi konteinerā vietā / usr / share / nginx / html, ar tikai lasīšanas piekļuvi (ro nozīmē tikai lasāms). Ja jūs sērfojat uz IP: 8080 jūs saņemsiet HTML failu index.html redzēt.

08 Dokera sacerēšana

Līdz šim mēs esam manuāli palaiduši Docker konteinerus ar komandu dokeru skrējiens. Bet, ja jūs izmantojat vēl dažus Docker konteinerus un vēlaties regulāri pielāgot to konfigurāciju, labāk ir izmantot citu pieeju: visu ievietot vienā konfigurācijas failā. Tas darbojas ar Docker Compose.

Lai to izdarītu, vispirms instalējiet Python pakotņu pārvaldnieka pip un pēc tam Docker Compose (kas ir Python programma) ar šīm komandām:

sudo apt instalējiet python3-pip

sudo pip3 instalējiet docker-compose

Tagad vienā failā varat konfigurēt vairākus Docker konteinerus docker-compose.yml likt. Lai to izdarītu, izveidojiet failu Docker Compose ar:

nano docker-sastādīt.yml

Ievietojiet šādu konfigurāciju mūsu paraugu konteineriem whoami un nginx:

versija: '3.7'

pakalpojumi:

kas es esmu:

attēls: saturošs / whoami

konteinera_nosaukums: whoami

restartēt: vienmēr

ostas:

- 8888:80

nginx:

attēls: nginx

konteinera_nosaukums: nginx

restartēt: vienmēr

ostas:

- 8080:80

apjomi:

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

09 YAML

Saglabājiet failu ar Ctrl + O un aizveriet nano ar Ctrl + X. Šis ir YAML fails (ar paplašinājumu .yml). YAML (apzīmē rekursīvo saīsinājumu "YAML Ain't Markup Language") ir faila formāts konfigurācijas informācijas definēšanai lasāmā veidā. Vairāk informācijas var atrast oficiālajā vietnē.

Šajā failā var redzēt, ka mēs divus konteinerus definējam kā pakalpojumus. Katram konteineram mēs definējam izmantoto attēlu, nosaukumu, kas konteineram jādod, un to, vai problēmu gadījumā konteiners būtu automātiski jāatsāk. Turklāt mēs arī definējam novirzītos portus un apjomus.

Visu šo informāciju var atrast arī komandrindās ar dokeru skrējiens, taču šajā Docker Compose failā tas ir nedaudz sakārtots.

10 Darbs ar Docker Compose

Kad esat ieguvis failu docker-compose.yml jūs varat viegli izveidot un palaist tajā definētos konteinerus:

docker-sacerēt -d

Pēc tam jūs varat pārvaldīt šos konteinerus, izmantojot komandu Docker, bet pašam Docker-Compose ir arī daudz iespēju, tieši, lai pārvaldītu konteinerus, kurus esat izveidojis, izmantojot Docker Compose. Tātad jūs visu iztīriet ar šādu komandu, visi definētie konteineri tiks apturēti un noņemti:

docker-sastādīt uz leju

Varat arī pārbaudīt visu konteineru žurnālus ar:

docker-sastādīt žurnālus -f

Katrā konteinerā žurnāla ziņojumi tiek rādīti citā krāsā. Docker Compose ir arī labi pazīstama visu konteineru apturēšanas, palaišanas un restartēšanas melodija:

dokstacijas sastādīšanas pietura

docker-compose sākas

docker-compose restart

Visu Docker Compose failā esošo konteineru atjaunināšana tiek veikta ar šīm divām komandām:

docker-compose pull

docker-compose restart

Pirmā komanda lejupielādē jaunus attēlus visiem jūsu definētajiem konteineriem, un otrā komanda pārstartē visus šos konteinerus, lai tie izmantotu jauno attēlu. Tad, ja vēlaties, vecos attēlus varat noņemt, izmantojot:

dokera attēla apgriešana

11 Un tālāk

Docker Hub var atrast daudzu lietojumprogrammu Docker attēlus. LinuxServer.io ir arī desmitiem brīvprātīgo uzturētu Docker attēlu. Šie attēli ir labi uzturēti un dokumentēti, un tie visi izmanto līdzīgu pieeju un pamata infrastruktūru.

Mēģiniet aprobežoties ar “oficiālajiem” Docker attēliem, ko nodrošina pats projekts, vai attēliem no uzticamām pusēm, piemēram, LinuxServer.io. Jo principā ikviens var publicēt Docker attēlus Docker Hub, taču tie ne vienmēr tiek atjaunināti.

Pareiza procesora arhitektūra

Ir svarīgi lejupielādēt Docker attēlus pareizai procesora arhitektūrai. Raspberry Pi ir ARM procesors, kas nav saderīgs ar datoros atrodamajiem Intel vai AMD procesoriem. Daudzi Docker attēli tiek publicēti, lai automātiski lejupielādētu pareizo versiju jūsu procesora arhitektūrai. Docker Hub lapā par vēlamo Docker attēlu varat atrast, kuras arhitektūras tiek atbalstītas. Raspbian tas ir arm32v7, arm / v7 vai armhf. Ja saņemat kļūdu exec formāta kļūda jūs, iespējams, lejupielādējāt nepareizas procesora arhitektūras attēlu. Ja tas notiks, jums būs jāielādē attēls ar citu tagu. Piemēram, motionEye projekts izplata savu oficiālo Docker attēlu ar diviem iespējamiem tagiem: jūs palaižat ccrisan / motioneye: master-amd64 uz Intel saderīgiem procesoriem un ccrisan / motioneye: master-armhf uz aveņu Pi.