Docker
Det udbredte værktøj, der gjorde containere nemme at bruge - det bygger container-images, deler dem og kører dem med få kommandoer.
Kladde - dette opslag er endnu ikke gennemgået.
Formelt
Et sæt værktøjer udgivet i 2013 til at bygge container-images ud fra en kort opskriftsfil, lægge dem op i og hente dem fra et container-register og starte og stoppe containere på en enkelt vært via en baggrundstjeneste.
Forklaret enkelt
Som et fast rederi for software - det pakker varerne i den samme slags kasse hver gang og leverer dem overalt, hvor den kasse bliver modtaget.
I praksis
En udvikler i et revisionsfirma skriver en kort fil med base-image og programmets filer, kører én build-kommando og giver det færdige image til den IT-driftsansvarlige, som kører det på firmaets servere.
Hvorfor det betyder noget
Det er sådan, de fleste først møder containere; som standard kører dets baggrundstjeneste med fulde rettigheder på værten, så adgang til den skal behandles som administratoradgang.
Teknisk uddybning
Docker blev præsenteret af Solomon Hykes fra dotCloud på PyCon i marts 2013. Den tidlige motor styrede LXC; i 2014 skiftede den til sit eget Go-bibliotek, libcontainer, som Docker i 2015 donerede til det nystiftede Open Container Initiative, hvor det blev til runc. Nutidens Docker Engine er en stak: docker-CLI'en sender REST-kald til dæmonen dockerd over en Unix-socket (/var/run/docker.sock) eller, hvis det er sat op, TCP; dockerd overlader containernes livscyklus (og, når containerd image store er slået til, også image-lagringen) til containerd via gRPC; containerd starter en shim per container, og shimmen kalder runc for at sætte namespaces, cgroups og sikkerhedsprofil op. De open source-dele udvikles under Moby-projektet, mens Docker Desktop er et separat kommercielt produkt, der kører motoren i en letvægts-Linux-VM på macOS og Windows.
Images bygges ud fra en Dockerfile, en række instruktioner (FROM, RUN, COPY, ENV, USER, ENTRYPOINT, CMD …), hvor trin, der ændrer filsystemet, giver lag. Siden Docker Engine 23.0 (februar 2023) har standardbyggeren på Linux været BuildKit, der afvikler en afhængighedsgraf parallelt, understøtter cache-mounts, secret-mounts (RUN --mount=type=secret), som holder legitimationsoplysninger ude af lagene, builds til flere platforme via buildx, og kan udsende SBOM- og provenance-attestationer. Docker Compose beskriver applikationer med flere containere på én vært i en compose.yaml-fil; Swarm mode tilføjer enkel klyngedrift, selvom det meste produktion på flere værter er flyttet til Kubernetes.
Den vigtigste sikkerhedsegenskab ved den klassiske opsætning er, at dockerd kører som root, og at enhver, der kan nå dens API, styrer værten: docker run -v /:/host --privileged giver en root-shell på maskinen, så medlemskab af gruppen docker svarer til root, og at montere docker.sock i en container (almindeligt i CI-runners og overvågningsagenter) giver containeren den samme magt. En eksponeret TCP-socket uden gensidig TLS på port 2375 har længe været et mål for kampagner med kryptomining. Afhjælpning omfatter rootless mode (dæmon og containere i et user namespace), userns-remap, autorisationsplugins, standardprofilerne for seccomp og AppArmor, --cap-drop=ALL med selektiv --cap-add, --read-only og aldrig at bruge --privileged i produktion. CIS Docker Benchmark samler sådanne indstillinger som tjek, der kan revideres.
Docker bruges ofte som synonym for containere, hvilket er misvisende. Kubernetes holdt op med at understøtte Docker Engine som runtime, da dockershim blev fjernet i 1.24, men images bygget med Docker kører overalt, fordi de følger OCI's image-format; Podman er et stort set CLI-kompatibelt alternativ uden dæmon. Licenser betyder også noget i organisationer: siden 2021 kræver Docker Desktop et betalt abonnement for større kommercielle brugere, mens Docker Engine på Linux fortsat er open source under Apache 2.0-licensen.
Hvad du bør lære først
Alt det, dette bygger på - grundlaget først.
Relationer
- Forudsætter
- Container-image
- Implementerer
- Container
- Bruges sammen med
- KubernetesContainer-register (registry)Container-runtime
Kilder og videre læsning
Standarder og officielle tekster
- NIST SP 800-190 - Application Container Security Guide · NIST
Officiel dokumentation
- Docker Docs - Docker overview · Docker
- Docker Engine 23.0 release notes · Docker
Hvor dataene kommer fra
Dette opslag er skrevet af en AI ud fra kilderne ovenfor og er endnu ikke gennemgået af et menneske. Brug det som udgangspunkt, og tjek alt vigtigt mod kilderne.
Se gennemgangskøenForeslå en rettelse på GitHubDette begreb som JSON
Test dig selv
Indlæser…