Hva er greia med Docker?

- Er du erfaren med å publisere applikasjoner på servere på "den gamle måten" vil du fort se nytten ved Docker, forteller skykonsulent Harald Vinje.

Harald Vinje er utvikler i Capra Consulting, hvor han jobber med backend, infrastruktur og sky hos Vy. 📸: Privat
Harald Vinje er utvikler i Capra Consulting, hvor han jobber med backend, infrastruktur og sky hos Vy. 📸: Privat Vis mer

Docker er et navn det nesten er umulig å ikke høre om i utviklingsbransjen, likevel er det langt fra alle prosjekter som bruker det.

For mange kan teknologien kanskje virke litt unødvendig? Kanskje har man blitt vant til et oppsett, og ikke hatt tid til å ta steget inn i Docker-verdenen?

Vi er der selv! Derfor tok vi en prat med Harald Vinje (25) som er utplassert backend- og sky-konsulent fra Capra Consulting hos Vy om hvorfor han digger teknologien.

#1. Hvordan ville du forklart Docker til en nyutdannet utvikler? 🤔

Docker er en plattform for å utvikle, teste ut og kjøre applikasjoner eller tjenester i såkalte containere.

I dagens mikrotjenesteparadigme kan det fort oppstå problemer ved å utvikle og kjøre sammensatte mikrotjenester på én og samme maskin. for eksempel om en av tjenestene kjører Java 15 mens en annen kjører Java 8 kan det oppstå konflikter og forvirring for maskinen.

Før i tiden løste man dette ved å splitte opp maskinen i flere såkalte virtuelle maskiner. Dette fungerte OK, men det er jo litt overkill å opprette et fullkomment operativsystem for hver tjeneste. Da får du jo minne og mange programmer som ofte står helt ubrukt.

Docker løser dette ved å legge hver tjeneste i såkalte containere, hvor du spesifiserer all softwaren som trengs for å kjøre tjenestene i en konfigurasjonsfil for hver container, kalt en Dockerfile.

En container kan ses på som et slags minimalt operativsystem som kun skal inneholde det du trenger for å kjøre tjenesten. The Docker engine sørger for å allokere nok minne og CPU til hver container uten at det blir overflødig.

Siden tjenestene kjører på samme maskin trenger du heller ikke bekymre deg for sikker kommunikasjon mellom tjenestene over nettet. Docker gjør det enkelt med kommunikasjon mellom containere.

#2. De fleste utviklere har vært bort i å kode sin egen server og klient, og kanskje til og med database, men lurer kanskje på hva Docker kan tilføre? 👋

Docker er spesielt nyttig når du skal deploye software til en server. Har du skrevet konfigurasjonsfilene for hver container trenger du kun installere Docker på serveren du deployer til for å spinne opp alt, og da funker det uavhengig av operativsystemet på serveren.

«Docker løser "Works on my machine"-problemet!»

Før Docker måtte du vite hvilket operativsystem serveren kjører på, og laste ned alt av avhengigheter, runtimes og miljø manuelt eller ved et script spesifikt for serveren.

Om det skapte konflikter med annen software på serveren hadde du et problem.

Og skulle du skifte ut Windows serveren med en Linux server for eksempel måtte du gjenta hele installasjonsprosessen eller skrive om scriptet ditt tilpasset den nye serveren. Docker løser med andre ord "Works on my machine"-problemet!

#3. Hva bruker dere Docker til på arbeidsplassen din? 💡

På jobben vedlikeholder, videreutvikler og oppretter vi mange mikrotjenester som har forskjellige ansvarsområder.

De fleste nye tjenester kjører i hver sin Docker container i Elastic Container Service hos Amazon Web Services.

Dette gjør oppsettet standardisert, dokumentert (via Dockerfile), enkelt og skalerbart i skyen, og ikke minst er det lett å teste ting lokalt før det publiseres.

Spesielt syns jeg det er deilig hvor lett det er å teste ut forskjellige databaser lokalt ved hjelp av Docker containere. Å laste ned databaser og databaseklienter kun for å teste ut litt er ofte tidkrevende og kan være styr å sette opp. Etter min erfaring går installasjonen, konfigureringen og eventuelt avinstalleringen mye greiere med Docker.

#4. Hvordan jobber man med Docker? Trenger man noe programvare? Må man lære noe spesielt scriptespråk? 🥸

For å ta i bruk Docker må det naturligvis lastes ned. Det er gode instruksjoner på Dockers nettsider om hvordan dette gjøres.

Docker kjører som en såkalt daemon, som er et program som kjører i bakgrunnen når det startes, og er klar for å ta i mot henvendelser fra brukeren så lenge det kjøres.

Aller først må docker daemon startes før du kan bruke det. Neste naturlige steg vil være å spinne opp din første Docker container. For å gjøre dette må det først bygges et Docker Image. Et Docker Image er en slags blue print av containeren, og det er den som defineres i Dockerfilen.

Dockerfile er en enkel tekstfil hvor du spesifiserer kommandoer for ting som å hente avhengigheter, kopiere over kildekoden fra maskinen din til Docker imaget, i tillegg til startkommandoen som kjøres når du starter containeren.

Dokumentasjonen til Dockerfile er et godt sted å starte for å finne ut mer om hvordan en Dockerfile kan se ut. Et verktøy for Docker som er sterkt anbefalt for full utnyttelse av Docker er docker-compose. Docker-compose tillater deg å sette opp flere containere samtidig, og å sette opp kommunikasjon mellom containerne på en enkel og effektiv måte.

For å bruke docker-compose må du definere en YAML-fil, docker-compose.yml, hvor du spesifiserer alle tjenestene dine. YAML er et ganske kjekt dataserialiseringsspråk, som kan minne litt om JSON, og er ofte brukt i konfigurasjonsfiler.

For å faktisk spinne opp containere bruker du Dockers command line interface (CLI) i terminalen:

docker build -t my_first_container .
docker run my_first_container

Den første kommandoen leter i mappen du befinner deg i etter en Dockerfile, og bygger et Docker image basert på Dockerfilen. Vi har kalt imaget "my_first_container". Den andre kommandoen spinner opp containeren.

#5. Hva er mest tidkrevende/vanskelig i arbeid med Docker? ⏰

Det vanskeligste med å lære Docker er at det er mange nye konsepter og begreper å forholde seg til.

Og når det grunnleggende er på plass er det fortsatt en del ekstra ting som er nyttig å forstå om man vil være effektiv og utnytte Dockers fulle potensial, som for eksempel port forwarding, nettverk, og delt data mellom containere.

Er du erfaren med å publisere applikasjoner på servere på "den gamle måten" vil du fort se nytten ved Docker, og ha et fortrinn når du skal "Dockerize" applikasjonen din.

Har du kun utviklet og kjørt applikasjoner på din egen PC kan Docker virke abstrakt og kanskje litt unødvendig.

#6. Er det noen spesielle bruksområder Docker er skikkelig gode på? 🥇

Docker er spesielt gode på virtualisering. Det er dette som er hele magien med Docker, at du kan isolere software i små containere.

På den måten er det mye lettere å vite hvor du skal lete dersom noe går galt, å splitte opp logikk og ansvarsområde i isolerte miljøer, og standardisere oppsettet ditt slik at det fungerer uavhengig av operativsystem.

«Docker ser ut til å være det klart mest populære alternativet for "containerisering".»

#7. Har Docker noen konkurrenter? 🐓

Dette måtte jeg Google, da jeg ikke var klar over noen alternativer med samme bruksområde som Docker.

Jeg fant alternativer som podman og rkt (ser ut til at rtk ikke blir maintained lenger), men Docker ser ut til å være det klart mest populære alternativet for "containerisering".

#8. Kommer Docker til å bli brukt om 5 år? ✈️

Det tror jeg definitivt! Det er alltid vanskelig å spå hva som skjer i teknologiverden, men jeg greier ikke helt å se for meg hvordan Docker kan erstattes med det første.

Jeg kan se for meg en verden hvor de fleste softwareprosjekter hovedsakelig bruker såkalte "serverless" funksjoner i skyen (som AWS Lambda eller Azure functions) for å hente og bearbeide data, noe som ville redusert behovet for å være dyktig i Docker, men tror av mange grunner verden ikke er helt moden for dette ennå.