Docker — izoliuoti konteineriai stabilioms svetainėms
Visa 4buildsite platforma – redaktorius, API, atvaizdavimo variklis ir paslauga, pateikianti paskelbtas svetaines – veikia Docker konteineriuose: izoliuotuose paketuose, kuriuose yra viskas, ko reikia kiekvienai paslaugai. Tavo svetainė atvaizduojama statiškai ir pateikiama kaip pilna versija, atomiškai perjungiama kiekvieno paskelbimo metu. Paprastai tariant: paskelbimas vyksta atskirai nuo dabartinės versijos, o jei kas nors nepavyksta, grįžti į ankstesnę versiją.
Kas yra konteineris – ir kodėl tai svarbu tavo svetainei
Konteineris – standartizuotas paketas, kuriame yra programa ir absoliučiai viskas, ko jai reikia veikti: vykdymo aplinka, bibliotekos, konfigūracija. Konteineris veikia izoliuotai nuo likusio serverio, bet tiesiogiai naudoja pagrindinio kompiuterio Linux branduolį – be atskiros operacinės sistemos kiekvienai programai. 2013 m. pristatytas Docker šią technologiją pavertė prieinamu standartu; atvaizdo formatas šiandien standartizuotas kaip OCI (Open Container Initiative) ir veikia vienodai bet kuriame Linux serveryje ar debesyje.
Klasikinė analogija – jūrinis konteineris: nesvarbu, kokį krovinį jis talpina, jis turi tą pačią standartinę formą ir gali būti perkeltas bet kuriuo laivu, traukiniu ar sunkvežimiu. Taip pat 4buildsite paslaugos, kurios kuria ir pateikia tavo svetainę – redaktorius, FastAPI API, atvaizdavimo variklis – supakuotos į standartinius atvaizdus, kurie vienodai veikia testiniame ir produkciniame serveryje. Tau, kaip svetainės ar parduotuvės savininkui, tai reiškia nuspėjamumą: tai, ką matei peržiūroje, yra būtent tai, ką gauna lankytojai.
- Konteineris = programa + jos priklausomybės viename izoliuotame pakete
- Standartinis OCI formatas – tas pats atvaizdas veikia bet kuriame serveryje ar debesyje
- Be atskiros operacinės sistemos kiekvienai paslaugai – paleidimas per sekundes, o ne minutes
- 4buildsite platformoje konteinerizavimą tvarko platforma – tu tik skelbi
Izoliacija: tavo svetainė nepriklauso nuo kaimynų
Klasikiniame bendrame talpinime šimtai svetainių dalijasi tuo pačiu serveriu, tais pačiais procesais ir dažnai ta pačia PHP instaliacija. Jei kaimynas sulaukia srauto bangos ar blogai parašytas skriptas suryja visą procesorių, tavo svetainė sulėtėja – reiškinys, vadinamas „noisy neighbour“. 4buildsite šią problemą sprendžia iš dviejų pusių. Pirma: paskelbtos svetainės atvaizduojamos statiškai – jas pateikiančiuose serveriuose nevykdomas joks kiekvienai svetainei skirtas kodas (PHP, įskiepiai, skriptai), todėl nėra kaimyno blogai parašyto skripto, kuris gali suryti procesorių. Antra: platformos paslaugos veikia kiekviena savo konteineryje, su atskirais procesais ir failais (per namespaces) ir galimybe nustatyti CPU bei atminties limitus (per cgroups – Linux branduolio mechanizmus).
Izoliacija lygiai taip pat svarbi saugumui. Bendrame talpinime pažeista svetainė gali tapti vartais į kaimynines to paties serverio svetaines. 4buildsite paskelbta svetainė yra statinių failų rinkinys – nevykdomas kodas, kurį būtų galima pažeisti per įskiepius ar temas – o duomenis apdorojančios platformos paslaugos (užsakymai, mokėjimai, redaktorius) laikomos atskiruose konteineriuose: failų sistema izoliuota, o galimas incidentas lieka uždarytas to konteinerio viduje.
- Paskelbta svetainė = statiniai failai – nėra kiekvienai svetainei skirto kodo, kurį būtų galima pažeisti
- Platformos paslaugos: atskira failų sistema ir procesai kiekviename konteineryje
- Statinis pateikimas: serveriuose nevykdomas kiekvienai svetainei skirtas kodas
Ta pati versija visur: jokio „pas mane veikia, gyvai neveikia“
Dažniausias klasikinio žiniatinklio defektų šaltinis – skirtumas tarp aplinkos, kurioje svetainė testuota, ir serverio, kuriame ji veikia gyvai: kita kalbos versija, trūkstamas plėtinys, kita konfigūracija. Docker atvaizdas pašalina visą šią problemų kategoriją: atvaizdas sukuriamas vieną kartą, su visomis užfiksuotomis priklausomybėmis, ir būtent tas pats artefaktas veikia testuojant ir produkcijoje. Nėra „rankiniu būdu sukonfigūruota serveryje“.
Tau tai tiesiogiai virsta stabilumu. Kai keiti svetainę vizualiniame redaktoriuje panel.4buildsite.net ir spaudi paskelbti, lankytojus pasiekianti versija kaskart praėjo tuos pačius žingsnius, per tas pačias konteinerizuotas paslaugas. Mažiau staigmenų po paskelbimo – o internetinei parduotuvei kiekviena prastovos valanda reiškia prarastus užsakymus.
Paskelbimai atomiškai ir atšaukimas perjungimu atgal
4buildsite platformoje paskelbimas nereiškia „sustabdome svetainę, nukopijuojame failus, tikimės“. Kiekvienas paskelbimas sugeneruoja naują, pilną tavo svetainės versiją – atvaizduotą statiškai, atskirai nuo veikiančios – o perjungimas į ją yra atominis: vienos operacijos metu pateikimo paslauga pradeda aptarnauti naują versiją. Perjungimas vykdomas viena operacija, todėl net pirkinių krepšelio užsakymo viduryje lankytojas nemato tarpinės būsenos. Tas pats principas taikomas platformos paslaugoms: nauja konteinerio versija paleidžiama šalia senosios ir perima srautą tik po sveikatos patikrų.
Ne mažiau svarbus kelias atgal. Kiekviena paskelbta svetainės versija išsaugoma nepaliesta, todėl grįžimas į ankstesnę versiją reiškia tiesiog perjungimą atgal – perjungimo operaciją, o ne valandų trukmės atkūrimą iš atsarginės kopijos. Jei paskelbimas sukelia problemą, gali grįžti prie ankstesnės versijos. Vienintelis sąžiningas niuansas: duomenys (užsakymai, produktai, turinys) gyvena duomenų bazėje, atskirai nuo paskelbtų versijų – todėl jie valdomi pastoviuose tomuose, atskirai nuo svetainės failų.
- Kiekvienas paskelbimas = nauja, pilna versija, perjungiama atomiškai
- Atšaukimas (rollback) = perjungimas atgal į ankstesnę versiją
- Pakeitimus skelbi bet kada, įskaitant pardavimų sezono įkarštyje
Efektyvumas ir kaštai: daugiau našumo už tuos pačius pinigus
Klasikinė virtualioji mašina kiekvienai programai vykdo pilną operacinę sistemą – gigabaitai atminties ir paleidimo minutės, sunaudotos vien „pakuotei“. Konteineriai dalijasi pagrindinio kompiuterio branduoliu, todėl tame pačiame serveryje telpa daug daugiau svetainių, kiekviena su sava izoliacija. Šis tankis yra priežastis, kodėl 4buildsite gali įtraukti talpinimą ir SSL į prenumeratą, be atskirų infrastruktūros kaštų kiekvienai svetainei.
Tavo paskelbtai svetainei mastelio didinimas dar paprastesnis: kadangi tai statiniai failai, jų pateikimas itin pigus – lankytojų pikas reiškia daugiau pateiktų failų, o ne papildomus procesus, trukdančius vienas kitam. O platformos paslaugos, būdamos konteineriai, paleidžiami per sekundes, gali gauti papildomų instancijų, kai reikia. Moki nuspėjamą prenumeratą, o ne infrastruktūrą, nuolat dimensionuotą pačiai įtemptiausiai metų dienai. Apie tai, kaip faktiškai valdome šiuos konteinerius – orkestravimą, tarpinį serverį, CI/CD, stebėseną – skaityk puslapyje „Debesis ir DevOps“.
Privalumai ir apribojimai
Privalumai
- Paskelbta svetainė pateikiama statiškai, o platforma veikia izoliuotuose konteineriuose.
- Tie patys platformos atvaizdai testuojant ir produkcijoje – jokio „pas mane veikia, gyvai neveikia“.
- Paskelbimai atomiškai: nauja svetainės versija generuojama atskirai ir perjungiama viena operacija.
- Atšaukimas į anksčiau paskelbtą versiją, jei pakeitimas nepavyksta.
- Konteineriai paleidžiami per sekundes – platformos paslaugoms papildomos instancijos pridedamos, kai reikia.
- Didelis tankis viename serveryje – talpinimas įtrauktas į prenumeratą, be atskiros kainos.
Apribojimai
- Izoliacija naudoja bendrą pagrindinio kompiuterio branduolį – silpnesnė nei specialios virtualiosios mašinos aparatinė izoliacija.
- Konteineris yra laikinas: pastovūs duomenys (duomenų bazė, įkelti failai) reikalauja atskirai valdomų tomų ir atsarginių kopijų.
- Atvaizdai ir jų sluoksniai užima vietą diske – be periodinio valymo jie kaupiasi.
- Komandoms, kurios jį administruoja pačios, Docker turi realią mokymosi kreivę – 4buildsite platformoje jį visiškai tvarko platforma.
Trumpa išvada
Docker konteinerizavimas – de facto pramonės standartas žiniatinklio programoms vykdyti: izoliacija, testavimo ir produkcijos nuoseklumas bei atšaukimas. 4buildsite platformoje platforma, kuri kuria ir pateikia tavo svetainę, veikia konteinerizuota, o tavo svetainės paskelbimai versijuojami, perjungiami atomiškai ir atšaukiami – kaip valdoma infrastruktūra (orkestravimas, tarpinis serveris, CI/CD) aprašyta puslapyje „Debesis ir DevOps“.
Specifikacijų lentelė
| Galimybė | Riba / slenkstis | Tipinis naudojimas | |
|---|---|---|---|
| Išteklių izoliacija | CPU/RAM limitai kiekvienam konteineriui (cgroups, namespaces) | Bendras branduolys – tai ne aparatinė izoliacija kaip VM | Svetainės ir parduotuvės bendroje infrastruktūroje |
| Paleidimas / diegimas | Konteineris paleidžiamas per sekundes | Pirmasis atvaizdo atsisiuntimas trunka ilgiau | Dažni paskelbimai ir atnaujinimai kaip atomiški perjungimai |
| Atšaukimas (rollback) | Grįžti į bet kurį ankstesnį atvaizdą per sekundes | Duomenų bazės duomenys neatšaukiami kartu su atvaizdu | Grįžimas į ankstesnę versiją, kai atnaujinimas nepavyksta |
| Perkeliamumas | OCI atvaizdas – veikia bet kuriame Linux hoste ar debesyje | Atvaizdai priklauso nuo architektūros (x86/ARM) | Perkėlimas tarp serverių be programos perrašymo |
| Tankis / kaina | Dešimtys izoliuotų konteinerių viename serveryje | Visi dalijasi pagrindinio kompiuterio branduoliu ir disku | Maža kaina vienai svetainei – talpinimas įtrauktas į prenumeratą |
Docker ir virtualiosios mašinos ir bendras talpinimas (cPanel)
| Kriterijus | Docker (konteineriai) | Virtualiosios mašinos | Bendras talpinimas (cPanel) |
|---|---|---|---|
| Izoliacija | Kiekvienam konteineriui (procesai, failai, ištekliai) | Pilna (virtualizuota aparatinė įranga) | Silpna – šimtai svetainių tame pačiame serveryje |
| Paleidimo / diegimo greitis | Sekundės | Minutės (pilnas OS paleidimas) | Pakeitimai tiesiai gyvame serveryje (FTP) |
| Išteklių sąnaudos | Minimalios – be atskiros OS kiekvienai programai | Didelės – pilna OS kiekvienai mašinai | Mažos, bet nekontroliuojamai dalijamos tarp kaimynų |
| Atšaukimas (rollback) | Paleidi ankstesnį atvaizdą | Iš momentinės kopijos – lėčiau | Rankiniu būdu, iš atsarginės kopijos |
| Saugumas | Incidentas apribotas konteineriu | Stipriausia izoliacija | Pažeista svetainė gali paveikti kaimynus |
| Kaina vienai svetainei | Maža – didelis tankis serveryje | Aukšta – mokėti reikia už visą mašiną | Labai maža, bet nenuspėjamas našumas |
Dažniausiai užduodami klausimai
Ar Docker veikia mano svetainės greitį?
Konteineriai veikia natūraliai Linux branduolyje, be aparatinės virtualizacijos sluoksnio, todėl pridėtinės sąnaudos nereikšmingos. Svetainės greitį lemia kodas, talpykla ir tinklas.
Kodėl ne klasikinis talpinimas su cPanel, kaip WordPress?
Klasikiniame bendrame talpinime šimtai svetainių dalijasi tuo pačiu serveriu be griežtų limitų: perkrautas kaimynas tave sulėtina, o pažeistas gali paveikti. 4buildsite platformoje paskelbta svetainė pateikiama statiškai – nevykdomas kiekvienai svetainei skirtas kodas, kurį būtų galima pažeisti – o platformos paslaugos veikia izoliuotuose konteineriuose, su atomiškai perjungiamais paskelbimais. Tai, ko cPanel nesiūlo.
Kas nutinka, jei paskelbimas sugadina mano svetainę?
Anksčiau paskelbta versija vis dar egzistuoja, nepaliesta, todėl grįžimas – tik perjungimas: pateikimo paslauga perjungia atgal į ją. Atgal galima grįžti prie ankstesnės versijos, o duomenų bazės duomenys lieka nepaliesti.
Ar turiu žinoti Docker, kad naudočiau 4buildsite?
Ne. Konteinerizavimą visiškai tvarko platforma: tu kuri svetainę vizualiniame redaktoriuje panel.4buildsite.net ir skelbi. Docker dirba „po gaubtu“ – naudą (izoliaciją, atšaukimą, atomiškus paskelbimus) gauni be jokios konfigūracijos.
Ar Docker saugus internetinei parduotuvei?
Taip. Procesų ir failų izoliacija galimo incidento spindulį apriboja to konteinerio ribomis, o ne visu serveriu. Kortelių duomenys per konteinerį vis tiek nepraeina – mokėjimus apdoroja Stripe, Stripe sertifikuotoje infrastruktūroje.
Ar Docker tas pats, kas virtualioji mašina?
Ne. Virtualioji mašina virtualizuoja pilną aparatinę įrangą ir vykdo savo operacinę sistemą – paleidžiama minutes ir sunaudoja daug. Konteineris dalijasi pagrindinio kompiuterio branduoliu: paleidžiamas per sekundes, sunaudoja dalį išteklių ir išlaiko programos izoliaciją.