Kon­tei­ne­ri­zā­ci­ja ar Docker šodien ir standarts – taču tā ne vienmēr ir labākā izvēle jebkurā situācijā. Tādi rīki kā Podman vai BuildKit piedāvā spēcīgas al­ter­na­tī­vas, sniedzot priekš­ro­cī­bas tādās jomās kā drošība, CI/CD un veikt­spē­ja. Šajā rakstā mēs izpētīsim labākās pro­fe­sio­nā­lās Docker al­ter­na­tī­vas, sa­lī­dzi­nā­sim to galvenās funkcijas un pa­lī­dzē­sim jums noteikt, kurš ri­si­nā­jums ir vis­pie­mē­ro­tā­kais jūsu kon­krē­ta­jam lie­to­ša­nas gadījumam.

Docker al­ter­na­tī­vu sa­lī­dzi­nā­jums īsumā

Funkcija Docker Podman BuildKit Kaniko LXC/LXD runC
Vir­tua­li­zā­ci­ja OS līmenis OS līmenis – (izveides rīks) – (izstrādes rīks) OS līmenis OS līmenis
Lietotņu kon­tei­ne­ri ~
Pilnas sistēmas kon­tei­ne­ri
Saderīgs ar Docker ~ ~
Iespējams bez saknēm ~ ~
Piemērots CI/CD ~
Ku­ber­ne­tes-gatavs ~ ~
Kon­tei­ne­ra formāts Docker-kon­tei­ners Docker-kon­tei­ners Dockerfi­le Slāņveida failu sistēma LXC OCI
Licence Apache 2.0 Apache 2.0 Apache 2.0 Apache 2.0 LGPLv2.1+ / Apache 2.0 Apache 2.0
Plat­for­mas Linux, Windows, macOS, AWS, Azure Linux, Windows Linux, Windows Linux, Ku­ber­ne­tes Linux Linux
Tip

Vēlies uzzināt vairāk par Docker? Ie­pa­zīs­ties ar mūsu atsevišķo Docker apmācību.

Kāpēc apsvērt Docker al­ter­na­tī­vas?

Lai gan Docker ir spēcīgs rīks, tas ne vienmēr ir labākais ri­si­nā­jums. Izmaiņas Docker li­cen­cē­ša­nas no­tei­ku­mos, piemēram, Docker Desktop ko­mer­cia­li­zā­ci­ja, ir ie­tek­mē­ju­šas daudzus uzņēmumus. Tajā pašā laikā Docker atkarība no root piekļuves un centrālā dēmonu iz­man­to­ša­na var pa­lie­li­nāt po­ten­ciā­lo uzbrukumu risku, radot bažas par drošību.

Turklāt Ku­ber­ne­tes, vadošais kon­tei­ne­ru or­ķes­trē­ša­nas rīks, vairs neizmanto Docker kā savu no­klu­sē­ju­ma izpildes vidi. Tā vietā tagad tiek iz­man­to­tas tādas izpildes vides kā con­tai­nerd vai CRI-O. Daudzos lie­to­ša­nas gadījumos – īpaši drošībai jutīgās vidēs vai au­to­ma­ti­zē­tos CI/CD procesos – spe­cia­li­zē­ti rīki var piedāvāt labākus ri­si­nā­ju­mus.

Podman – Docker bez dēmonu

Podman šobrīd ir visplašāk pazīstamā un tiešākā al­ter­na­tī­va Docker. To padara īpaši in­te­re­san­tu tas, ka Podman darbojas bez centrālā dēmonu, ļaujot tieši palaist kon­tei­ne­ru procesus un, ja ne­pie­cie­šams, bez ne­pie­cie­ša­mī­bas pēc root piekļuves. Tas ie­vē­ro­ja­mi uzlabo drošību, jo īpaši ražošanas vidē.

Image: Podman Homepage
Podman Website Screenshot

Vēl viena priekš­ro­cī­ba ir lieliska saderība: ja jau esat pazīstams ar Docker, ar Podman jums nebūs nekādu grūtību, jo tā komandu struktūra ir gandrīz identiska. Turklāt tas ne­vai­no­ja­mi in­teg­rē­jas ar systemd un Ku­ber­ne­tes.

Tomēr ir arī negatīva puse: Podman grafiskās lietotāja saskarnes (GUI) vai GUI rīki nav tik attīstīti kā Docker Desktop rīki. Turklāt sa­rež­ģī­tā­kiem pro­jek­tiem ar vairākiem kon­tei­ne­riem pāreja no Docker Compose var prasīt dažas izmaiņas.

Se­ci­nā­jums: Podman ir ideāls ri­si­nā­jums iz­strā­dā­tā­jiem un ad­mi­nis­tra­to­riem, kuri meklē drošu, uz ko­man­drin­das balstītu un ar Docker saderīgu al­ter­na­tī­vu – it īpaši ražošanas Linux vidēs.

BuildKit – moderns Docker veidotājs

BuildKit ir iz­strā­dā­ju­si Docker komanda, lai aizstātu klasisko komandu „docker build“. Tas izceļas ar izcilu ātrumu, viedo kešēšanu un spēju pārvaldīt izveides slepenos datus, kas ir milzīgs priekš­ro­cī­ba sa­rež­ģī­tās CI/CD procesa plūsmās.

Tiek at­bal­stī­ta arī paralēla izveide, kas padara BuildKit īpaši efektīvu. To var aktivizēt Docker vidē vai izmantot kā atsevišķu rīku. Kom­bi­nā­ci­jā ar Docker vai Podman tas ie­vē­ro­ja­mi pa­augst­i­na attēlu izveides veikt­spē­ju. Tomēr trūkums ir tas, ka BuildKit pilnībā neaizstāj Docker. Tas ir vērsts vienīgi uz izveides procesu. Ikvienam, kurš vēlas pārvaldīt vai izvietot kon­tei­ne­rus, būs ne­pie­cie­šams papildu rīks.

Se­ci­nā­jums: BuildKit ir ideāls ri­si­nā­jums DevOps komandām un iz­strā­dā­tā­jiem, kuriem svarīgas ir ātras un drošas kom­pi­lā­ci­jas – it īpaši au­to­ma­ti­zē­tās vidēs.

Kaniko – kon­tei­ne­ru izveide bez Docker

Kaniko ir Google rīks, kas īpaši iz­strā­dāts kon­tei­ne­ru izveidei Ku­ber­ne­tes vidē – bez Docker vai root piekļuves. Tas darbojas pilnībā podā un var veidot attēlus tieši mākonī, piemēram, GitHub Actions vai Google Cloud Build.

Tādēļ Kaniko ir ideāli piemērots au­to­ma­ti­zē­tiem CI/CD procesiem, kuros nav ne­pie­cie­šams instalēt papildu izpildes vidi. No drošības viedokļa svarīga priekš­ro­cī­ba ir tā, ka Kaniko darbojas bez root piekļuves, kas nozīmē, ka to var droši izmantot kop­lie­to­tās klastera vidēs. Tomēr Kaniko nav uni­ver­sāls rīks. Tas nav piemērots vietējai izstrādei vai in­te­rak­tī­vam darbam ko­man­drin­dā – trūkst tādu izplatītu funkciju kā piekļuve ko­man­drin­dai vai elastīga kon­tei­ne­ru pār­val­dī­ba.

Se­ci­nā­jums: Kaniko ir ideāls ri­si­nā­jums komandām, kas strādā mākonī bāzētās vidēs un vēlas droši au­to­ma­ti­zēt kon­tei­ne­ri­zē­tus izstrādes procesus – it īpaši Ku­ber­ne­tes vidēs.

LXC / LXD – kon­tei­ne­ri­zā­ci­ja sistēmas līmenī

LXC (Linux Con­tai­ners) ir zemlīmeņa teh­no­lo­ģi­ja ope­rē­tājsis­tē­mas vir­tua­li­zā­ci­jai Linux vidē, kas pastāv jau vairāk nekā desmit gadus. Tā ļauj palaist un pārvaldīt pil­nvēr­tī­gas Linux sistēmas kon­tei­ne­ros – ko parasti dēvē par sistēmas kon­tei­ne­riem.

Image: LXC Homepage
LXC Homepage Screenshot

LXD, ko 2015. gadā iz­strā­dā­ja Canonical, nodrošina lie­to­tā­jam draudzīgu pār­val­dī­bas slāni virs LXC. Tas piedāvā tādas funkcijas kā paša iz­strā­dā­tu ko­man­drin­das in­ter­fei­su (CLI), REST API, attēlu pār­val­dī­bu un mo­men­tuz­ņē­mu­mus, tādējādi padarot to īpaši noderīgu pro­fe­sio­nā­lās in­fras­truk­tū­rās.

LXC un LXD – kāpēc tās atkal ap­vie­no­jās

2023. gadā uzņēmums „Canonical“ nodeva LXD atpakaļ LXC kopienai, un kopš tā laika abi projekti tiek attīstīti kopīgi Linux Con­tai­ners Project ietvaros. Šīs ap­vie­no­ša­nās mērķis ir no­dro­ši­nāt pār­re­dza­mā­ku, kopienas vadītu uz­tu­rē­ša­nu un abu kom­po­nen­tu ciešāku in­teg­rā­ci­ju. Kamēr LXC paliek par tehnisko pamatu, LXD turpina darboties kā lie­to­tā­jam draudzīga lietotāja saskarne.

Fun­kcio­nā­lā sa­da­lī­ju­ma struktūra paliek nemainīga:

  • LXC darbojas kā zemā līmeņa teh­no­lo­ģi­ja
  • LXD joprojām ir ērta pār­val­dī­bas saskarne

Tehniskā kla­si­fi­kā­ci­ja

Sa­lī­dzi­not ar Docker, LXC un LXD ir daudz tuvāki tra­di­cio­nā­la­jām vir­tuā­la­jām mašīnām. Tie nodrošina pil­nvēr­tī­gas sistēmas vides ar init sistēmām, lietotāju pār­val­dī­bu, prog­ram­ma­tū­ras pakotņu pār­val­dī­bu un citām funkcijām – kas ie­vē­ro­ja­mi pārsniedz tipiskos lie­to­jum­prog­ram­mu kon­tei­ne­rus, ko piedāvā Docker vai Podman. Tomēr, ne­iz­man­to­jot hi­per­vī­zo­ru, tiem joprojām izdodas saglabāt vieglumu un augstu veikt­spē­ju.

Ie­ro­be­žo­ju­mi

Trūkums ir tas, ka LXC/LXD nav op­ti­mi­zēts mik­ro­ser­vi­siem, mākonim pie­lā­go­tām ie­vie­ša­nām vai mūs­die­nī­giem CI/CD procesiem. Pār­val­dī­ba var būt sa­rež­ģī­tā­ka, un in­teg­rā­ci­ja kon­tei­ne­ru eko­sis­tē­mās, piemēram, Ku­ber­ne­tes, ir minimāla.

Se­ci­nā­jums: LXC un LXD ir lielisks ri­si­nā­jums sistēmu ad­mi­nis­tra­to­riem, hostinga pa­kal­po­ju­mu snie­dzē­jiem vai komandām, kas vēlas izolēt pil­nvēr­tī­gas Linux sistēmas, tādējādi kalpojot kā vieglāka virtuālo mašīnu al­ter­na­tī­va. Abu teh­no­lo­ģi­ju ap­vie­no­ša­na Linux Con­tai­ners Project ietvaros sola stabilāku nākotni, ko no­dro­ši­nās kopienas uz­tu­rē­ša­na.

runC – kon­tei­ne­ru izpildes vide pie­re­dzē­ju­šiem lie­to­tā­jiem

runC ir OCI spe­ci­fi­kā­ci­jas (Open Container Ini­tia­ti­ve) etalona īs­te­no­jums, un to aiz­ku­li­sēs izmanto daudzi rīki, piemēram, Docker, Podman vai con­tai­nerd. Ikvienam, kurš vēlas pārvaldīt kon­tei­ne­rus visze­mā­ka­jā līmenī, vis­ti­ca­māk būs jāizmanto runC.

Tā lielākā priekš­ro­cī­ba ir vieglums, jo runC nodrošina tikai to, kas ne­pie­cie­šams kon­tei­ne­ru pa­lai­ša­nai, tādējādi padarot to ļoti elastīgu. Tas ir ideāli piemērots pie­lā­go­tiem kon­tei­ne­ru ri­si­nā­ju­miem vai vidēm, kurās galvenā uzmanība tiek pievērsta drošībai.

Tomēr runC ir paredzēts pie­re­dzē­ju­šiem lie­to­tā­jiem. Tam trūkst ērtas ko­man­drin­das saskarnes kon­tei­ne­ru pār­val­dī­bai vai izveidei, un to parasti izmanto kā daļu no pie­lā­go­tām rīku ķēdēm vai dziļai sistēmas in­teg­rā­ci­jai.

Se­ci­nā­jums: runC ir ideāli piemērots spe­cia­li­zē­tām lie­to­jum­prog­ram­mām, pēt­nie­cī­bai, drošības no­dro­ši­nā­ša­nai vai zemā līmeņa kon­tei­ne­ru vidēm – tas nav paredzēts ikdienas prog­ram­mē­ša­nai.

Ku­ber­ne­tes – nav Docker al­ter­na­tī­va, bet gan augstāks slānis

Izplatīts nepareizs uzskats ir, ka Ku­ber­ne­tes neaizstāj Docker. Tā vietā tas izmanto kon­tei­ne­ru izpildes vidi, lai palaistu kon­tei­ne­rus. Lai gan Docker kādreiz bija standarta izpildes vide, Ku­ber­ne­tes kopš 1.20. versijas izmanto stan­dar­ti­zē­tas izpildes vides, piemēram, con­tai­nerd vai CRI-O.

Image: Kubernetes Homepage
Ku­ber­ne­tes Homepage Screenshot

Šie rīki nodrošina kon­tei­ne­ru pār­val­dī­bu, taču tiem nav savu kom­pi­lā­ci­jas vai CLI fun­kcio­na­li­tā­tes, kāda ir Docker. Tāpēc Ku­ber­ne­tes pats par sevi nav Docker al­ter­na­tī­va, bet gan or­ķes­trā­ci­jas rīks – kontroles slānis virs kon­tei­ne­riem.

Praksē tas nozīmē, ka ikvienam, kurš strādā ar Ku­ber­ne­tes, ir jāapzinās, ka Docker vairs nav tehniskā pamata – lai gan daudzi attēli joprojām ir Docker formātā.

Kura Docker al­ter­na­tī­va ir piemērota tieši jums?

Pareizā Docker al­ter­na­tī­va lielā mērā ir atkarīga no jūsu kon­krē­ta­jām va­ja­dzī­bām:

  • Lai no­dro­ši­nā­tu maksimālu drošību, Podman ir labākā izvēle.
  • Augstas veikt­spē­jas kom­pi­lā­ci­jām izceļas BuildKit, savukārt mākoņvidē priekš­ro­ka tiek dota Kaniko.
  • Visu sistēmu iz­olē­ša­nai labāka izvēle ir LXC/LXD.
  • Lai no­dro­ši­nā­tu pilnīgu kontroli izpildes laikā, runC ir vienkāršs ri­si­nā­jums pro­fe­sio­nā­ļiem.

Galu galā ir vērts pa­pla­ši­nāt skatījumu ārpus Docker – kon­tei­ne­ru pasaule ir daudz­vei­dī­gā­ka nekā jebkad agrāk.

Go to Main Menu