Hvordan

Slik bruker du en docker på Raspberry Pi

En Raspberry Pi er ideell for å installere alle slags programmer som alltid må kjøres. Den mest pålitelige måten å gjøre dette på er med Docker: hvert program kjører isolert i en container, slik at de ikke kan forstyrre hverandre. Vi viser deg hvordan du bruker Docker på en Raspberry Pi og hva du må huske på.

Hvis du allerede har hatt en Raspberry Pi hjemme en stund, er sjansen stor for at du fortsetter å installere mer og mer programvare på den. Home Assistant, Zwave2Mqtt, Node-RED, Rhasspy ... Alt går bra, til du oppdaterer all programvaren din til en ny versjon, og plutselig slutter et av programmene å fungere og gir en vag feilmelding.

Hva skjedde? Et vanlig scenario er følgende. Programvare A og B bruker begge versjon 1.0 av bibliotek C. I mellomtiden blir versjon 2.0 av bibliotek C utgitt, noe som er inkompatibelt med C 1.0. Programvare A blir omskrevet for å bruke bibliotek C 2.0, mens utviklerne av programvare B ikke er så raske og holder seg til bibliotek C 1.0 en stund. Du oppdaterer programvare A og bibliotek C 2.0 er installert. Men Raspbian kan bare installere en versjon av et bibliotek. Som et resultat fungerer programvare B plutselig ikke lenger, fordi den ikke er kompatibel med bibliotek C 2.0.

I praksis gjør Linux-distribusjoner alt de kan for å unngå situasjoner som dette, men det skjer. Noen ganger på mye mer subtile måter, slik at det ikke alltid er umiddelbart klart hva årsaken til problemet er.

01 Hva er Docker?

Docker gjør det enkelt for utviklere å distribuere applikasjoner som kan kjøres på ethvert Linux-system. Disse applikasjonene finnes i form av et bilde på Docker Hub. Et slikt bilde er i utgangspunktet en mal for et minimalt Linux-system, som du kan kjøre på toppen av Raspbian i form av en container.

Hver container er helt isolert fra andre containere. Så applikasjonen i en container ser ikke programmene i andre containere. Og installering og oppdatering av en container sikrer at den nye versjonen ikke kommer i konflikt med applikasjoner i andre containere. Så hvis du vil kjøre mer enn en håndfull applikasjoner på Raspberry Pi, vil Docker hjelpe deg med å gjøre det pålitelig. Takket være Docker kan du også trygt eksperimentere med ny programvare: Hvis du ikke liker det, kan du bare fjerne beholderen etterpå.

02 Installer Docker

Vi antar at du har installert Raspbian, Lite-versjonen er tilstrekkelig. Deretter logger du på via ssh for å utføre oppgavene i dette grunnkurset. Installer først Docker med kommandoen:

krølle -sSL //get.docker.com | sh

Angi deretter brukeren pi (du er logget inn med) tilgang til Docker, slik at du ikke får alle Docker-kommandoer med kommandoen sudo må utføre:

sudo usermod pi -aG docker

Logg ut med exit og logg inn igjen. Nå tilhører brukeren pi til gruppen docker.

03 Hei verden

Du skal nå kunne starte en første Docker-container:

docker run - rm hallo-world

Denne kommandoen kjører Docker-containeren hallo-verden. Denne beholderen viser i utgangen nøyaktig hva som skjer: bildet blir ikke funnet på Raspberry Pi og lastes deretter ned av Docker fra Docker Hub. Deretter oppretter Docker en container basert på dette bildet og kjører programmet i det. Etter alternativet -rm beholderen blir ryddet opp etter at programmet er lukket. Du vet nå at Docker er riktig installert og fungerer.

Hypriot

Vi vil bare installere Docker på Raspbian i denne grunnleggende opplæringen, men andre operativsystemer er også mulig hvis du er interessert i Docker på en Raspberry Pi. Det er Hypriot: et operativsystem for Raspberry Pi som er optimalisert for bruk av Docker. Alt du trenger å gjøre er å installere dette bildet på micro-SD-kortet på Raspberry Pi, og du kan begynne å bruke Docker med en gang. Hypriot er spesielt interessant hvis du bare kjører Docker-containere på Raspberry Pi og ingenting annet.

04 Lag containere

Grunnlaget for å jobbe med Docker-containere gjøres med kommandoen docker, som vi viste i forrige trinn. Vanligvis vil du ikke kjøre en container med Docker og lukke den umiddelbart, men la den kjøre. Så vi bruker ikke alternativet --rm. I tillegg vil du holde beholderen i gang i bakgrunnen uten å se utdataene på skjermen hele tiden. Det er det alternativet tjener -d.

Hvis du skulle starte en container på denne måten, vil Docker gi den et tilfeldig navn, noe som ikke er nyttig hvis du har mer enn en håndfull containere. Med alternativet --navn NAME gi derfor containeren et fast navn.

Da må du også se på nettverkstilkoblingene. Siden hver Docker-container er isolert, kan du ikke bare få tilgang til for eksempel en webserver som kjører på port 80 i en container. Derfor må du instruere Docker om å videresende enhver forespørsel om for eksempel port 8888 på Raspberry Pi til port 80 i en bestemt container. Du gjør det med alternativet -p 8888: 80. Hvis du setter sammen alle disse alternativene for prøvebeholderen containous / whoami, kjører du følgende kommando:

docker run -d --name whoami -p 8888: 80 containous / whoami

Hvis alt går bra, vil du etter en stund se en lang streng med heksesifre (som f.eks 5122c935ce5178751a59699d2c5605c607700bd04e5f57a6c18de434ae53956e). Dette er ID-en til containeren. Hvis du surfer til // IP: 8888 med i stedet for IP IP-adressen til din Raspberry Pi, vil du se en webside generert av webserveren i containeren.

05 Se på containerne dine

Når du har startet opp noen få containere som dette, begynner ledelsen å bli viktig. Først og fremst er det nyttig å se hvilke containere som kjører:

docker ps

Du vil da se informasjon om alle containere som er aktive (med alternativet -en inkludert containere som er stoppet). Den første kolonnen inneholder en unik ID for hver container, ved siden av bildet som containeren ble opprettet fra. Kolonnen STATUS best se på problemer. For eksempel, hvis beholderen din fortsetter å starte på nytt med et problem, vil du se den her.

I kolonnen HAVNE du kan se de brukte portene. For eksempel, whoami er der foran containeren vår 0.0.0.0:8888->80/tcp. Det betyr at TCP-port 8888 på Raspberry Pi vil bli omdirigert til TCP-port 80 på containeren. I den siste kolonnen ser du navnet på beholderen, som du kan bruke i flere Docker-kommandoer.

Hvis du vil ha mer informasjon, kommer kommandoen docker-statistikk nyttig. Du vil da se statistikk for hver container, for eksempel forbruket av prosessoren, minnet og nettverket. Hvis du vil ha all informasjonen som Docker vet om en bestemt container, kjører du denne kommandoen med ID eller navnet på containeren:

docker inspisere CONTAINER

Og til slutt, hvis du vil vise loggene til en container, kjører du en av disse to kommandoene:

docker logger CONTAINER

docker-logger -f CONTAINER

Med alternativet -f du følger loggene i sanntid mens containeren genererer dem.

06 Administrer containere og bilder

Hvis du vil stoppe, starte eller starte en kjørende container på nytt, kan du enkelt gjøre det med henholdsvis disse kommandoene:

dockerstopp CONTAINER

docker starter CONTAINER

omstarter docker CONTAINER

Hvis du vil midlertidig stoppe en container midlertidig (alle programmene i den blir "frosset" midlertidig), kjør denne kommandoen:

docker-pause CONTAINER

Etter denne kommandoen vil alle programmer i containeren kjøre igjen:

docker avbryte CONTAINER

Med kommandoen docker-bilder vil du se listen over bilder som Docker har lastet ned. For whoami-containeren vår kan du se i kolonnen OPPBEVARINGSSTED teksten inneholder / whoami stå og i kolonnen STIKKORD stat siste. Det fulle navnet på bildet ville være containous / whoami: siste er, men de siste er standardverdien for koden, så kan utelates. Derfor bruker vi det i oppgaven vår i avsnitt 4 docker kjøre bare inneholder / whoami som bilde.

I kolonnen OPPRETT du kan se hvor lenge siden dette bildet ble lastet ned. For å oppdatere dette bildet, kjør følgende kommando:

docker pull containous / whoami: siste

Docker vil da laste ned den siste versjonen av bildet eller fortelle deg at bildet er oppdatert. Hvis du går igjen etterpå docker-bilder du vil se at et bilde er lagt til.

Men den nåværende whoami-containeren bruker fortsatt det gamle bildet. For å oppgradere dette, avslutt (docker stopp whoami) og slett (docker rm wohami) du oppretter beholderen, og gjenskaper beholderen med docker run-kommandoen fra seksjon 4.

Ryddig

Hvis du regelmessig oppdaterer Docker-bildene dine for å kjøre den nyeste versjonen i en container, vil de gamle bildene forbli. Micro-SD-kortet til din Raspberry Pi med en kapasitet på maksimalt noen titalls gigabyte kan derfor raskt fylles opp, spesielt hvis du kjører store containere. For eksempel er containere som de fra Home Assistant og Rhasspy mer enn en gigabyte i størrelse. Nå jobber Docker med et system slik at en oppdatering ikke laster ned og lagrer hele gigabyten igjen, men etter mange oppdateringer fortsetter den nødvendige lagringsplassen å øke. Med oppdraget docker rmi IMAGE_ID du sletter et bilde basert på ID-en du ga i utgangen av kommandoen docker-bilder finner. Docker kjenner også kommandoen docker image beskjære som fjerner alle bilder som ikke brukes av en container. Med docker system beskjæring slett også stoppede containere, nettverk som ikke brukes av minst én container, og cache-filer.

07 bind

Eksempelbeholderen vår whoami brukte ingen konfigurasjonsdata eller data. Men du kan dele en katalog på Raspberry Pi med en Docker-container slik at den kan få tilgang til data fra den. Docker kaller en slik delt katalog et volum.

Hvis du skal jobbe med flere containere på Raspberry Pi, anbefales det at du legger katalogene deres sammen. Lag en katalog for det, for eksempel med:

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

Plasser deretter i mappen containere / nginx / data en fil index.html med en html-side.

Deretter kan du nå starte en container med nginx (en webserver) som du deler denne katalogen med:

docker kjøre -d --navn nginx -p 8080: 80 -v / home / pi / containere / nginx / data: / usr / share / nginx / html: ro nginx

Deretter starter beholderen med webserveren og monterer katalogen / hjem / pi / containere / nging / data på Raspberry Pi i containeren på stedet / usr / share / nginx / html, bare med lesetilgang (ro står for skrivebeskyttet). Hvis du surfer til IP: 8080 du får html-filen index.html å se.

08 Docker komponere

Så langt har vi manuelt lansert Docker-containere med kommando docker kjøre. Men hvis du kjører noen flere Docker-containere og regelmessig vil tilpasse konfigurasjonen deres, er en annen tilnærming bedre: å sette alt i en konfigurasjonsfil. Det fungerer med Docker Compose.

For å gjøre dette må du først installere Pythons pakkebehandler-pip og deretter Docker Compose (som er et Python-program) med disse kommandoene:

sudo apt installere python3-pip

sudo pip3 installer docker-compose

Nå kan du konfigurere flere Docker-containere i en fil docker-compose.yml sette. For å gjøre dette, opprett en Docker Compose-fil med:

nano docker-compose.yml

Sett i følgende konfigurasjon for eksemplene våre på containere whoami og nginx:

versjon: '3.7'

tjenester:

hvem er jeg:

bilde: containous / whoami

container_name: whoami

start på nytt: alltid

porter:

- 8888:80

nginx:

bilde: nginx

containernavn: nginx

start på nytt: alltid

porter:

- 8080:80

volumer:

- / hjem / pi / containere / nginx / data: / usr / share / nginx / html: ro

09 YAML

Lagre filen med Ctrl + O og lukk nano med Ctrl + X. Dette er en YAML-fil (med filtypen .yml). YAML (står for den rekursive forkortelsen "YAML Ain't Markup Language") er et filformat for å definere konfigurasjonsinformasjon på en lesbar måte. Mer info finner du på den offisielle nettsiden.

Du kan se i denne filen at vi definerer to containere som tjenester. For hver container definerer vi bildet som brukes, navnet som beholderen skal gis, og om beholderen skal starte på nytt automatisk i tilfelle problemer. I tillegg definerer vi også de viderekoblede portene og volumene.

All denne informasjonen kan også bli funnet på kommandolinjene med docker kjøre, men i denne Docker Compose-filen er den litt mer organisert.

10 Arbeide med Docker Compose

Når du får en fil docker-compose.yml du kan enkelt opprette og starte containerne som er definert i den:

docker-komponere opp -d

Etter det kan du administrere disse beholderne med docker-kommandoen, men docker-compose selv har også mange alternativer spesielt for å administrere containere du har opprettet med Docker Compose. Så du rydder opp med følgende kommando, alle definerte containere vil bli stoppet og fjernet:

docker-komponer ned

Du kan også følge opp loggene til alle containere med:

docker-komponer logger -f

Hver container viser loggmeldingene i en annen farge. Docker Compose har også en kjent melodi for å stoppe, starte og starte alle containere på nytt:

docker-compose stopp

docker-compose starter

docker-compose omstart

Oppdatering av alle containere i Docker Compose-filen gjøres med følgende to kommandoer:

docker-compose-trekk

docker-compose omstart

Den første kommandoen laster ned nye bilder for alle beholderne du har definert, og den andre kommandoen starter alle disse beholderne på nytt slik at de bruker det nye bildet. Deretter kan du fjerne de gamle bildene hvis ønskelig med:

docker image beskjære

11 Og utover

Du finner Docker-bilder av mange applikasjoner på Docker Hub. LinuxServer.io har også dusinvis av Docker-bilder vedlikeholdt av frivillige. Disse bildene er godt vedlikeholdt og dokumentert, og de bruker alle en lignende tilnærming og grunnleggende infrastruktur.

Prøv å begrense deg til "offisielle" Docker-bilder, levert av et prosjekt i seg selv, eller bilder fra pålitelige parter som LinuxServer.io. For i prinsippet kan alle publisere Docker-bilder på Docker Hub, men de blir ikke alltid oppdatert.

Riktig prosessorarkitektur

Det er viktig at du laster ned Docker-bilder for riktig prosessorarkitektur. Raspberry Pi har en ARM-prosessor, som ikke er kompatibel med Intel- eller AMD-prosessorer som finnes på PC-er. Mange Docker-bilder publiseres for automatisk å laste ned riktig versjon for prosessorarkitekturen din. På Docker Hub kan du finne hvilke arkitekturer som støttes på siden om ønsket Docker-bilde. For Raspbian er dette arm32v7, arm / v7 eller armhf. Hvis du får feilen exec-formatfeil du har sannsynligvis lastet ned et bilde av feil prosessorarkitektur. Hvis det skjer, må du laste ned et bilde med en annen tag. For eksempel distribuerer motionEye-prosjektet sitt offisielle Docker-bilde med to mulige koder: du kjører ccrisan / motioneye: master-amd64 på Intel-kompatible prosessorer og ccrisan / motioneye: master-armhf på en Raspberry Pi.

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