Intro til Docker
Docker er en open-source platform, der gør det muligt for udviklere at automatisere deployment, skalering og styring af applikationer i containere. Containere er lette og bærbare enheder, som kan køre software uafhængigt af operativsystemet.
Med Docker kan du nemt pakke, distribuere og køre din applikation, uanset hvor kompleks den måtte være. Dette kan være særligt nyttigt for C# udviklere, da det kan reducere den tid, der bruges på at opsætte og fejlfinde miljøer.
Hvordan fungerer Docker?
Docker fungerer ved at indkapsle din applikation og dens afhængigheder i en container, som kan køres på enhver maskine, der har Docker installeret. Dette gør det muligt at isolere din applikation fra resten af systemet, hvilket sikrer, at den fungerer ens uanset, hvor den er installeret.
En Docker container bygges fra et Docker image, som er en let, standalone, eksekverbar pakke, der indeholder alt, hvad der er nødvendigt for at køre en del af softwaren, inklusive koden, et runtime, biblioteker, miljøvariabler og konfigurationsfiler.
Docker images er bygget fra Dockerfiles, som er simple tekstfiler, der indeholder en liste af kommandoer, der skal udføres for at bygge det givne image.
Hvordan kan C# Udviklere bruge Docker?
Nemt tilgang til databaser mv
Docker gør det meget nemt at opsætte og bruge eksempelvis SQL Server (eller alle andre servere) i en container. Her er en trin-for-trin guide:
- Kør SQL Server Docker Container
Du kan starte en SQL Server container ved at køre følgende kommando i din terminal:
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
I denne kommando:
-
-e 'ACCEPT_EULA=Y'
og-e 'SA_PASSWORD=yourStrong(!)Password'
angiver de nødvendige miljøvariabler for SQL Server. ErstatyourStrong(!)Password
med dit ønskede password. -
-p 1433:1433
binder port 1433 på din maskine til port 1433 på containeren, hvilket er standardporten for SQL Server. -
-d mcr.microsoft.com/mssql/server:2019-latest
angiver Docker image, der skal bruges. I dette tilfælde er det den seneste version af SQL Server 2019. -
Tilgå SQL Server gennem SQL Server Management Studio (SSMS)
Efter at have startet din SQL Server container, kan du forbinde til den ved hjælp af SQL Server Management Studio eller ethvert andet SQL værktøj, du foretrækker.
-
For Server name, indtast
localhost,1433
.localhost
er værten (din maskine), og1433
er porten, som du har bundet til SQL Server containeren. -
For Authentication, vælg
SQL Server Authentication
. -
For Login, indtast
sa
. -
For Password, indtast det password, du angav for
SA_PASSWORD
miljøvariabel, da du kørte din container.
Tryk på “Connect”, og du skulle nu være forbundet til SQL Server i din Docker container!
Dette setup er fantastisk for udvikling, fordi det er hurtigt at opsætte, og det ikke kræver, at du har SQL Server installeret på din maskine. Desuden, da din database er inde i en container, kan du nemt starte en ny database, eller flere databaser, når du har brug for det.
Dit eget Docker image
Her er et eksempel på, hvordan du kan oprette en simpel .NET Core applikation, pakke den i en Docker container, og køre den:
- Opret en .NET Core Applikation
Opret først en simpel .NET Core applikation. Åbn din terminal og kør følgende kommando:
Dette opretter en ny .NET Core webapplikation i en mappe kaldet MyWebApp
.
- Opret en Dockerfile
Næste trin er at oprette en Dockerfile i rodmappe af dit projekt. Dockerfile er en tekstfil, der indeholder de instruktioner, Docker skal følge for at bygge dit image.
Her er et eksempel på en Dockerfile for en .NET Core applikation:
# Brug det officielle Microsoft .NET Core runtime image som base
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
# Sæt arbejdsmappen i containeren til /app
WORKDIR /app
# Kopier det byggede .NET Core app output til /app i containeren
COPY ./MyWebApp/out .
# Angiv kommandoen for at køre .NET Core appen
ENTRYPOINT ["dotnet", "MyWebApp.dll"]
- Byg dit Docker Image
Nu kan du bygge dit Docker image ved hjælp af Docker build kommandoen. Åbn din terminal, naviger til din projekts rodmappe, og kør følgende kommando:
I denne kommando, -t mywebapp
angiver navnet på dit Docker image, og .
angiver placeringen af Dockerfile (i dette tilfælde, nuværende mappe).
- Kør din Docker Container
Efter at have bygget dit Docker image, kan du nu køre det som en container ved hjælp af Docker run kommandoen:
I denne kommando, -d
gør, at containeren kører i baggrunden, -p 8080:80
binder port 8080 på din maskine til port 80 på containeren, og --name myContainer
navngiver din container.
Du kan nu tilgå din webapplikation ved at åbne en webbrowser og navigere til http://localhost:8080
.
Hvorfor er Docker Godt for C# Udviklere?
Der er flere fordele ved at bruge Docker som en C# udvikler:
-
Konsistens på tværs af miljøer: Docker sikrer, at din applikation vil køre det samme, uanset hvilket miljø den bliver kørt i. Dette gør det lettere at fejlfinde og mindske “det virker på min maskine” problemer.
-
Isolering af applikationer: Docker-containere kører isoleret fra hinanden, hvilket betyder, at du kan køre flere versioner af samme software (for eksempel forskellige versioner af en database) på samme maskine uden konflikter.
-
Skalerbarhed: Docker gør det nemt at skalere din applikation ved at tillade dig at køre flere instanser af din container.
-
Integrerer godt med CI/CD værktøjer: Docker kan nemt integreres med populære Continuous Integration/Continuous Deployment værktøjer som Jenkins, Travis CI, og Azure DevOps, hvilket gør det lettere at automatisere bygning, testning, og deployment af din applikation.
-
Mindre Overhead: I modsætning til virtuelle maskiner, som hver kører et fuldt operativsystem, deler Docker-containere kerne med værtssystemet, hvilket resulterer i mindre overhead og bedre performance.
-
Forenkling af Testprocessen: Docker kan hjælpe med at forenkle og standardisere testprocessen. Ved at indkapsle din applikation og dens afhængigheder i en container, kan du sikre, at dine tests altid kører i det samme miljø. Dette eliminerer problemer som “det virker på min maskine” og gør det lettere at automatisere dine tests.Du kan oprette separate Docker images til dine testmiljøer, som har alle de nødvendige testværktøjer og biblioteker allerede installeret. For eksempel, hvis du bruger NUnit eller xUnit.net til at teste dine C# applikationer, kan du oprette et Docker image, der indeholder den relevante test runner. Derefter kan du køre dine tests i en Docker container baseret på dette image. Fordi Docker-containere er isolerede fra hinanden og fra værtsmaskinen, behøver du ikke bekymre dig om tests, der forurener hinanden eller dit system. Du kan også integrere Docker med dine CI/CD-værktøjer for at automatisere testkørsel hver gang du laver en ændring i din kode. Dette kan hjælpe dig med at finde og løse fejl hurtigere og sikre, at din kode altid er i en deploybar tilstand. Endelig kan Docker gøre det lettere at udføre integrationstests og end-to-end tests. Du kan oprette en Docker Compose fil, der definerer flere services (for eksempel din applikation, en database, en message broker, osv.), og køre dem alle sammen som en stack. Du kan derefter køre tests mod denne stack for at sikre, at alle dele af din applikation fungerer korrekt sammen.