Att utveckla applikationer innebär ofta hantering av komplexa databaser, programmeringsspråk, ramverk, beroenden med mera. Du kan dessutom stöta på kompatibilitetsproblem när du arbetar med olika operativsystem. Var och en av dessa variabler kan påverka ditt arbetsflöde negativt.

För att lösa dessa problem så kan du börja använda Docker. Med det här verktyget så kan du bygga och hantera applikationer i containeriserade miljöer. I slutändan så kan Docker ta bort många komplicerade konfigurationsuppgifter och göra utvecklingen enklare och effektivare.

I det här inlägget svarar vi på frågan ”Vad är Docker?” och förklarar hur det fungerar. Vi visar dig sedan några av dess viktigaste användningsområdena och hur du som nybörjare kan komma igång. Låt oss köra igång!

Vad är Docker?

Vad är Docker egentligen? Det är en plattform med öppen källkod för att utveckla applikationer i en sandlåda. Dess lättviktiga virtualiserade miljöer kallas även för containrar:

Docker
Docker

Containrar har funnits sedan 1979, men Docker har gjort dem mer lättillgängliga. Med Docker så kan utvecklare bygga, testa och distribuera sina applikationer lokalt eller på en produktionsserver.

Sedan Docker 1.0 släpptes år 2014 har det blivit standard för användningen av containrar för både enskilda utvecklare och företag. Nu har det över 13 miljoner användare, däribland stora företag som Netflix, Target och Adobe:

Företag som använder Docker
Företag som använder Docker

Dessutom så ökar användningen av Docker varje år. Enligt Datadog har nästan 25 procent av företagen börjat använda Docker för att övervaka sina applikationer. Sedan 2015 så har denna andel ökat med 3-5 procentenheter varje år:

Ökande företagsanvändning av Docker (källa: Datadog)
Ökande företagsanvändning av Docker (Källa: Datadog)

Som vi kan se så har Docker blivit en populär plattform för att utveckla och distribuera applikationer. För att ytterligare förstå dess popularitet ska vi djupdyka i hur Docker-programvaran fungerar.

Docker vs virtuella maskiner

I Docker så kan du paketera en applikation till en standardiserad enhet, som kan användas för mjukvaruutveckling. Denna enhet, eller container, innehåller applikationens kodning och beroenden så att den enkelt kan köras i vilken datormiljö som helst.

Innan Docker så använde företag ofta virtuella maskiner (VM) för att köra program. Dessa kan emulera fysiska datorer. Som ett resultat så kan utvecklare förvandla en server till flera servrar. Det här tillvägagångssättet kan dock ha vissa nackdelar.

Varje virtuell dator innehåller en fullständig kopia av operativsystemet och applikationen samt nödvändiga binärer och bibliotek. Dessa filer kan ta upp tiotals GB på en dator. Virtualisering av maskinvaran för ett gästoperativsystem kan dessutom kräva en betydande overhead.

I stället för att virtualisera hårdvaran så virtualiserar containrar operativsystemet. I Docker så är containrar abstraktioner på app-lagret som både kan inkludera kod och beroenden. På samma maskin så kan flera containrar köras som isolerade processer:

Jämförelse av Docker och virtuella maskiner (Källa: ResearchGate)
Jämförelse av Docker och virtuella maskiner (Källa: ResearchGate)

Som ett resultat av detta så tar Docker-containrar vanligtvis upp mindre utrymme. De kan även innehålla fler applikationer utan lika många virtuella maskiner och operativsystem.

Hur fungerar Docker?

Tänk dig att du försöker att frakta gods från en plats till en annan. I den moderna tidsåldern kan du enkelt göra detta med containrar. Dessa håller samman vissa föremål i en förseglad miljö, vilket gör att de kan transporteras med fartyg, tåg eller flygplan.

Docker fungerar på ett mycket liknande sätt. Enkelt uttryckt så standardiserade Docker metoden för att utveckla och distribuera programvara.

Docker arbetar med containrar. Dessa kan ha återanvändbara komponenter som Python, Node, beroenden med mera. Du kan sedan distribuera dessa containrar var som helst utan att oroa dig för kompatibilitetsproblem.

Docker kan vara komplicerat till en början, så låt oss diskutera alla huvudkomponenter som ingår i denna programvara. När du väl förstår dessa huvudfunktioner så kommer du att kunna effektivisera utvecklingen av dina applikationer!

Docker Engine

Docker Engine är klient-servertekniken för att bygga och containerisera applikationer i Docker. Den stöder i huvudsak alla uppgifter som ingår i driften av din containerbaserade applikation:

Docker Engine diagram (källa: Docker)
Docker Engine-diagram (Källa: Docker)

Här är de viktigaste komponenterna i Docker-motorn:

  • Docker Daemon: Hanterar Docker-avbildningar, containrar, nätverk och volymer. Den lyssnar även på Docker API-begäranden och bearbetar dem.
  • Docker Engine REST API: Ett API som har utvecklats av Docker och som interagerar med daemon.
  • Docker CLI: Kommandoradsgränssnittet för att kommunicera med Docker Daemon.

Med Docker Engine så kan du köra containeriserade applikationer på vilken infrastruktur som helst. Den här inställningen bidrar till Docker’s branschledande containerkörningstid.

Docker-avbildningen

En Docker-avbildning är ett körbart programvarupaket som innehåller all källkod, alla beroenden och verktyg som behövs för att köra en applikation. Avbildningar är skrivskyddade mallar som innehåller instruktioner för att skapa en container.

Du kan få en bättre förståelse för Docker-avbildningar genom att tänka på dem som ritningar. De innehåller ögonblicksbilder av vad en container kommer att innehålla när den körs.

I en avbild så finns det flera staplade lager. Om du exempelvis vill bygga en webbserveravbildning så kan du först inkludera Ubuntu Linux. Därefter så kan du lägga Apache och PHP-kodning i lager ovanpå.

När du gör en Docker-avbildning så är det bäst att placera de mest variabla lagren högre upp i stapeln. Om du sedan behöver göra en ändring så behöver du inte bygga om hela avbildningen.

Docker Container

Som vi diskuterade tidigare så är containrar viktiga delar av Docker. Enkelt uttryckt så är en Docker-container ett isolerat område där en applikation kan köras utan att påverka resten av systemet. Den här programvaruenheten paketerar all kod och alla beroenden så att den enkelt kan överföras från en applikation till nästa.

Här är några fördelar med att använda Docker-containrar:

  • Standard: Docker har skapat en branschstandard för användningen av containrar, även om de har funnits i flera decennier. Docker-containrar är otroligt portabla och lätta att använda.
  • Lättviktiga: Eftersom containrar delar operativsystemets kärna så behöver du inte ett nytt operativsystem för varje applikation. Som ett resultat av detta så kan din applikation köras effektivare och minska server- och licenskostnaderna.
  • Säkert: Till skillnad från virtuella maskiner så isolerar containrar applikationer, vilket gör dem säkrare. Med Docker så kommer dina containrar att ha standardmässiga isoleringsmöjligheter.

I slutändan så erbjuder Docker-containrar fler fördelar än virtuella maskiner. Även om de isolerar och allokerar resurser på ett liknande sätt så är containrar vanligtvis mer portabla, effektiva och säkra.

Docker Compose

Docker Compose är ett verktyg som är utformat för att köra flera containrar som en enda tjänst. Om din applikation både kräver NGINX och MySQL så kan Docker Compose skapa en fil som startar båda containrarna. Som ett resultat så undviker du att behöva starta var och en separat.

Här är de tre grundläggande stegen när du använder Docker Compose:

  1. Skapa en Dockerfil för att definiera applikationens miljö så att den kan reproduceras.
  2. Definiera var och en av applikationens tjänster i en docker-compose.yml-fil så att de kan köras i en isolerad miljö.
  3. Använd kommandot Docker Compose för att starta och köra applikationen.

I huvudsak så gör Docker Compose det möjligt för flera containrar att köras isolerat. De kan dock interagera med varandra vid behov.

Compose kan exempelvis hjälpa dig att skapa och konfigurera applikationens tjänsteberoenden, exempelvis databaser, cachelagringar eller API: er för webbtjänster.

Dockerfil

En Dockerfil är ett textdokument som innehåller instruktioner för att bygga Docker-avbildningar. Genom att läsa den här filen så kommer Docker automatiskt att bygga nya avbildningar.

Kommandot docker build skapar en avbild från en Dockerfil och en kontext. Denna kontext är en uppsättning filer som ligger i en angiven sökväg eller webbadress.

Ange först följande kommando:

docker build

Detta skickar hela kontexten till Docker Daemon. För att rikta mot en Dockerfil i ditt filsystem använder du det här kommandot:

docker build -f /path/to/a/Dockerfile

Om byggningen lyckas så kan du ange ett arkiv och en tagg där du vill spara den nya avbildningen:

docker build -t shykes/myapp

Därefter så kommer Docker Daemon att validera Dockerfilen. Om det finns problem med syntaxen kommer den att returnera ett fel.

Docker Desktop

Om du vill börja att använda Docker i din Mac-, Linux- eller Windows-miljö så kan du installera Docker Desktop. Det är ett enkelt och lättanvänt gränssnitt för att hantera containers, applikationer och avbildningar på din dator:

Docker Desktop
Docker Desktop

Med Docker Desktop så behöver du inte använda kommandoraden för att utföra viktiga uppgifter. Detta kan snabba upp utvecklingsarbetsflödet:

Docker Desktop’s instrumentpanel
Docker Desktop’s instrumentpanel

Det finns även en inbyggd marknadsplats för tillägg som gör det enkelt att börja använda tredjepartsutvecklarverktyg. Dessa inkluderar programvara för felsökning, testning och säkring av dina applikationer:

Docker Desktop’s marknadsplats för tillägg
Docker Desktop’s marknadsplats för tillägg

Docker Desktop är dessutom kostnadsfritt för privatpersoner och småföretag. Tänk dock på att större företag måste köpa en prenumeration, som börjar på 5 dollar per månad.

Docker Hub

Docker Hub är en plattform där du kan hitta och dela containeravbildningar. Det är världens största arkiv för containeravbildningar. Där finns exempelvis resurser från community-utvecklare, projekt med öppen källkod och oberoende programvaruförsäljare (ISV):

Docker Hub-avbildningar
Docker Hub-avbildningar

Här är några funktioner som ingår i Docker Hub:

  • Arkiv för att skicka och hämta containeravbildningar
  • Skapa team och organisationer med tillgång till privata arkiv
  • Officiell Docker-avbildningar
  • Docker Verified Publisher-avbildningar
  • Skapa containeravbildningar från GitHub eller Bitbucket och skicka dem till Docker Hub
  • Utlös åtgärder med webbkrokar

För att börja att använda Docker Hub så måste du skapa ditt första arkiv. Du behöver helt enkelt namnge det och ange dess synlighet:

Skapa ett Docker Hub-arkiv
Skapa ett Docker Hub-arkiv

Därefter så kan du ladda ner Docker Desktop och börja hämta och skicka containeravbildningar från Docker Hub. Du kommer att se dessa pushar under den senaste taggen i ditt nya arkiv.

Vad används Docker till?

Docker är främst avsett för DevOps och utvecklare. Verktyget gör det möjligt för utvecklare att skapa, anpassa och distribuera applikationer som bärbara och lätta containers. Den här installationen paketerar alla sina beroenden till en enda enhet som kan köras på i stort sett alla operativsystem.

Här är ett typiskt användningsområde för Docker:

  1. Utvecklare skriver kod lokalt och delar den sedan med sina team med hjälp av Docker-containrar.
  2. De skickar applikationen till en testmiljö där det är lätt att utföra automatiserade och manuella tester.
  3. När fel upptäcks så löser utvecklarna dem i utvecklingsmiljön. För att testa ändringarna så distribuerar de dem på nytt i testmiljön.
  4. När utvecklarna har åtgärdat felet skjuts den uppdaterade avbildningen till produktionsmiljön.

Med det här arbetsflödet så kan du testa ny programvara utan att utföra en manuell installation. Du kanske exempelvis tycker att det är svårt och omständligt att installera en MySQL-server. Då kan du istället nyttja Docker CLI för att utföra den här uppgiften med ett enda kommando.

Eftersom Docker har ett eget CLI så kan nybörjare använda det för att lära sig hur man använder en kommandorad. När du har konfigurerat Docker i en Linuxmiljö kan du börja använda Linuxkommandon. Då kan du utföra systemadministrativa uppgifter snabbare och effektivare.

Om du dessutom vill börja utveckla lokala, offline WordPress-webbplatser så kan du använda Docker för att installera DevKinsta. Vår utvecklingssvit är Docker-baserad. Som ett resultat så kan du skapa och hantera webbplatser som enskilda containers:

DevKinsta’s containeriserade WordPress-webbplatser
DevKinsta’s containeriserade WordPress-webbplatser

Jämfört med andra lokala utvecklingsverktyg så använder DevKinsta färre resurser samtidigt som det bibehåller en nästan inbyggd prestanda. Med en Docker-driven DevKinsta-webbplats så kan du utveckla WordPress snabbt och säkert. DevKinsta gör det dessutom enklare att skicka testmeddelanden och utföra andra administrativa uppgifter.

För- och nackdelar med att använda Docker

Nu när du förstår Dockers kärnkomponenter så kan vi diskutera dess viktigaste för- och nackdelar. Därefter kan du avgöra om det kommer att vara användbart för att hantera dina programvaruapplikationer.

Fördelar

Som utvecklare så kan en del av ditt arbete bli tråkigt och repetitivt när det utförs manuellt. Med Docker-containrar kan du schemalägga automatiseringen av dessa uppgifter. Genom att använda cronjobb så kan du minska din arbetsbelastning och optimera din tid avsevärt.

Docker är dessutom mycket portabelt. Det gör det möjligt för varje medlem i ditt utvecklingsteam att arbeta med applikationer, även med olika servrar, maskiner eller operativsystem. Den här inställningen kan eliminera många av de problem som uppstår på grund av plattformsinkompatibilitet.

Jämfört med virtuella maskiner så kan Docker-containrar spara mer utrymme. Även om Docker och virtuella maskiner fungerar på samma sätt så är Docker mycket lättare.

Dessutom så har Docker ett robust community. Genom att delta i Docker’s community-evenemang så kan du träffa och få kontakt med andra Docker-användare både personligen och online:

Docker’s community
Docker’s community

Du kan även bläddra i Docker’s omfattande Community-forum. Om du är nybörjare så kan dessa diskussioner hjälpa dig att få råd om hur du använder den här plattformen.

Nackdelar

Som vi nämnde tidigare så kan Docker vara effektivare än virtuella maskiner. Att köra applikationer på en fysisk server är dock vanligtvis betydligt snabbare.

Docker kan även innebära en brant inlärningskurva. Det är inte utformat för att köra applikationer med ett grafiskt användargränssnitt (GUI). Som ett resultat så måste du lära dig kommandoraden, vilket kan vara en utmaning för nybörjare.

Slutligen så kommer Docker-containrar att köras på en host’s operativsystem. host-datorn kan bli komprometterad om skadlig programvara döljs i dessa containrar.

Så här kommer du igång med Docker

För att börja att använda Docker måste du besöka huvudwebbplatsen. Ladda sedan ner den kompatibla versionen för din dators operativsystem.

Om du har en Mac-dator så måste du välja Docker-versionen för antingen ett Intel-chip eller ett Apple-chip. Det finns även alternativ för Windows- och Linuxanvändare.

När du öppnar den nedladdade filen så installeras Docker Desktop på din dator. Därefter så öppnar du Docker Hub och skapar ett nytt konto:

Skapa ett konto på Docker
Skapa ett konto på Docker

Nu kan du öppna Docker Desktop och logga in. Öppna sedan din kommandorad eller bash-fönster och kör det här kommandot:

docker run -d -p 80:80 docker/getting-started

När du har gjort detta så ser du en ny container i din Docker Desktop-instrumentpanel. Dess namn kommer att genereras slumpmässigt för ditt konto:

Ny Docker-container
Ny Docker-container

Du får även en ny Docker-avbildning. Om du navigerar till fliken Avbildningar så ser du att en docker/kom igång-avbildning används:

Ny Docker-avbildning
Ny Docker-avbildning

Nu har du allt som du behöver för att börja hantera dina lokala container!

Sammanfattning

Om du måste hantera flera applikationer så kan Docker vara ett effektivt verktyg för att organisera dem oberoende av varandra. Eftersom Docker använder containrar så kan detta hjälpa dig att utveckla varje app utan risk för konfliktfyllda programmeringsspråk, bibliotek eller ramverk.

Även om Docker ofta är effektivare än en virtuell maskin (VM) så kan det dock vara snabbare att arbeta på en fysisk server. Eftersom det även är beroende av ett kommandoradsgränssnitt är Docker kanske inte heller ett bra val för absoluta nybörjare.

Som WordPress-utvecklare så behöver du sannolikt snabbt skapa lokala testmiljöer. Med hjälp av DevKinsta så kan du bygga Docker-baserade WordPress-webbplatser. Du kan sedan börja att utveckla teman och plugins utan konflikter!