Kako koristiti docker na vašem Raspberri Pi

Raspberry Pi je idealan za instaliranje svih vrsta programa koji uvek moraju da se pokreću. Najpouzdaniji način da se to uradi je pomoću Docker-a: na ovaj način svaki program radi izolovan u kontejneru, tako da ne mogu da ometaju jedan drugog. Pokazaćemo vam kako da koristite Docker na Raspberry Pi-u i na šta treba da obratite pažnju.

Ako ste već neko vreme imali Raspberry Pi, velike su šanse da ćete nastaviti da instalirate sve više softvera na njega. Home Assistant,Zwave2Mqtt, Node-RED, Rhasspy… Sve ide dobro, sve dok ne ažurirate sav svoj softver na novu verziju, i odjednom jedan od vaših programa prestane da radi i da nejasnu poruku o grešci.

Шта се десило? Uobičajeni scenario je sledeći. Softver A i B koriste verziju 1.0 biblioteke C. U međuvremenu, objavljena je verzija 2.0 biblioteke C, koja nije kompatibilna sa C 1.0. Softver A se prepisuje tako da koristi biblioteku C 2.0, dok programeri softvera B nisu tako brzi i ostaće pri biblioteci C 1.0 neko vreme. Ažurirate softver A i on instalira biblioteku C 2.0. Ali Raspbian može da instalira samo jednu verziju biblioteke. Kao rezultat toga, softver B odjednom više ne radi, jer nije kompatibilan sa bibliotekom C 2.0.

U praksi, Linux distribucije čine sve što mogu da izbegnu ovakvu situaciju, ali to se dešava. Ponekad na mnogo suptilnije načine, tako da nije uvek odmah očigledno šta uzrokuje problem.

01 Šta je Docker?

Docker olakšava programerima da distribuiraju aplikacije tako da ih možete pokrenuti na bilo kom Linux sistemu. Ove aplikacije se mogu naći u obliku slike na Docker Hub-u. Takva slika je u osnovi šablon za minimalni Linux sistem, koji možete pokrenuti na Raspbian-u u obliku kontejnera.

Svaki kontejner je potpuno izolovan od ostalih kontejnera. Dakle, aplikacija u jednom kontejneru ne vidi aplikacije u drugim kontejnerima. A instaliranje i ažuriranje jednog kontejnera osigurava da nova verzija nije u sukobu sa aplikacijama u drugim kontejnerima. Dakle, ako želite da pokrenete više od nekoliko aplikacija na svom Raspberry Pi, Docker će vam pomoći da to učinite pouzdano. Zahvaljujući Docker-u, takođe možete bezbedno da eksperimentišete sa novim softverom: ne sviđa vam se, samo izbrišite kontejner nakon toga.

02 Instalirajte Docker

Pretpostavljamo da imate instaliran Raspbian, Lite verzija će biti dovoljna. Zatim se prijavite preko ssh-a da biste izvršili komande u ovom osnovnom kursu. Prvo, instalirajte Docker sa komandom:

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

Zatim dajte korisniku pi (sa kojim ste prijavljeni) pristup Docker-u, tako da ne pokrećete sve Docker komande sa komandom sudo mora da izvrši:

sudo usermod pi -aG docker

Odjavite se sa izlazom, a zatim se ponovo prijavite. Sada korisnik pripada pi grupi docker.

03 Zdravo svet

Sada bi trebalo da budete u mogućnosti da pokrenete prvi Docker kontejner:

docker run --rm hello-world

Ova komanda će pokrenuti Docker kontejner hello-world. Ovaj kontejner u svom izlazu pokazuje šta se tačno dešava: slika se ne nalazi na vašem Raspberry Pi-u i Docker je zatim preuzima sa Docker Hub-a. Zatim Docker kreira kontejner na osnovu ove slike i pokreće program u njemu. Po opciji --rm kontejner se čisti nakon zatvaranja programa. Sada znate da je Docker ispravno instaliran i da radi.

Hypriot

Jednostavno ćemo instalirati Docker na Raspbian u ovom osnovnom vodiču, ali su mogući i drugi operativni sistemi ako ste zainteresovani za Docker na Raspberry Pi. Na primer, postoji Hypriot: operativni sistem za Raspberri Pi koji je optimizovan za korišćenje Docker-a. Zatim morate samo da instalirate ovu sliku na micro-SD karticu vašeg Raspberry Pi i možete odmah da počnete da koristite Docker. Hypriot je posebno zanimljiv ako samo pokrećete Docker kontejnere na svom Raspberry Pi i ništa drugo.

04 Kreirajte kontejnere

Osnove rada sa Docker kontejnerima obavljaju se komandom docker, kao što smo pokazali u prethodnom koraku. Obično sa Docker-om ne želite da pokrenete kontejner i odmah ga isključite, već ga pustite da radi. Dakle, ne koristimo opciju --rm. Osim toga, želite da taj kontejner radi u pozadini, a da ne vidite izlaz na ekranu sve vreme. Опција -d.

Ako biste pokrenuli kontejner na ovaj način, Docker bi mu dao nasumično ime, što nije korisno ako imate više od nekoliko kontejnera. Sa opcijom --name NAME stoga kontejneru dajete fiksno ime.

Zatim morate pogledati i mrežne veze. Pošto je svaki Docker kontejner izolovan, ne možete samo pristupiti, na primer, veb serveru koji radi na portu 80 u kontejneru. Zbog toga morate da uputite Docker-u da prosledi svaki zahtev na portu 8888 na Raspberry Pi-u, na primer, na port 80 u određenom kontejneru. To radite sa opcijom -p 8888:80. Stavljajući sve ove opcije zajedno za uzorak kontejner containous/whoami, pokrenite sledeću komandu:

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

Ako sve prođe kako treba, nakon nekog vremena videćete dugačak niz heksadecimalnih brojeva (npr 5122c935ce5178751a59699d2c5605c607700bd04e5f57a6c18de434ae53956e). Ovo je ID kontejnera. Ako sada surfujete u svom veb pretraživaču da biste //IP:8888 sa umesto IP IP adresu vašeg Raspberry Pi-a, videćete veb stranicu koju generiše veb server u kontejneru.

05 Pregledajte svoje kontejnere

Jednom kada pokrenete nekoliko ovakvih kontejnera, upravljanje postaje važno. Pre svega, korisno je videti koji kontejneri rade:

docker ps

Tada ćete videti informacije o svim aktivnim kontejnerima (sa opcijom -a uključujući i kontejnere koji su stali). Prva kolona sadrži jedinstveni ID za svaki kontejner, a pored nje sliku od koje je kontejner napravljen. Kolona STATUS najbolje ako imate problema. Na primer, ako se vaš kontejner stalno ponovo pokreće zbog problema, videćete ga ovde.

U koloni LUKE vidite korišćene portove. Na primer, ispred našeg kontejnera je whoami 0.0.0.0:8888->80/tcp. To znači da će tcp port 8888 na Raspberry Pi-u biti preusmeren na tcp port 80 na kontejneru. U poslednjoj koloni vidite ime kontejnera, koje možete koristiti u daljim Docker komandama.

Ako želite više informacija, komanda dolazi docker statistika korisnim. Tada ćete videti statistiku za svaki kontejner, kao što je potrošnja procesora, memorije i mreže. Ako želite sve informacije koje Docker zna o određenom kontejneru, pokrenite ovu komandu sa ID-om ili imenom kontejnera:

docker pregledati KONTEJNER

I na kraju, ako želite da vidite evidenciju kontejnera, pokrenite jednu od ove dve komande:

docker logs KONTEJNER

docker evidencije -f KONTEJNER

Sa opcijom -f pratite evidencije u realnom vremenu dok ih kontejner generiše.

06 Upravljajte svojim kontejnerima i slikama

Ako želite da zaustavite, pokrenete ili ponovo pokrenete kontejner koji je pokrenut, to možete lako da uradite pomoću ovih komandi:

docker stop KONTEJNER

docker lansiranje KONTEJNER

docker restart CONTAINER

Ako želite da privremeno pauzirate kontejner (svi programi u njemu će biti privremeno 'zamrznuti'), pokrenite ovu komandu:

docker pauza KONTEJNER

Nakon ove komande, svi programi u kontejneru će se ponovo pokrenuti:

docker unpause CONTAINER

Sa komandom docker slike videćete listu slika koje je Docker preuzeo. Za naš whoami kontejner pogledajte u koloni REPOZITORIJ Текст containous/whoami stojeći i u koloni TAG stoji najnovije. Puno ime slike bi bilo containous/whoami: najnovije jesu, ali oni najnovije je podrazumevana vrednost za oznaku, pa se može izostaviti. Zato, u našem zadatku u odeljku 4, mi docker run само containous/whoami kao slika.

U koloni CREATED pogledajte pre koliko vremena je ova slika preuzeta. Da biste ažurirali ovu sliku, pokrenite sledeću komandu:

docker pull containous/whoami:latest

Docker zatim preuzima najnoviju verziju slike ili vam kaže da je slika ažurirana. Ako to ponovo uradite posle docker slike videćete da je slika dodata.

Ali trenutni Whoami kontejner i dalje koristi staru sliku. Da biste ovo nadogradili, zaustavite (docker stop whoami) i izbrišite (docker rm wohami) kreirate kontejner i ponovo kreirate kontejner koristeći docker run komandu iz odeljka 4.

Да почисти

Ako redovno ažurirate svoje Docker slike da biste pokrenuli najnoviju verziju u kontejneru, stare slike će ostati. Micro-SD kartica vašeg Raspberry Pi kapaciteta najviše nekoliko desetina gigabajta može se brzo napuniti, posebno ako koristite velike kontejnere. Na primer, kontejneri poput onih iz Home Assistant-a i Rhasspy-a su veći od gigabajta. Sada Docker radi sa sistemom tako da se uz ažuriranje ne preuzima i ponovo skladišti pun gigabajt, ali nakon mnogih ažuriranja potrebna memorija nastavlja da se povećava. Sa komandom docker rmi IMAGE_ID izbrišite sliku na osnovu ID-a koji navedete u izlazu komande docker slike nalazi. Docker takođe zna komandu docker slika prune koji uklanja sve slike koje kontejner ne koristi. Of docker sistem prune takođe uklonite zaustavljene kontejnere, mreže koje ne koristi bar jedan kontejner i keš datoteke.

07 Volume

Naš primer kontejnera whoami nije koristio nikakve konfiguracione podatke ili podatke. Ali možete da delite direktorijum na svom Raspberri Pi sa Docker kontejnerom tako da može da pristupi podacima iz njega. Docker takav deljeni direktorijum naziva volumenom.

Ako ćete raditi sa više kontejnera na vašem Raspberry Pi-u, preporučuje se da sve njihove direktorijume sastavite zajedno. Napravite direktorijum za to, na primer sa:

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

Zatim stavite u fasciklu kontejneri/nginx/podaci фајл index.html sa html stranicom.

Zatim sada možete pokrenuti kontejner sa nginx-om (veb server) sa kojim delite ovaj direktorijum:

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

Zatim se kontejner pokreće sa veb serverom i montira direktorijum /home/pi/containers/nging/data na vašem Raspberry Pi u kontejneru na lokaciji /usr/share/nginx/html, sa dozvolama samo za čitanje (ro označava samo za čitanje). Ako sada surfujete do IP:8080 da li dobijate html datoteku index.html видети.

08 Docker Compose

Do sada smo ručno pokretali Docker kontejnere komandom docker run. Ali ako koristite još nekoliko Docker kontejnera i želite da redovno menjate njihovu konfiguraciju, bolji je drugačiji pristup: stavljanje svega u jednu konfiguracionu datoteku. To važi i za Docker Compose.

Da biste to uradili, prvo instalirajte Python-ov menadžer paketa pip, a zatim Docker Compose (koji je Python program) sa ovim komandama:

sudo apt install python3-pip

sudo pip3 instaliraj docker-compose

Sada možete da konfigurišete više Docker kontejnera u jednoj datoteci docker-compose.yml направити. Da biste to uradili, kreirajte datoteku Docker Compose sa:

nano docker-compose.yml

Stavite tamo sledeću konfiguraciju za naše primere kontejnera whoami i nginx:

verzija: '3.7'

услуге:

ко сам ја:

slika: containous/whoami

naziv_kontejnera: whoami

restart: uvek

Лука:

- 8888:80

nginx:

slika: nginx

naziv_kontejnera: nginx

restart: uvek

Лука:

- 8080:80

obim:

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

09 YAML

Sačuvajte datoteku pomoću Ctrl+O i izađite iz nano-a pomoću Ctrl+X. Ovo je YAML datoteka (sa ekstenzijom .yml). YAML (skraćeno za rekurzivnu skraćenicu „YAML Ain't Markup Language“) je format datoteke za definisanje konfiguracionih podataka na čitljiv način. Više informacija možete pronaći na zvaničnom sajtu.

U ovoj datoteci možete videti da dva kontejnera definišemo kao usluge. Za svaki kontejner definišemo sliku koja se koristi, ime koje treba dati kontejneru i da li se kontejner treba automatski ponovo pokrenuti u slučaju problema. Pored toga, takođe definišemo preusmerene portove i volumene.

Takođe možete pronaći sve ove informacije na komandnim linijama sa docker run, ali u ovoj Docker Compose datoteci je malo organizovanije.

10 Rad sa Docker Compose

Jednom kada imate fajl docker-compose.yml možete lako kreirati i pokrenuti kontejnere definisane u njemu:

docker-compose up -d

Nakon toga možete upravljati ovim kontejnerima pomoću docker komande, ali sama docker-compose takođe ima mnogo opcija posebno za upravljanje kontejnerima koje ste kreirali pomoću Docker Compose. Ovako sve očistite sledećom komandom, svi definisani kontejneri će biti zaustavljeni i izbrisani:

docker compose down

Takođe možete pratiti evidenciju svih kontejnera sa:

docker-compose logs -f

Svaki kontejner prikazuje svoje dnevnik poruke u drugoj boji. Docker Compose takođe ima poznatu melodiju za zaustavljanje, pokretanje i ponovno pokretanje svih kontejnera:

docker compose stop

docker compose start

docker compose restart

Ažurirajte sve kontejnere u datoteci Docker Compose pomoću sledeće dve komande:

docker compose pull

docker compose restart

Prva komanda će preuzeti nove slike za sve kontejnere koje ste definisali, a druga komanda će ponovo pokrenuti sve te kontejnere tako da koriste novu sliku. Nakon toga možete izbrisati stare slike ako želite pomoću:

docker slika prune

11 I dalje

Možete pronaći Docker slike mnogih aplikacija na Docker Hub-u. Na LinuxServer.io ćete takođe pronaći desetine Docker slika koje održavaju volonteri. Ove slike su dobro održavane i dokumentovane, i sve koriste sličan pristup i osnovnu infrastrukturu.

Pokušajte da se ograničite na 'zvanične' Docker slike, koje obezbeđuje sam projekat, ili slike pouzdanih strana kao što je LinuxServer.io. Zato što u principu svako može da objavi Docker slike na Docker Hub-u, ali se one ne ažuriraju uvek.

Prava arhitektura procesora

Važno je da preuzmete Docker slike za ispravnu arhitekturu procesora. Raspberry Pi ima ARM procesor, koji nije kompatibilan sa Intel ili AMD procesorima koji se nalaze u računarima. Mnoge Docker slike se objavljuju da bi se automatski preuzela ispravna verzija za arhitekturu vašeg procesora. Na Docker Hub-u ćete pronaći koje su arhitekture podržane ispod željene stranice Docker slike. Za Raspbian to je arm32v7, arm/v7 ili armhf. Ako dobijete poruku o grešci prilikom pokretanja Docker kontejnera: greška u formatu exec verovatno ste preuzeli sliku pogrešne arhitekture procesora. Ako se to dogodi, moraćete da preuzmete sliku sa drugom oznakom. Na primer, projekat motionEye distribuira svoju zvaničnu Docker sliku sa dve moguće oznake: vi pokrećete ccrisan/motioneye:master-amd64 na Intel kompatibilnim procesorima i ccrisan/motioneye:master-armhf na Raspberry Pi.

Рецент Постс

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