#Docker

By . Latest revision .

En snabb översikten av vad Docker är kan vi hitta på Dockers egna webbsida. Docker är en container teknologi som liknar en avskalad virtuella maskin. Vad tillför det till oss som utvecklare?

Docker låter utvecklare att utveckla och driftsätta applikationer i virtuella container miljöer. Detta ska göra att en applikation kan köras på exakt samma sätt utan kompabilitets problem oberoende av vilken dator/server den körs på, så länge Docker är installerat. Att applikationen kan köras oberoende av systemet gör att applikationen blir lättare att använda, utveckla, underhålla och driftsätta.

#Docker terminologi

  • Image: En image är typ ett exekverbart paket som innehåller allt som behövs för att köra applikationen, det inkluderar konfigurationsfiler, miljövariabler och bibliotek.
  • Dockerfile: Fil som innehåller instruktionerna för att bygga en Docker image. Koden som används för att skapa en Image.
  • Build: Skapar en image snapshot från Dockerfile.
  • Tag: Version av en image. Varje image har ett tag namn.
  • Container: Ett lättviktig program skapat från en specifik image version. Vi kan se det som att vi kallar en image en container när den exekveras.
  • DockerHub: Image repository där vi kan hitta images. Typ GitHub för images.
  • Docker Daemon: Körs på host systemet. Användare kan inte jobba direkt mot Docker daemon utan gör det via Docker klienter.
  • Docker Engine: Skapar och kör Containers.
  • Docker Client: Huvud interfacet för Docker.

#Öva på Docker

Kolla på följande video för en kort introduktion till Docker och hur vi kan använda det.

Docker Concepts Introduction

Om ni redan har läst kursen vlinux kan ni gå vidare till nästa steg. Annars jobba igenom hela följande guide för att lära er skapa egna images och containrar och använda docker-compose.

Om ni vill öva mer på Docker så finns det många Docker övningar på killercoda.

Läs om Docker latest tag, ett annat hett ämne inom Docker är om man ska använda latest taggen för att köra images eller ej.

#Docker i devops

Docker är väldigt populärt inom devops världen av många anledningar, läs om varför i Dockers bloggserie Docker and the Three Ways of DevOps.

#Databas i Docker

Att köra sin databas i Docker har länge varit debatterat, många är emot men fler och fler börjar tycka att det är OK. Jag är för att köra databasen in Docker så länge man lägger data mappen som en volym så att datan inte skrivs över när vi startar om containern.

MySQL sparar sin data i mappen /var/lib/mysql så när ni kör er databas container i produktion gör den mappen till en volym på host systemet. Så att datan i databasen inte försvinner när vi stänger ned containern.

#Spara konfiguration som kod

En viktigt del av det praktiska inom devops är att spara konfiguration som kod och versionshantera den. Detta är för att undvika att tillfällen uppstår där det bara är specifika personer som vet hur man startar/kör/konfigurerar något. Allt ska finnas som kod och versionshanterat så alla kan göra det.

En typisk sån sak är att bygga/köra Docker images. Att bygga/starta en image behöver ofta någon slags konfiguration t.ex. vad ska vara volymer, miljövariabler eller vilken port som ska öppnas. Om detta inte finns som kod blir det svårt för någon annan än för den som skrev koden att göra det.

För Docker använder vi docker-compose i detta syftet.

Läs att använda docker compose i produktion.

För att docker-compose ska klara av att hantera <<-EOF i Dockerfile, vilket vi använder för Microblog, behöver ni sätta följande miljövariabler:

export DOCKER_BUILDKIT=1
export COMPOSE_DOCKER_CLI_BUILD=1

Om ni jobbade igenom hela docker guiden längre upp borde ni ha det installerat. Annars jobba igenom följande guide för att installera.

#Revision history

  • 2023-10-24: (A, aar) Första versionen.

Document source.