Kas yra Docker? Konteineriai paprastai paaiškinti nespecialistams
Docker – tai įrankis, kuris supakuoja programą kartu su viskuo, ko jai reikia veikti – tinkama kalbos versija, bibliotekos, sistemos įrankiai ir nustatymai – į standartinį vienetą, vadinamą konteineriu. Konteineris veikia vienodai kūrėjo nešiojamajame, bandymų serveryje ar debesies hostinge, todėl išsprendžiama klasikinė problema „bet pas mane veikė“. Konteinerio sukūrimo receptas yra trumpas tekstinis failas, vadinamas Dockerfile.
Kodėl Docker svarbus kuriant su DI
Jei jūsų programa turi backendą – Python, Node, C# ar Java API – ji turi veikti kažkur, kur įdiegta būtent reikalinga programinė įranga. Docker yra dažniausias būdas tai padaryti pakartojamai.
- Backendų diegimas. Daugelis hostingų, įskaitant Mythex, diegia backendus sukurdami konteinerį iš Dockerfile. Mythex prašydami „C# Web API“ ar „Java backend“ gausite programą ir Dockerfile, o publikavimas sukuria paveikslėlį ir jį diegia (API backendai).
- Išėjimas iš platformos. Jei eksportuojate DI kuriamą programą, Dockerfile gerokai palengvina jos paleidimą kitame hostinge. Žr. kaip eksportuoti ir savarankiškai talpinti DI kuriamą programą.
- Darbas su kūrėjais. Kūrėjas, prisijungęs prie jūsų projekto, gali paleisti visą programą vienu ar dviem komandomis, o ne leisti dieną diegiant įrankius.
Kasdienis palyginimas: jūrų konteineriai
Prieš standartinius jūrinius konteinerius krovinys buvo kraunamas po gabalą – maišais, statinėmis, dėžėmis – ir kiekvienas uostas tai tvarkė skirtingai. Standartinis plieninis konteineris tai pakeitė: supakuokite vieną kartą, ir bet koks laivas, kranas, traukinys ar sunkvežimis gali jį perkelti nesirūpindamas, kas viduje.
Docker daro tą patį su programine įranga:
- Dockerfile yra pakavimo sąrašas ir instrukcijos.
- Paveikslėlis yra užsandarintas, supakuotas konteineris.
- Veikiantis konteineris yra ta dėžė, pradėjusi veikti laive – čia serveryje.
- Docker Engine yra kranas ir laivas: programinė įranga serveryje, žinanti, kaip paleisti bet kurį konteinerį.
Kaip veikia Docker
| Dalis | Kas tai yra |
|---|---|
| Dockerfile | Tekstinis failas su žingsnis po žingsnio instrukcijomis paveikslėliui sukurti. |
| Paveikslėlis (image) | Tik skaitomas paketas: operacinės sistemos pagrindai, vykdymo aplinka, bibliotekos ir jūsų kodas. |
| Konteineris | Veikiantis paveikslėlio egzempliorius, izoliuotas nuo kitų programų toje pačioje mašinoje. |
| Registras | Vieta paveikslėliams saugoti ir dalytis, pavyzdžiui, Docker Hub ar debesies teikėjo registras. |
| Docker Engine | Fono paslauga, kuri kuria paveikslėlius ir paleidžia konteinerius. Nemokama ir atvirojo kodo. |
| Docker Desktop | Programa Mac, Windows ir Linux, kuri sujungia variklį su grafine sąsaja. |
Konteineriai ir virtualios mašinos: virtuali mašina apsimeta visu atskiru kompiuteriu su savo operacine sistema, todėl ji sunki ir lėta paleisti. Konteineris dalijasi pagrindinės mašinos operacinės sistemos branduoliu ir izoliuoja tik programą bei jos failus, todėl paprastai paleidžiamas per kelias sekundes ir naudoja gerokai mažiau atminties. Vienas serveris gali vienu metu paleisti daug konteinerių.
Darbo pavyzdys: mažas Python API
Tarkime, jūsų DI kūrimo įrankis sukūrė Python FastAPI backendą rezervacijų programai. Dockerfile galėtų atrodyti taip:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Eilutė po eilutės:
| Eilutė | Ką daro |
|---|---|
FROM python:3.12-slim | Pradeda nuo oficialaus paveikslėlio, kuriame jau įdiegtas Python 3.12. |
WORKDIR /app | Dirba /app aplanke konteineryje. |
COPY requirements.txt . ir RUN pip install ... | Nukopijuoja bibliotekų sąrašą ir jas įdiegia. |
COPY . . | Nukopijuoja paties programos kodą. |
EXPOSE 8000 | Pažymi, kad programa klausosi 8000 prievado. |
CMD [...] | Komanda, kuri paleidžia žiniatinklio serverį, kai konteineris pradeda veikti. |
Paprastais žodžiais: „Pradėk nuo Python 3.12. Įdiegk bibliotekas, išvardytas requirements.txt. Nukopijuok kodą. Paleisk žiniatinklio serverį 8000 prievade.“
Kūrėjas (arba diegimo platforma) tada paleidžia dvi komandas:
docker build -t booking-api .
docker run -p 8000:8000 booking-api
Pirmoji sukuria paveikslėlį ir pavadina jį booking-api. Antroji paleidžia konteinerį ir sujungia 8000 prievadą mašinoje su 8000 prievadu konteinerio viduje. API dabar veikia – taip pat, kaip veiks bet kuriame serveryje, kuriame yra Docker.
Atkreipkite dėmesį, kas nėra paveikslėlyje: slaptažodžių ir API raktų. Jie perduodami paleidžiant konteinerį kaip aplinkos kintamieji, todėl tas pats paveikslėlis gali veikti testavime ir gamyboje su skirtingais nustatymais.
Pagrindiniai terminai
| Terminas | Reikšmė |
|---|---|
| Konteineris | Izoliuotas, veikiantis programos ir jos priklausomybių paketas. |
| Paveikslėlis (image) | Šablonas, iš kurio paleidžiamas konteineris. |
| Bazinis paveikslėlis | Pradinis taškas Dockerfile FROM eilutėje, pavyzdžiui, python:3.12-slim ar node:22. |
| Sluoksnis | Kiekvienas Dockerfile žingsnis prideda talpinamą sluoksnį, todėl perkūrimas greitesnis. |
| Prievado susiejimas | Prievado mašinoje sujungimas su prievadu konteinerio viduje. |
| Tomas (volume) | Saugykla, kuri išlieka, kai konteineris pakeičiamas. Patys konteineriai yra vienkartiniai. |
| Docker Compose | Failas, aprašantis kelis kartu veikiančius konteinerius, pavyzdžiui, API ir duomenų bazę. |
| Kubernetes | Sistema daugybei konteinerių paleisti daugybėje serverių. Dauguma mažų programų jos nereikia. |
Dažni klaidingi įsitikinimai
- „Docker yra virtuali mašina.“ Jis lengvesnis: konteineriai dalijasi pagrindinės mašinos branduoliu.
- „Duomenys, išsaugoti konteineryje, saugūs.“ Konteineriai skirti išmesti ir pakeisti. Viskas, kas turi išlikti – naudotojų duomenys, įkėlimai – turi būti duomenų bazėje, failų saugykloje ar tome.
- „Slaptažodžių įrašymas Dockerfile yra gerai, nes jis privatus.“ Paveikslėliai dalijami ir įkeliami į registrus. Perduokite slaptažodžius paleidimo metu.
- „Docker padaro programą saugią.“ Izoliacija padeda, bet konteineris su pasenusia programine įranga ir silpnais nustatymais vis tiek pažeidžiamas.
- „Kiekvienai programai reikia Docker.“ Statinė svetainė ar paprastas frontendas paprastai talpinami kaip paprasti failai, be konteinerio.
- „Docker Desktop nemokamas visiems.“ Variklis nemokamas; Docker Desktop didesnėms įmonėms reikia mokamos prenumeratos pagal Docker sąlygas.
Ko paprašyti iš DI kūrėjo
- „Ar šiai programai reikia Dockerfile? Jei taip, paaiškink kiekvieną eilutę paprasta kalba.“
- „Naudok mažą oficialų bazinį paveikslėlį ir fiksuok kalbos versiją.“
- „Laikyk slaptažodžius ir raktus nepaveikslėlyje. Nuskaityk juos iš aplinkos kintamųjų paleidimo metu.“
- „Įsitikink, kad įkėlimai ir duomenys saugomi duomenų bazėje ar failų saugykloje, o ne konteineryje.“
- „Pridėk Docker Compose failą, kad kūrėjas galėtų paleisti frontendą, API ir duomenų bazę lokaliai viena komanda.“
- „Pridėk sveikatos patikros galinį tašką, kad platforma galėtų pasakyti, ar API veikia.“
Docker Mythex
Norint naudotis Mythex, Docker įdiegti ar paleisti nereikia. Jūsų projektas veikia privačioje debesies smėlio dėžėje, o kai prašote backendo, kuriam reikia konteinerio – pavyzdžiui, C#, Java ar savo Node ar Python paslaugos – Mythex parašo programą ir Dockerfile, parodo ją smėlio dėžėje ir diegia publikuodamas, be jokio hostingo sąrankos (kaip parenkama technologija). Pro plane galite eksportuoti projektą arba sinchronizuoti jį su GitHub ir pasiimti Dockerfile su savimi. Kaip backendai ir frontendai susijungia, žr. frontendas ir backendas.
Klausimai
Kas yra Docker paprastais žodžiais?
Docker – tai įrankis, kuris supakuoja programą kartu su viskuo, ko jai reikia veikti – kalbos vykdymo aplinka, bibliotekos ir nustatymai – į standartinį vienetą, vadinamą konteineriu. Konteineris veikia vienodai nešiojamajame kompiuteryje, bandymų serveryje ar debesies hostinge.
Koks skirtumas tarp Docker paveikslėlio ir konteinerio?
Paveikslėlis yra supakuotas, tik skaitomas šablonas: programa ir jos priklausomybės, sukurtos pagal Dockerfile. Konteineris yra veikiančia kopija to paveikslėlio. Iš vieno paveikslėlio galima paleisti daug konteinerių.
Ar Docker yra virtuali mašina?
Ne. Virtuali mašina imituoja visą kompiuterį su savo operacine sistema. Konteineriai dalijasi pagrindinės mašinos operacinės sistemos branduoliu ir izoliuoja tik programą, todėl jie paleidžiami greičiau ir naudoja mažiau atminties.
Ar Docker nemokamas?
Docker Engine, pagrindinė dalis, kuri vykdo konteinerius, yra nemokama ir atvirojo kodo. Nuo 2026 m. rugsėjo Docker sąlygos sako, kad Docker Desktop nemokamas nekomerciniams atvirojo kodo projektams ir įmonėms, turinčioms mažiau nei 250 darbuotojų ir mažiau nei 10 mln. dolerių metinių pajamų; didesnėms įmonėms reikia mokamos prenumeratos.
Ar man reikia mokytis Docker, kad kurčiau programą su DI?
Paprastai ne. Daugelis DI kūrimo įrankių konteinerius tvarko už jus. Naudinga žinoti, kas yra Dockerfile, kad suprastumėte, kaip supakuotas backendas, ir galėtumėte paleisti ar talpinti programą kitur, jei ją eksportuojate.