Apple lansira Docker alternativu pokretnu Swiftom za macOS


Apple je predstavio Swift-pokretanu, open-source alternativu Dockeru za pokretanje Linux kontejnera na macOS-u, usredotočenu na sigurnost i izolaciju.

Apple je tiho objavio novi projekt otvorenog koda koji bi mogao značajno promijeniti način na koji se kontejneri pokreću na macOS-u. Jednostavno nazvan container, uvodi runtime za kontejnere pokretan Swiftom i izvorno iz Applea, dizajniran posebno za macOS sustave, posebno one koji rade na Apple Siliciju.

U svojoj srži, container omogućuje korisnicima da povlače, grade, pokreću i šalju standardne Linux kontejnere koji su u skladu s OCI. Međutim, za razliku od Dockera, koji se obično oslanja na zajednički virtualni stroj za sve kontejnere na macOS-u, Appleov pristup pokreće svaki kontejner u vlastitom laganom mikro-VM-u, s izoliranim Linux kernelom i mrežnim slojem. Prema GitHub stranici projekta:

Alat koristi i proizvodi OCI-kompatibilne slike kontejnera, tako da možete povući i pokrenuti slike iz bilo kojeg standardnog registra kontejnera. Također možete slati slike koje izgradite u te registre i pokretati ih u bilo kojoj drugoj OCI-kompatibilnoj aplikaciji.

Ovaj model odražava koncept microVM-ova populariziranih alatima poput Firecracker-a, ali je usko integriran u macOS putem Virtualization.framework-a, Appleovog izvornog sučelja za hipervizore.

Iako Apple ovo ne predstavlja kao potpuno zamjenu za Docker, alat pokriva mnogo istih područja za slučajeve lokalnog razvoja. CLI je poznat i pristupačan: s naredbama poput container image pull alpine, ili container run -ti alpine sh.

Ono što ovaj alat izdvaja je njegova besprijekorna integracija u sam operativni sustav macOS. Umjesto da emulira Linux okruženje koristeći vanjske alate, Appleovo rješenje koristi Swift za velik dio svog korisničkog sloja, uključujući mali init sustav nazvan vminitd koji pokreće kontejnere za nekoliko milisekundi.

Projekt također uključuje Swift paket, „Containerization“, koji izlaže niskorazinske API-je za upravljanje slikama, volumena, mrežama i procesima pokretanja, pružajući naprednim korisnicima i tvorcima alata snažnu osnovu.

U redu, zasad ide dobro, ali sada mi dopustite da podijelim nekoliko vlastitih razmišljanja o toj temi. Iskreno, malo sam zbunjen ovim potezom Applea. I odmah ću objasniti zašto.

Prvo, razjasnimo jednu stvar—ne postoji pravo izvorno kontejneriziranje na bilo kojem operativnom sustavu osim Linuxa, i za to postoji jednostavan razlog. Docker se oslanja na značajke Linux kernela specifične za Linux poput cgroups, namespace-ova i overlay datotečnih sustava, koje kernel macOS-a ne može pružiti.

Iz tog razloga, novi Appleov projekt koristi zasebnu laganu Linux VM za pokretanje svakog pojedinog kontejnera. U isto vrijeme, Dockerov pristup je pokretanje svega unutar jedne virtualne mašine (izgrađene s LinuxKitom) koja hosta Docker Engine i sve kontejnere.

Dakle, u slučaju Applea, svaki kontejner je u svom zasebnom VM-u, što znači puno VM-ova (bez obzira koliko su lagani), što ne izgleda kao najučinkovitiji pristup.

S druge strane, zasebni VM-ovi imaju i neke prednosti. Na primjer, jedna ključna prednost Appleovog novog projekta je što svakom kontejneru dodjeljuje vlastito izdvojeno Linux kernel, za razliku od Dockera, koji dijeli jedan kernel među svim kontejnerima (ne možete miješati verzije kernela po kontejneru).

Štoviše, također koristi ugrađeni macOS mrežni sloj, dok se Docker obično oslanja na virtualni stroj s NAT-om ili mostovskom mrežom. Kako bi to bilo jasnije, sastavio sam kratku usporednu tablicu:

ZnačajkaDocker DesktopPosuda za jabuke
VM modelZajednički VM za sve kontejnereMikro‑VM po spremniku
JezgraJedno Linux kernel jezgro za sveNamjenski Linux kernel po kontejneru
BazaKoristi Docker Engine i hipervizor (npr. qemu ili HyperKit)Koristi Appleov vlastiti Virtualization.framework
MreženjeNAT ili most preko VM-aIzvorna mrežna struktura macOS-a (s ograničenjima u ranim verzijama)
Vrijeme izvođenjarunc/containerdvminitd, prilagođeni Swift init sustav
IntegracijaVišeplatformski i usmjeren na kontejnereDuboko macOS-native i usmjeren na Swift

Unatoč svim razlikama, osnovna ideja je ista u oba slučaja—izgradnja, pokretanje i rad s OCI-kompatibilnim kontejnerskim slikama. S te perspektive, Docker i dalje nudi puno više fleksibilnosti i mogućnosti od Appleovog novog projekta.

Na primjer, još ne postoji ekvivalent docker-compose, a ekosustav alata (npr. nema GUI nadzornu ploču, ograničena orkestracija) još uvijek treba biti razvijen i poboljšan.

Pa se pitam zašto je Apple uložio sav taj trud u stvaranje ovoga. Osim “Made by Apple”, čini se da žele uzeti svoj udio iz ove ogromne niše, gotovo u potpunosti pod dominacijom Dockera, nudeći bolju integraciju s macOS-om, koristeći API-je sustava umjesto daemon-a trećih strana, i na kraju, bolju sigurnosnu izolaciju, što smanjuje površinu napada.

Budući da je projekt još uvijek u svojim ranim fazama, bit će zanimljivo vidjeti kako će se razvijati – i hoće li moći ispuniti Appleova očekivanja te na kraju zamijeniti Docker ili Podman kao glavni alat za kontejnere za programere na macOS-u.