Kvalitetssäkra ditt projekt med Docker

2020-04-23

Colour image

Som digitalbyrå och Tech Partner så behöver vi på Will & Skill fundera kring hur vi gör vardagen enklare för alla våra utvecklare. Vi använder Docker för att underlätta en stor del av deploymentprocessen så att utvecklarna får fokusera på att bygga en välfungerande applikation.

Vi på Will & Skill har nöjet och äran att jobba med stora som små bolag i olika branscher där slutanvändaren ställer höga krav på att man introducerar nya features och eliminerar buggar i god takt.

Detta medför att många av projekten kräver deploys nästan varje dag och många gånger sätter det käppar i hjulet när man behöver deploya kod till produktion eller annan miljö utan att ha en automatiserad process.

Vad är Docker?

De flesta har nog hört talas om VPS (Virtual Private Server), VM (Virtual Machine) och VirtualBox. Alla dessa alternativ gör i princip samma saker, de virtualiserar en eller flera OS (t ex Ubuntu, Debian, Linux, Windows, MacOS) på riktig hårdvara t ex en laptop, desktop och/eller server. Nackdelen med detta är dock att man måste installera ett helt operativsystem och det innebär att det tar en hel del resurser som man nödvändigtvis inte behöver ifall man kör t ex en Python eller NodeJS app som skall snurra för att serva ett API eller en webbsida.

Med Docker så introducerades Container-tänket i stor skala. Tanken är att en mjukvaru-container beter sig som en container i verkliga livet. De är standardiserade och kan innehålla vad som helst sålänge det som stoppas in följer vissa parametrar som vikt och mått. Tänk dig en vanlig fraktcontainer som innehåller TV-apparater, soffor, fåtöljer, elektronik, telefoner och allt annat som ryms i den. Man kan i princip ha en container som bara innehåller elektronik eller cyklar eller både och även fler saker därtill. Sålänge varorna som skall skeppas har rätt storlek och ryms i en container så kan den containern enkelt skeppas mellan två länder. Utan att man behöver ha en specialanpassad kran eller och att den personen som hanterar kranen inte behöver ha specialkunskap baserat på vad som skeppas i kranen.

Så länge du kan beskriva den med hjälp av en så kallad Dockerfile eller instruktioner som Docker kan tyda och förstå så kan du skeppa Containers mellan identiska och/eller olika miljöer.

På samma sätt så fungerar en container i Docker. Sålänge du kan beskriva den med hjälp av en så kallad Dockerfile eller instruktioner som Docker kan tyda och förstå så kan du skeppa Containers mellan identiska och/eller olika miljöer. Du kan t ex skriva din kod på en MacBook Pro men sedan skapa en Docker image lokalt på din dator och köra den i en container i en Linux Server antingen i en datorhall eller uppe i molnet sålänge du kör Docker på båda maskinerna.

Konceptet är väldigt enkelt men väldigt kraftfullt och gör att man kan skriva applikationer som är plattformsoberoende!

Konceptet är väldigt enkelt men väldigt kraftfullt och gör att man kan skriva applikationer som är plattformsoberoende! Säg att du har två kollegor där kollega A föredrar MacOS och kollega B religiöst föredrar Ubuntu. Med Docker så kan båda köra den OS som faller dem i smaken men det påverkar inte appen som de utvecklar tillsammans eftersom ni kör Docker i er utvecklingsmiljö samt er produktionsmiljö.

Vilka beståndsdelar finns i Docker?

Docker består av ett fåtal koncept som samspelar

  • Docker daemon och Docker klient

  • Docker registry

  • Docker objekt

    • Docker images

    • Docker containers

Docker daemon

Docker daemon (dockerd) lyssnar på anrop via Dockers API and hanterar Dockerobjekt som t ex imagescontainersnätverk och volymer. En daemon kan även kommunicera med andra daemon instanser för att hantera andra Docker tjänster.

Docker klient

Docker-klienten "eng: Docker client" (docker) är det primära verktyget som de flesta Docker användare nyttjar för att interagera med Docker. När du anropar kommandon som t ex docker run, så skickas anropet till dockerd, som i sin tur exekverar kommandot. Kommandot docker använder Dockers API. Docker-klienten kan kommunicera med mer än en daemon i taget.

Docker registry

Ett "Docker registry" används för att lagra en eller flera "Docker images". Docker Hub är ett publikt register som Docker använder för att hålla koll på och hämta Docker images från. Du kan även sätta upp en egen privat registry.

När du använder docker pulldocker push eller docker run kommandot så hämtas images från det registry som är satt i din konfiguration. 

Docker objekt

Images

En Image är en "read-only" mall med instruktioner för att skapa en Docker container. En Image kan vara baserad på en annan mall men den har kanske en del skräddarsydda ändringar för tillgodose ett specifikt behov.

Containers

En Container är en körbar instans av en Image. Du kan skapa, starta, stoppa, flytta eller radera en container instans genom att använda Dockers API eller CLI-verktyget. Du kan koppla en instans av en container till ett eller flera nätverk, lägga till lagring eller skapa ny image baserat på tillståndet i en aktiv instans.

Läs mer om Docker här