Paano gumamit ng docker sa iyong Raspberry Pi

Ang Raspberry Pi ay mainam para sa pag-install ng lahat ng uri ng mga programa na palaging kailangang tumakbo. Ang pinaka-maaasahang paraan upang gawin iyon ay sa Docker: sa ganitong paraan ang bawat programa ay tumatakbo nang hiwalay sa isang lalagyan, kaya hindi sila makagambala sa isa't isa. Ipapakita namin sa iyo kung paano gamitin ang Docker sa isang Raspberry Pi at kung ano ang dapat mong bigyang pansin.

Kung matagal ka nang nagkaroon ng Raspberry Pi, malamang na patuloy kang mag-i-install ng mas maraming software dito. Home Assistant,Zwave2Mqtt, Node-RED, Rhasspy... Magiging maayos ang lahat, hanggang sa i-update mo ang lahat ng iyong software sa isang bagong bersyon, at biglang huminto sa paggana ang isa sa iyong mga program at nagbibigay ng hindi malinaw na mensahe ng error.

Anong nangyari? Ang isang karaniwang senaryo ay ang mga sumusunod. Ang software A at B ay parehong gumagamit ng bersyon 1.0 ng library C. Samantala, ang bersyon 2.0 ng library C ay inilabas, na hindi tugma sa C 1.0. Ang Software A ay muling isinusulat upang magamit ang library C 2.0, habang ang mga developer ng software B ay hindi ganoon kabilis at mananatili sa library C 1.0 nang ilang sandali. Ina-update mo ang software A at nag-i-install ng library C 2.0. Ngunit ang Raspbian ay maaari lamang mag-install ng isang bersyon ng isang library. Bilang resulta, biglang hindi na gumagana ang software B, dahil hindi ito tugma sa library C 2.0.

Sa pagsasagawa, ginagawa ng mga pamamahagi ng Linux ang lahat ng kanilang makakaya upang maiwasan ang ganitong uri ng sitwasyon, ngunit nangyayari ito. Minsan sa mas banayad na paraan, kaya hindi laging malinaw kung ano ang nagiging sanhi ng problema.

01 Ano ang Docker?

Pinapadali ng Docker para sa mga developer na ipamahagi ang mga application upang mapatakbo mo ang mga ito sa anumang Linux system. Ang mga application na ito ay matatagpuan sa anyo ng isang imahe sa Docker Hub. Ang ganitong imahe ay karaniwang isang template para sa isang minimal na sistema ng Linux, na maaari mong patakbuhin sa ibabaw ng Raspbian sa anyo ng isang lalagyan.

Ang bawat lalagyan ay ganap na nakahiwalay sa iba pang mga lalagyan. Kaya hindi nakikita ng application sa isang container ang mga application sa ibang container. At ang pag-install at pag-update ng isang container ay nagsisiguro na ang bagong bersyon ay hindi sumasalungat sa mga application sa iba pang mga container. Kaya't kung gusto mong magpatakbo ng higit sa isang dakot ng mga application sa iyong Raspberry Pi, tutulungan ka ng Docker na gawin iyon nang mapagkakatiwalaan. Salamat sa Docker, maaari ka ring ligtas na mag-eksperimento sa bagong software: hindi mo gusto ito, tanggalin lang ang lalagyan pagkatapos.

02 I-install ang Docker

Ipinapalagay namin na na-install mo ang Raspbian, sapat na ang bersyon ng Lite. Pagkatapos ay mag-log in sa pamamagitan ng ssh upang maisagawa ang mga utos sa pangunahing kursong ito. Una, i-install ang Docker gamit ang command:

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

Pagkatapos ay ibigay ang gumagamit pi (kung saan ka naka-log in) access sa Docker, kaya hindi mo pinapatakbo ang lahat ng Docker command gamit ang command sudo dapat gumanap:

sudo usermod pi -aG docker

Mag-log out gamit ang exit at pagkatapos ay mag-log in muli. Ngayon ang gumagamit ay kabilang pi sa grupo docker.

03 Kamusta mundo

Magagawa mo na ngayong mag-boot ng unang lalagyan ng Docker:

docker run --rm hello-world

Ang utos na ito ay tatakbo sa Docker container na hello-world. Ipinapakita ng container na ito sa output nito kung ano ang eksaktong nangyayari: ang larawan ay hindi makikita sa iyong Raspberry Pi at pagkatapos ay dina-download ng Docker mula sa Docker Hub. Pagkatapos ay gagawa si Docker ng isang lalagyan batay sa larawang ito at pinapatakbo ang programa dito. Sa pamamagitan ng pagpipilian --rm nililinis ang lalagyan pagkatapos isara ang programa. Alam mo na ngayon na ang Docker ay wastong naka-install at gumagana.

Hypriot

I-install lang namin ang Docker sa Raspbian sa pangunahing tutorial na ito, ngunit posible rin ang iba pang mga operating system kung interesado ka sa Docker sa isang Raspberry Pi. Halimbawa, mayroong Hypriot: isang operating system para sa Raspberry Pi na na-optimize para sa paggamit ng Docker. Kailangan mo lang i-install ang larawang ito sa micro-SD card ng iyong Raspberry Pi at maaari mong simulan agad ang paggamit ng Docker. Lalo na kawili-wili ang Hypriot kung nagpapatakbo ka lang ng mga Docker container sa iyong Raspberry Pi at wala nang iba pa.

04 Gumawa ng mga lalagyan

Ang mga pangunahing kaalaman sa pagtatrabaho sa mga lalagyan ng Docker ay ginagawa gamit ang utos docker, tulad ng ipinakita namin sa nakaraang hakbang. Karaniwan sa Docker hindi mo nais na magpatakbo ng isang lalagyan at agad itong isara, ngunit hayaan itong tumakbo. Kaya hindi namin ginagamit ang opsyon --rm. Dagdag pa, gusto mong tumakbo ang lalagyan na iyon sa background, nang hindi nakikita ang output sa screen sa lahat ng oras. Ang pagpipilian -d.

Kung sinimulan mo ang isang lalagyan sa ganitong paraan, bibigyan ito ng Docker ng random na pangalan, na hindi kapaki-pakinabang kung mayroon kang higit sa isang dakot ng mga lalagyan. Gamit ang pagpipilian --pangalan NAME samakatuwid ay binibigyan mo ang lalagyan ng isang nakapirming pangalan.

Pagkatapos ay kailangan mo ring tingnan ang mga koneksyon sa network. Dahil ang bawat lalagyan ng Docker ay nakahiwalay, hindi mo maa-access ang halimbawa ng isang web server na tumatakbo sa port 80 sa isang lalagyan. Samakatuwid, kailangan mong turuan ang Docker na ipasa ang bawat kahilingan sa port 8888 sa Raspberry Pi, halimbawa, sa port 80 sa isang partikular na lalagyan. Gawin mo iyon gamit ang opsyon -p 8888:80. Pagsasama-sama ng lahat ng mga opsyong ito para sa sample container na naglalaman/whoami, patakbuhin ang sumusunod na command:

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

Kung magiging maayos ang lahat, makalipas ang ilang sandali ay makakakita ka ng mahabang string ng mga hexadecimal na numero (tulad ng 5122c935ce5178751a59699d2c5605c607700bd04e5f57a6c18de434ae53956e). Ito ang ID ng container. Kung nagsu-surf ka ngayon sa iyong web browser sa //IP:8888 kasama sa halip na IP ang IP address ng iyong Raspberry Pi, makakakita ka ng web page na binuo ng web server sa container.

05 Tingnan ang iyong mga lalagyan

Kapag nakapagsimula ka na ng ilang lalagyan na tulad nito, magsisimulang maging mahalaga ang pamamahala. Una sa lahat, kapaki-pakinabang na makita kung aling mga lalagyan ang tumatakbo:

docker ps

Makakakita ka ng impormasyon tungkol sa lahat ng mga container na aktibo (na may opsyon -a kasama ang mga lalagyan na huminto). Naglalaman ang unang column ng natatanging ID para sa bawat container, sa tabi nito ang larawan kung saan ginawa ang container. Ang column STATUS pinakamahusay kung mayroon kang mga problema. Halimbawa, kung patuloy na nagre-restart ang iyong container dahil sa isang problema, makikita mo ito dito.

Sa column MGA PORTS nakikita mo ang mga port na ginamit. Halimbawa, sa harap ng aming lalagyan ay si whoami 0.0.0.0:8888->80/tcp. Ibig sabihin, ang tcp port 8888 sa Raspberry Pi ay ire-redirect sa tcp port 80 sa container. Sa huling column makikita mo ang pangalan ng container, na magagamit mo sa mga karagdagang command ng Docker.

Kung gusto mo ng karagdagang impormasyon, darating ang utos mga istatistika ng docker kapaki-pakinabang. Pagkatapos ay makikita mo ang mga istatistika para sa bawat lalagyan, tulad ng pagkonsumo ng processor, memorya at network. Kung gusto mo ang lahat ng impormasyong alam ng Docker tungkol sa isang partikular na container, patakbuhin ang command na ito gamit ang ID o pangalan ng container:

sinisiyasat ng docker ang CONTAINER

At sa wakas, kung gusto mong tingnan ang mga log ng isang container, patakbuhin ang isa sa dalawang command na ito:

docker logs CONTAINER

docker logs -f CONTAINER

Gamit ang pagpipilian -f sundan ang mga log sa real time habang binubuo sila ng container.

06 Pamahalaan ang iyong mga lalagyan at larawan

Kung gusto mong ihinto, simulan o i-restart ang isang container na tumatakbo, magagawa mo ito nang madali gamit ang mga command na ito ayon sa pagkakabanggit:

docker stop CONTAINER

inilunsad ng docker CONTAINER

i-restart ng docker ang CONTAINER

Kung gusto mong pansamantalang i-pause ang isang lalagyan (lahat ng mga programa sa loob nito ay pansamantalang 'ma-frozen'), patakbuhin ang command na ito:

docker pause CONTAINER

Pagkatapos ng command na ito, tatakbo muli ang lahat ng program sa container:

i-unpause ng docker ang CONTAINER

Gamit ang utos mga larawan ng docker makikita mo ang listahan ng mga larawan na na-download ng Docker. Para sa aming whoami container tingnan sa column REPOSITORY ang teksto naglalaman/whoami nakatayo at nasa hanay TAG nakatayo pinakabago. Ang buong pangalan ng larawan ay magiging naglalaman/whoami:pinakabago ay, ngunit ang mga iyon pinakabago ay ang default na halaga para sa tag, kaya maaaring tanggalin. Kaya nga, sa assignment namin sa section 4, kami tumakbo sa pantalan basta naglalaman/whoami bilang isang imahe.

Sa column NILIKHA tingnan kung gaano katagal na-download ang larawang ito. Upang i-update ang larawang ito, patakbuhin ang sumusunod na command:

docker pull containous/whoami:latest

Pagkatapos ay ida-download ng Docker ang pinakabagong bersyon ng larawan o sasabihin sa iyo na ang larawan ay napapanahon. Kung gagawin mo ulit pagkatapos mga larawan ng docker makikita mo na ang isang imahe ay naidagdag.

Ngunit ang kasalukuyang lalagyan ng whoami ay gumagamit pa rin ng lumang imahe. Upang i-upgrade ito, ihinto (docker stop whoami) at tanggalin (docker rm wohami) gagawa ka ng container, at muling likhain ang container gamit ang docker run command mula sa seksyon 4.

Para maglinis

Kung regular mong ina-update ang iyong mga larawan ng Docker upang patakbuhin ang pinakabagong bersyon sa isang lalagyan, mananatili ang mga lumang larawan. Mabilis na mapupuno ang micro-SD card ng iyong Raspberry Pi na may kapasidad na hindi hihigit sa ilang sampu-sampung gigabytes, lalo na kung nagpapatakbo ka ng malalaking container. Halimbawa, ang mga container tulad ng mula sa Home Assistant at Rhasspy ay higit sa isang gigabyte ang laki. Ngayon gumagana ang Docker sa isang system upang sa isang pag-update ay hindi na ang buong gigabyte ay nai-download at naiimbak muli, ngunit pagkatapos ng maraming mga pag-update ang kinakailangang imbakan ay patuloy na tumataas. Gamit ang utos docker rmi IMAGE_ID tanggalin ang isang imahe batay sa ID na iyong tinukoy sa output ng command mga larawan ng docker nahanap. Alam din ng Docker ang utos Prun ng imahe ng docker na nag-aalis ng lahat ng larawang hindi ginagamit ng isang lalagyan. Ng prune ng sistema ng pantalan alisin din ang mga nakahintong container, mga network na hindi ginagamit ng kahit isang container, at mga cache file.

07 Dami

Ang aming halimbawang container na whoami ay hindi gumamit ng anumang configuration data o data. Ngunit maaari kang magbahagi ng isang direktoryo sa iyong Raspberry Pi sa isang lalagyan ng Docker upang ma-access nito ang data mula dito. Tinatawag ng Docker ang naturang shared directory bilang volume.

Kung gagawa ka ng maraming container sa iyong Raspberry Pi, inirerekomenda na pagsama-samahin mo ang kanilang mga direktoryo. Lumikha ng isang direktoryo para doon, halimbawa sa:

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

Pagkatapos ay ilagay sa folder mga lalagyan/nginx/data isang file index.html na may html na pahina.

Pagkatapos ay maaari ka na ngayong magsimula ng isang lalagyan na may nginx (isang web server) kung saan mo ibinabahagi ang direktoryong ito:

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

Pagkatapos ay magsisimula ang lalagyan sa web server at i-mount ang direktoryo /home/pi/containers/nging/data sa iyong Raspberry Pi sa lalagyan sa lokasyon /usr/share/nginx/html, na may read only na mga pahintulot (ro ibig sabihin ay read only). Kung nagsu-surf ka ngayon sa IP:8080 nakukuha mo ba ang html file index.html upang makita.

08 Docker Compose

Sa ngayon, manu-mano naming sinimulan ang mga lalagyan ng Docker na may utos tumakbo sa pantalan. Ngunit kung nagpapatakbo ka ng ilan pang mga container ng Docker at gusto mong baguhin ang kanilang configuration nang regular, mas mainam ang ibang diskarte: ilagay ang lahat sa isang configuration file. Napupunta sa Docker Compose.

Upang gawin iyon, i-install muna ang package manager pip ng Python at pagkatapos ay Docker Compose (na isang Python program) gamit ang mga utos na ito:

sudo apt install python3-pip

sudo pip3 i-install ang docker-compose

Ngayon ay maaari mong i-configure ang maramihang mga lalagyan ng Docker sa isang file docker-compose.yml gumawa. Upang gawin ito, lumikha ng isang Docker Compose file na may:

nano docker-compose.yml

Ilagay doon ang sumusunod na configuration para sa aming mga halimbawang container na whoami at nginx:

bersyon: '3.7'

mga serbisyo:

sino ako:

larawan: naglalaman/whoami

container_name: whoami

restart: palagi

port:

- 8888:80

nginx:

larawan: nginx

container_name: nginx

restart: palagi

port:

- 8080:80

dami:

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

09 YAML

I-save ang file gamit ang Ctrl+O at lumabas sa nano gamit ang Ctrl+X. Ito ay isang YAML file (na may extension na .yml). Ang YAML (ay nangangahulugang recursive abbreviation na "YAML Ain't Markup Language") ay isang format ng file upang tukuyin ang data ng configuration sa isang nababasang paraan. Higit pang impormasyon ay matatagpuan sa opisyal na website.

Makikita mo sa file na ito na tinutukoy namin ang dalawang container bilang mga serbisyo. Para sa bawat lalagyan, tinutukoy namin ang ginamit na larawan, ang pangalan na dapat ibigay sa lalagyan at kung dapat awtomatikong mag-restart ang lalagyan kung sakaling magkaroon ng mga problema. Bilang karagdagan, tinutukoy din namin ang mga na-redirect na port at ang mga volume.

Maaari mo ring mahanap ang lahat ng impormasyong ito sa mga command line na may tumakbo sa pantalan, ngunit sa Docker Compose file na ito ay medyo mas organisado.

10 Paggawa gamit ang Docker Compose

Kapag mayroon kang file docker-compose.yml madali mong magagawa at mapatakbo ang mga lalagyan na tinukoy dito:

docker-compose up -d

Pagkatapos nito, maaari mong pamahalaan ang mga container na ito gamit ang docker command, ngunit ang docker-compose mismo ay mayroon ding maraming mga opsyon partikular na pamahalaan ang mga container na iyong ginawa gamit ang Docker Compose. Ito ay kung paano mo linisin ang lahat gamit ang sumusunod na command, ang lahat ng tinukoy na mga lalagyan ay ititigil at tatanggalin:

gumawa ng docker down

Maaari mo ring sundin ang mga log ng lahat ng container na may:

docker-compose logs -f

Ipinapakita ng bawat container ang mga log message nito sa ibang kulay. Ang Docker Compose ay mayroon ding pamilyar na tune para sa paghinto, pagsisimula, at pag-restart ng lahat ng mga container:

docker compose stop

pagsisimula ng docker compose

pag-restart ng docker compose

I-update ang lahat ng container sa iyong Docker Compose file gamit ang sumusunod na dalawang command:

docker compose pull

pag-restart ng docker compose

Ang unang command ay magda-download ng mga bagong larawan para sa lahat ng mga container na iyong tinukoy at ang pangalawang command ay magre-reboot sa lahat ng mga container upang magamit nila ang bagong larawan. Pagkatapos nito, maaari mong tanggalin ang mga lumang larawan kung gusto mo gamit ang:

Prun ng imahe ng docker

11 At higit pa

Makakahanap ka ng mga larawan ng Docker ng maraming application sa Docker Hub. Sa LinuxServer.io makakahanap ka rin ng dose-dosenang mga imahe ng Docker na pinapanatili ng mga boluntaryo. Ang mga larawang ito ay mahusay na pinananatili at naidokumento, at lahat sila ay gumagamit ng isang katulad na diskarte at pangunahing imprastraktura.

Subukang limitahan ang iyong sarili sa 'opisyal' na mga larawan ng Docker, na ibinibigay ng isang proyekto mismo, o mga larawan mula sa mga mapagkakatiwalaang partido gaya ng LinuxServer.io. Dahil sa prinsipyo kahit sino ay maaaring mag-publish ng mga imahe ng Docker sa Docker Hub, ngunit hindi sila palaging napapanahon.

Ang tamang arkitektura ng processor

Mahalagang mag-download ka ng mga larawan ng Docker para sa tamang arkitektura ng processor. Ang Raspberry Pi ay may ARM processor, na hindi tugma sa mga processor ng Intel o AMD na makikita sa mga PC. Maraming mga imahe ng Docker ang na-publish upang awtomatikong i-download ang tamang bersyon para sa iyong arkitektura ng processor. Sa Docker Hub, makikita mo kung aling mga arkitektura ang sinusuportahan sa ilalim ng gustong pahina ng imahe ng Docker. Para sa Raspbian iyon ay arm32v7, arm/v7 o armhf. Kung nakuha mo ang mensahe ng error kapag nagsisimula ng isang lalagyan ng Docker: error sa format ng exec malamang na nag-download ka ng isang imahe ng maling arkitektura ng processor. Kung mangyari iyon, kakailanganin mong mag-download ng larawang may ibang tag. Halimbawa, ipinamahagi ng proyekto ng motionEye ang opisyal na larawan ng Docker nito na may dalawang posibleng tag: tumakbo ka ccrisan/motioneye:master-amd64 sa mga processor na katugma sa Intel at ccrisan/motioneye:master-armhf sa isang Raspberry Pi.

Kamakailang mga Post

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