Kunskapsbanken

Artiklar, guider, tips och trix tillsammans med exempelprogram inom webbprogrammering och webbutveckling. Inläggen är listade i den ordning som de senast uppdaterats.

#Microblog med Docker containers

I denna artikeln ska vi jobba igenom kapitel 19 i Miguel’s guide. Vi skall titta på hur man kan bygga en container för Microblog applikationen och koppla upp den mot en separat databas container. Slutligen skall vi också publicera den på Docker-registret så att vi kan komma åt applikationen utan att behöva källkoden.

Som referens finns “Driftsätta en Flask app”, där ni kan se hur appen körs utan Docker.

Read more »

Category: devops, docker.

#Mysql i Kubernetes

Vi läste tidigare att det inte är så bra att köra en databas i K8s, men vi gör det ändå för att öva på stateful applikationer. Vi ska använda PersistentVolumeClaim för att få stateful data åt databasen. Det är inte säkert egentligen då vi förlorar all data om noden går ner. Om vi har gjort detta i verkligheten hade vi också kopplat vår data till en molntjänst eller server.

Read more »

Category: devops, kubernetes, mysql.

Sätt upp ett Kubernetes kluster i AKS med HTTPS

Demo appen i webbläsaren

Demo appen i webbläsaren

Nu ska vi lära oss att sätta upp ett Kubernetes kluster i Azure med deras AKS tjänst. I klustret startar vi upp en simpel demo app och kopplar på HTTPS med hjälp av en Nginx ingress och en Cert-manager.

Read more »

Category: devops, kubernetes.

#Docker

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.

Compose följer med när ni installerar Docker och finns redan i dev containern. Vi använder kommandot docker-compose i kursen, docker compose gör samma sak. Nya versioner av Docker och Compose bygger med BuildKit som standard, så <<-EOF i en Dockerfile, som vi använder för Microblog, fungerar utan att ni behöver sätta några miljövariabler.

Saknar ni Compose, följ guiden Installera Compose.

#Revision history

  • 2026-10-14: (B, aar) Tog bort en död bild, kontrollerade länkar och påståendena om Compose och BuildKit.
  • 2023-10-24: (A, aar) Första versionen.

Document source.

Read more »

GitHub Education Pack och ett domännamn

Vi kommer i denna artikel titta på hur vi kan använda GitHub Education Pack för att få ett gratis domännamn.

Read more »

Category: devops, verktyg.

Python pakethantering med PIP

Python har många inbyggda moduler men det finns många fler externa moduler som kan användas. PIP är ett verktyg för att installera sådana externa moduler. Det är en pakethanterare för Pythons externa moduler.

Denna artikel beskriver kortfattat hur du jobbar med PIP och hur du installerar pip3 för Python 3.

Read more »

Category: labbmiljo.

Sätt upp session i Pico

För att Pico ska kunna veta om den ska ladda in ert vanliga tema eller det mörka temat så behöver vi sätta upp en session. Vi tar vara på våra kunskaper ifrån webtec och sätter upp det i Pico. Artikeln är uppdelad i ett par olika delar där varje del är filer ni behöver uppdatera.

Read more »

Category: design, pico.

Absoluta och relativa sökvägar

När vi arbetar med filer så lagras dessa i en katalog (eng folder). Vi har delat in vårt lagringsutrymme i en trädstruktur och vi kan ofta välja var i denna trädstruktur vi vill placera våra filer (vissa filer har dock en bestämd placering). Om man skriver pwd (print working directory) i Unix-terminalen får vi sökvägen till den aktuella katalogen, ex-vis /home/bbe/dbwebb-kurser/python/tester vilket innebär att katalogen tester är den aktuella katalogen och den finns i, dvs är en underkatalog till, python som är en underkatalog till dbwebb-kurser osv.

När vi med Python-kod skapar en text-fil som vi skriver till kan det ex-vis se ut så här

filename = "my_friends.txt"
friends = "Anna\nSven\nPia\nLinda\nKaj\n"
with open(filename, "w") as file_handler:
    file_handler.write(friends)

Filen namngiven "my_friends.txt" skapas då i den katalog som är arbetskatalog (current working directory). Om vi t.ex har startat VS code i katalogen python, som därmed blir arbetskatalogen, kommer filen med namnet "my_friends.txt" att placeras i denna katalog.

Om vi i stället vill placera en fil i katalogen tester, som finns en nivå ner, kan vi göra det genom att ange den relativa sökvägen eller den absoluta sökvägen.

Vi börjar med den relativa sökvägen, vilken motsvaras av att den utgår från aktuella katalog. Som i detta fall är python och skriver filen i testersom är en underkatalog

filename = "tester/my_friends.txt" 
friends = "Anna\nSven\nPia\nLinda\nKaj\n"
with open(filename, "w") as file_handler:
    file_handler.write(friends)

Och fortsätter med den absoluta sökvägen, vilken motsvaras av att den utgår från rot-katalog och innehåller hela vägen avseende katalogstrukturen.

filename = "/home/bbe/dbwebb-kurser/python/tester/my_friends.txt"
friends = "Anna\nSven\nPia\nLinda\nKaj\n"
with open(filename, "w") as file_handler:
    file_handler.write(friends)

Read more »

Category: python.

Fizz Buzz

Fizz Buzz är en lek som syftar till att lära barn division. Deltagarna räknar i tur och ordning från 1 och uppåt. När en deltagare hamnar på ett tal jämnt delbart med 3 ska hen istället säga “Fizz”. Om det är ett tal jämnt delbart med 5 ska hen säga “Buzz”. Är talet jämnt delbart med både 3 och 5 ska hen säga “FizzBuzz”.

Ex: 1, 2, Fizz, 4, Buzz, 6, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16, 17, Fizz, 19, Buzz, …..

Om en deltagare tvekar eller missar att ersätta ett tal med “Fizz”, “Buzz” eller “FizzBuzz” är hen ute ur leken.

Vi ska göra ett program som visar “facit” fram till talet 100, dvs som skriver ut alla heltal inom [1..100] och som ersätter tal delbara med 3 med Fizz, tal delbara med 5 med Buzz och tal delbara med både 3 och 5 med FizzBuzz.

Read more »

Category: python.

Installera Bash i Windows med WSL och Ubuntu

Så här gör du för att installera Bash med Ubuntu i Windows via WSL samt tar hjälp av pakethanteraren och installerar det som behövs för att komma igång med kurserna.

Read more »

Category: labbmiljo, windows, bash.