Week 2 - Containerization
Lesoverzicht
- Les 1 - Docker 101
- Les 2 - ORM (EF core)
- Les 3 - Linux Bash (VPN/VPS)
- Les 4 - Toetsen 1 + nabespreken
Containerization Definition
Containerization is packaging software with the OS and other dependencies required to run the code to create a container that runs consistently on any infrastructure. IBM
Docker kwam in 2013 en maakte enkele krachtige maar obscure features uit Linux simpeler om te gebruiken. Met hun containers geven ze operations mensen de 'best of both worlds' van
- a) virtuele machines (isolatie en beheer via software) en
- b) de performance van OS processen direct op hardware ('metal).
Ze geven developers de mogelijkheid hun applicatie te containerizen met het OS en ook de hele tussenliggende stack van software (middleware zoals applicatie servers, webservers, message busen, en database servers en data caches e.d.). Zo werd het verschil tussen development omgeving en productie kleiner zodat je het 'works on my machine' probleem kan aanpakken.
*Figuur 1: Docker - Oplossing voor het 'works on my machine' probleem?
Week 2 Opdracht
De opdracht staat weer op (private) GitHub AIM organization. Je doet een laatste git opdracht/puzzel en containerized daarna je vorige week gemaakte applicatie in een Docker container. Deze test je lokaal en zet dan zelf docker op externe VPS en runt hierop de container. Werk weer samen in een (nieuw) duo via git en gitlab en let naast opdracht ook weer op algemene werkwijze zoals taakverdeling vooraf en eindigen met (gezamenlijke) self assessment in je README met betrekken relevante CDMM checkpunten en een reflectie zoals de [werkwijze bij weekopdrachten]vraagt.
In deze opdracht komt ook refactoring terug, en heb je nog een kans 'branch by abstraction' toe te passen/te identificeren. Het voorbeeld met vertaling van pipeline diagram van vorige opdracht is voor sommige zo klein/triviaal dat ze het daar nog missen.
Wellicht helpt (code) op onderstaande foto nog bij 1e stappen opdracht:
Toelichting: Wellicht heb je een docent wel eens horen zeggen dat als je kunt programmeren het daarna niet uitmaakt of je nou een webapplicatie, of desktop applicatie of console applicatie of mobiele app of webservice maakt. Dat is wat kort door de bocht; maar zit wel kern van waarheid in. In .NET kun je al zulke applicaties maken, en je gaat de simpele code uit je classlib nu beschikbaar stellen voor zowel web project als een console project.
Hiervoor moet je naast op code niveau met import ...
statements (dit is using
in .NET) nu ook op project niveau instellen voor de projecten in je solution. .NET heeft module systeem (net als Java vanaf v 9). Dus kijk even terug naar dotnet cli commando's die je bij de 1e opdracht wellicht domweg hebt nagespeeld.
Leerdoelen deze week
Check met onderstaande leerdoelen of je de behandelde stof begrepen hebt en toetsvragen kunt beantwoorden.
- Je kent de 'Docker architectuur' (met concepten als images, containers, de docker engine en buildkit)
- Je kunt lokaal een container runnen
- Je kunt een eigen container maken
- Je kent de term ephemeral en het nut, en de 'oplossing' voor data persistentie in containers
- Je snapt het nut van een ORM en welke drie zaken je moet veranderen bij gewenste wijziging data schema
- Je snapt hoe Docker containers en images 'immutable' zijn en kunt termen als 'union file system' en 'copy on write' uitleggen
- Je begrijpt het begrip multi-stage container
- Je kunt een container optimaliseren en kent het concept van container layers
- Je kunt een container registry gebruiken en snapt het begrip
- Je kunt docker compose gebruiken en kent de relatie tussen Docker en docker compose
- Je kunt Docker installeren op een Linux VPS en deze gebruiken via een Docker context