Theory and demos
Introduktion
Denna modul fokuserar på containers och docker. Containers är ett lättviktsalternativ till virtuella maskiner när man vill skeppa och driftsätta sin kod. En stor del av modulen består av demos som visar hur man driftsätter applikationer i containers (med Docker).
Containers
Vad är egentligen en container och hur skiljer den sig från en virtuell maskin. Vilken overhead hos virtuella maskiner undviker containers, hur, och hur påverkar detta isoleringen?
Säkerhet
Säkerhet och containers är stort och komplext, främst på grund av att säkerheten bygger på system i Linux såsom Capabilities och SELinux/AppArmor. Då det är utanför omfånget på denna modul (och kurs) att ge en tillräcklig introduktion till dessa ges bara några tips om vad man bör tänka. För den som vill gräva djupare finns mycket material tillgängligt på nätet.
Steg 1: Docker
Kort introduktion till docker-kommandot och docker hub. Demot visar hur man hämtar en image och startar en container från denna, samt hur man kan köra kommandon inuti en körande container.
Kommandon som täcks i denna demo.
Förväntat resultat:
När du har följt dessa steg ska du kunna öppna din webbläsare och navigera till localhost:8080
. Där bör du se sidan "Welcome to nginx" som bekräftar att servern körs korrekt.
Steg 2: Dockerfiles, images, och unionfs
Kort introduktion till hur man skapar en Dockerfile, bygger en image från denna, och startar en container. Lager och unionfs/overlay är en viktig del av containers och docker, så demot utforskar även hur detta fungerar och diskuterar lagring i image och tillfällig lagring i en container.
Kommandon som täcks i denna demo.
Ytterligare användbara kommandon i detta skede:
docker init: Initierar ett projekt och ställer några frågor:
- Överskriv existerande filer? Svara "Yes".
- Applikationsplattform? Välj "Node".
- Node-version? Ange "20.17.0".
- Paketverktyg? Välj "npm".
- Startkommando? Skriv "npm start".
- Serverport? Ange "3000".
Efter att ha svarat skapas följande filar:
- .dockerignore
- Dockerfile
- compose.yaml
- README.Docker.md
Detta sätter upp miljön för att bygga och hantera din applikation i Docker. Nu kan du anpassa Dockerfile till det du behöver.
Steg 3: Lagring och mounts
Volymer och bind-mounts kan användas för att lagra filer oberoende av image, t.ex. så att filerna finns kvar efter en uppgradering av en image. Vi skapar en container med neo4j och använder en volym för att spara data. Vi tittar även på hur bind-mount kan används för att dela filer från en katalog med en container.
Steg 4: Containernätverk
Vi har hittills tittat på hur man kan kommunicera mellan värdmaskin och containers. Ibland vill man skapa nätverk som containers kan kommunicera med varandra över. Vi skapar en microservice i Python och Flask som kommunicerar med databasen från Demo 3 över ett "bridge"-nätverk.
Övning Docker
- Följ instruktionerna här: Exercise, Just Task It - docker
Steg 5: Docker Compose
Det är smidigt att enkelt kunna starta olika tjänster via docker, men en stor vinst finns i att snabbt kunna återskapa utvecklingsmiljöer. Vi har under tidigare demos utvecklat en enkel, databasdriven microservice som består av tre containers (databas, microservice och reverse proxy). I detta demo tittar vi på hur vi med hjälp av docker compose kan bygga hela applikationen i ett steg, utan att behöva skapa varje container för sig.
Övning Docker Compose
- Följ instruktionerna här: Exercise, Just Task It - docker-compose
Steg 6: Docker Compose i Produktion
Detta är det sista steget i vår resa med Docker Compose. Vi kommer att undersöka hur vi kan förbereda och distribuera vår kod till servrarna i CSCloud.
- Följ instruktionerna här: Övning, Just Task It - Produktion
För att underlätta processen kan du använda följande videor som guider för att följa stegen:
JTI i Produktion, Del 1
Observera att materialet för detta avsnitt använder ett föråldrat repo: Del 1-material (deprecated)
JTI i Produktion, Del 2
JTI-exemplet har uppdaterats för 2024. I denna video går vi igenom de senaste uppdateringarna och ger fler tips om hur du kan driftsätta applikationer med Docker Compose.
Här är länkarna till repon som används i detta avsnitt:
- Infrastruktur: Example Dockerized Web Application Infrastructure
- Applikation: Example Dockerized Web Application
Presentationer är lånade från kursen 1DV032.