Kas tas Portainer ir kodėl apie jį kalba visi, kas liečia Docker?
Jei bent kartą bandei valdyti Docker konteinerius per komandinę eilutę, tikriausiai žinai tą jausmą – rašai docker ps -a, gauni ilgą sąrašą, bandai prisiminti kuris konteineris ką daro, o po kelių minučių jau esi pasimetęs. Ir tai dar gerai, jei dirbi su keliais konteineriais. Kai jų dešimtys, o dar pridedi tinklus, volumes, stack’us – terminalas tampa tikru galvos skausmu.
Čia į sceną įžengia Portainer. Tai atvirojo kodo įrankis, kuris Docker valdymą perkelia į naršyklę. Paprasta, graži sąsaja, kurioje matai viską – konteinerius, images, tinklus, volumes – ir gali su visu tuo dirbti be vienos komandinės eilutės. Na, beveik be vienos – kartais vis tiek tenka pasinaudoti integruotu terminalu, bet tai jau tavo pasirinkimas, ne būtinybė.
Portainer egzistuoja nuo 2017 metų ir per tą laiką tapo vienu populiariausių Docker valdymo įrankių pasaulyje. GitHub repozitorijoje – per 28 tūkstančius žvaigždučių. Tai ne atsitiktinumas. Žmonės jį naudoja tiek namų serveriuose, tiek enterprise aplinkose, ir abiem atvejais jis atlieka savo darbą gerai.
Portainer CE vs Business Edition – ką rinktis?
Portainer egzistuoja dviem pagrindiniais variantais. Community Edition (CE) – nemokamas, atvirojo kodo, ir daugumai žmonių jo visiškai pakanka. Business Edition (BE) – mokamas, su papildomomis funkcijomis, skirtas daugiau korporatyviniam naudojimui.
Konkrečiai, Business Edition prideda tokius dalykus kaip:
- Išplėstinė rolių ir teisių sistema (RBAC)
- GitOps integracijos
- Pažangesnė Kubernetes palaikymas
- Oficiali techninė pagalba
- Audit logs
Jei esi namų vartotojas, self-hosted entuziastas ar mažos komandos narys – CE yra viskas, ko reikia. Jei valdai didelę infrastruktūrą su keliolika žmonių komanda ir reikia tiksliai kontroliuoti kas ką gali daryti – tada verta pažiūrėti į BE. Bet šiame straipsnyje kalbėsime apie CE, nes tai yra tai, ką dauguma žmonių naudoja ir naudos.
Diegimas: nuo nulio iki veikiančios sąsajos per 5 minutes
Vienas geriausių Portainer dalykų – diegimas yra absurdiškai paprastas. Jei jau turi Docker, tau reikia tik dviejų komandų.
Pirma, sukuri volume, kuriame Portainer saugos savo duomenis:
docker volume create portainer_data
Tada paleidžia patį Portainer konteinerį:
docker run -d \
-p 8000:8000 \
-p 9443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
Viskas. Po kelių sekundžių eini į https://localhost:9443, sukuri administratoriaus paskyrą ir esi viduje. Naršyklė gali perspėti dėl SSL sertifikato – tai normalu, nes Portainer generuoja self-signed sertifikatą. Tiesiog priimk išimtį ir judėk toliau.
Svarbus pastebėjimas apie Docker socket: tas -v /var/run/docker.sock:/var/run/docker.sock yra labai svarbus. Tai leidžia Portainer komunikuoti su Docker daemon. Tačiau tai taip pat reiškia, kad Portainer konteineris turi root lygio prieigą prie Docker. Jei naudoji Portainer viešai prieinamame serveryje – būtinai apsaugok jį stipriu slaptažodžiu ir, idealiu atveju, apribok prieigą per firewall arba VPN.
Jei nori naudoti HTTP vietoj HTTPS (pavyzdžiui, jei priekyje turi reverse proxy kaip Nginx ar Traefik), naudok portą 9000 vietoj 9443.
Sąsaja iš vidaus: ką rasi ir kaip orientuotis
Pirmą kartą atidarius Portainer, gali pasijausti šiek tiek priblokštas – daug informacijos, daug mygtukų. Bet struktūra iš tikrųjų yra gana logiška.
Kairėje pusėje yra pagrindinis meniu. Viršuje matai Home – čia rodomi visi aplinkos (environments), kurias valdo Portainer. Jei turi tik vieną Docker instanciją, matai vieną aplinką. Jei jungiesi prie kelių serverių – matai visus čia.
Kai įeini į konkrečią aplinką, meniu išsiplečia:
- Dashboard – greita apžvalga: kiek konteinerių veikia, kiek sustabdyta, kiek images, volumes ir tinklų
- Stacks – čia valdai Docker Compose stack’us
- Containers – visų konteinerių sąrašas su galimybe juos paleisti, stabdyti, šalinti, peržiūrėti logus
- Images – atsisiųsti images, juos šalinti, push’inti į registry
- Networks – Docker tinklų valdymas
- Volumes – duomenų talpyklų valdymas
Konteinerių rodinyje kiekvienas konteineris turi greitų veiksmų mygtukus – paleisti, stabdyti, perkrauti, ištrinti. Taip pat galima vienu paspaudimu patekti į konteinerio logus arba atidaryti interaktyvų terminalą tiesiai naršyklėje. Tai ypač naudinga, kai reikia greitai patikrinti kas vyksta viduje nepaliekant naršyklės.
Stacks – Docker Compose naršyklėje
Jei Docker Compose yra tavo draugas, Portainer Stacks funkcija taps tavo nauja mėgstamiausia žaisliuku. Iš esmės, Stack’as Portainer kontekste yra Docker Compose failas, valdomas per grafinę sąsają.
Galima sukurti stack’ą keliais būdais:
- Web editor – tiesiog įklijuoji savo
docker-compose.ymlturinį į teksto lauką ir spaudžia „Deploy the stack” - Upload – įkelti failą iš savo kompiuterio
- Repository – nurodyti Git repozitoriją, iš kurios Portainer paims compose failą
- Custom template – naudoti iš anksto paruoštą šabloną
Git repozitorijos integracija yra ypač įdomi. Gali nurodyti GitHub ar GitLab repo URL, branch’ą ir kelią iki compose failo. Portainer periodiškai tikrina ar yra pakeitimų ir gali automatiškai atnaujinti stack’ą. Tai primityvus, bet veikiantis GitOps workflow.
Praktinis patarimas: jei turi kelis stack’us, naudok aiškius pavadinimus. „myapp”, „database”, „monitoring” – taip vėliau lengviau orientuotis nei „stack1”, „test”, „final_v2”.
Taip pat verta žinoti, kad Portainer palaiko aplinkos kintamuosius (environment variables) stack’uose. Vietoj to, kad slaptažodžius ir konfigūracijas rašytum tiesiai į compose failą, gali juos apibrėžti kaip kintamuosius Portainer sąsajoje. Tai švariau ir saugiau.
Kelių serverių valdymas iš vienos vietos
Viena iš galingiausių Portainer funkcijų – galimybė valdyti kelias Docker aplinkas iš vienos sąsajos. Tai ypač aktualu, jei turi kelis serverius – galbūt vieną namų serveriui, kitą VPS’ui, dar kitą testavimo aplinkai.
Portainer palaiko keletą prisijungimo būdų prie nuotolinių aplinkų:
Portainer Agent – instaliuoji agentą ant nuotolinio serverio ir jungies per jį. Tai rekomenduojamas būdas, nes jis saugesnis ir stabilesnis nei tiesioginis Docker API eksponavimas.
Agento diegimas ant nuotolinio serverio:
docker run -d \
-p 9001:9001 \
--name portainer_agent \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
portainer/agent:latest
Po to Portainer sąsajoje eini į Settings → Environments → Add environment, pasirenki „Agent” tipą ir nurodi serverio IP bei portą 9001.
Docker API per TLS – galima eksponuoti Docker API su TLS apsauga ir jungties tiesiai. Tai sudėtingiau sukonfigūruoti, bet veikia be agento.
Kai turi kelias aplinkas, Home puslapyje matai visas jas su greita statistika – kiek konteinerių veikia, koks CPU ir RAM naudojimas. Labai patogu, kai nori greitai patikrinti ar viskas gerai visuose serveriuose.
App Templates – greitas diegimas be galvos skausmo
Portainer turi įmontuotą šablonų biblioteką, vadinamą App Templates. Tai iš anksto paruošti konfigūracijos failai populiarioms aplikacijoms – WordPress, Nginx, MySQL, Redis, Nextcloud ir dar daug kitų.
Idėja paprasta: vietoj to, kad ieškotum Docker Hub’e, skaitytum dokumentaciją ir rašytum compose failą, tiesiog pasirenki šabloną, užpildai kelis laukus (dažniausiai tik slaptažodžiai ir portai) ir spaudžia „Deploy”. Per minutę turi veikiančią aplikaciją.
Tai ypač naudinga žmonėms, kurie tik pradeda su Docker arba nori greitai išbandyti kažką naujo. Nereikia žinoti visų Docker niuansų – šablonas pasirūpina visomis detalėmis.
Tačiau yra vienas „bet” – oficialūs Portainer šablonai ne visada atnaujinami laiku ir kartais naudoja senesnes image versijas. Jei rūpi saugumas ir naujumas, geriau naudok šablonus kaip pradžios tašką: pasiimk konfigūraciją, pakeisk image versiją į naujesnę ir tada diegk.
Taip pat galima sukurti savo šablonus. Jei turi aplikacijų, kurias dažnai diegini, galima jas išsaugoti kaip šablonus ir naudoti pakartotinai. Tai taupo laiką ir sumažina klaidų tikimybę.
Kai Portainer nėra atsakymas – ribos ir alternatyvos
Portainer yra puikus įrankis, bet ne visoms situacijoms. Verta žinoti jo ribas, kad vėliau nenusiviltum.
Kubernetes valdymui Portainer nėra geriausias pasirinkimas. Taip, CE versija turi bazinį Kubernetes palaikymą, bet jei rimtai dirbi su Kubernetes, geriau žiūrėk į Lens, k9s arba tiesiog naudok kubectl su geromis konfigūracijomis. Portainer Kubernetes funkcionalumas yra labiau „bonus” nei pagrindinis produktas.
Automatizacijai Portainer nėra tinkamas. Jei nori automatiškai diegti aplikacijas, rollback’inti, integruoti su CI/CD pipeline’ais – reikia rimtesnių įrankių. Portainer turi API, kurią galima naudoti skriptuose, bet tai nėra jo stiprioji pusė.
Monitoring ir alerting – ne Portainer reikalas. Portainer rodo bazinę statistiką, bet jei reikia rimto monitoringo, žiūrėk į Grafana + Prometheus arba panašius sprendimus.
Alternatyvos, kurias verta žinoti:
- Dockge – naujesnis, lengvesnis įrankis, skirtas būtent Docker Compose stack’ų valdymui. Labai gražus ir paprastas, bet mažiau funkcijų nei Portainer
- Yacht – dar viena grafinė Docker sąsaja, labiau orientuota į namų vartotojus
- Lazydocker – terminalinis įrankis (TUI), jei nepatinka naršyklės sąsajos, bet nori kažko geriau nei grynasis Docker CLI
- Rancher – enterprise lygio įrankis Docker ir Kubernetes valdymui, žymiai sudėtingesnis, bet ir galingesnis
Portainer kasdienybėje – kai žaisliukas tampa darbo įrankiu
Po kelių mėnesių naudojimo Portainer nustoja būti „cool nauja programa” ir tampa tiesiog darbo įrankiu. Ir tai yra geriausias komplimentas, kurį galima pasakyti apie bet kurią programinę įrangą.
Tipiškas naudojimo scenarijus: turi namų serverį su 15-20 konteinerių – Nextcloud, Jellyfin, Vaultwarden, Home Assistant, Nginx Proxy Manager ir dar visokių kitų dalykų. Portainer leidžia vienu žvilgsniu pamatyti ar viskas veikia, greitai perkrauti konteinerį, kuris pradėjo elgtis keistai, patikrinti logus kai kažkas neveikia, atnaujinti image versiją keliais paspaudimais.
Keletas praktinių patarimų iš realaus naudojimo:
- Naudok Stacks, ne atskirus konteinerius. Net jei turi tik vieną konteinerį, geriau sukurk jam Stack’ą su compose failu. Taip lengviau atnaujinti, konfigūruoti ir atkurti po serverio reinstaliacijos
- Reguliariai atnaujink Portainer. Saugumo pataisymai ateina dažnai. Portainer atnaujinimas yra paprastas – pull naują image, perkurk konteinerį
- Naudok labels. Docker labels leidžia pridėti metaduomenis prie konteinerių. Portainer juos rodo ir tai padeda orientuotis didelėje infrastruktūroje
- Apsaugok prieigą. Jei Portainer pasiekiamas iš interneto – naudok stiprų slaptažodį, įjunk 2FA (yra tokia funkcija) ir apsvarstyk prieigos ribojimą per VPN
- Išnaudok webhook funkcionalumą. Stack’ai gali turėti webhook URL – kai CI/CD sistema jį iškviečia, Portainer automatiškai atnaujina stack’ą. Tai paprastas būdas automatizuoti diegimus
Portainer nėra tobulas. Kartais sąsaja šiek tiek lėtoka su daug konteinerių. Kartais atnaujinimai sulaužo kažką, kas veikė anksčiau. Kartais norisi funkcijų, kurios yra tik Business Edition versijoje. Bet apskritai – tai vienas tų įrankių, kuriuos įdiegus sunku įsivaizduoti kaip be jo dirbai anksčiau. Docker valdymas per naršyklę nėra silpnumo ženklas – tai tiesiog protingas pasirinkimas, kai nori daugiau laiko skirti tam, ką daro konteineriai, o ne tam, kaip juos valdyti.
