Techniek voor je (slimme) huis

Installatie van Docker en Compose onder Ubuntu

Voor veel toepassingen heb je Docker nodig. We laten in deze workshop zien hoe je Docker en Compose kunt installeren en gebruiken onder Ubuntu.

Veel toepassingen kun je snel en eenvoudig installeren via Docker en Docker Compose. In deze workshop leggen we uit hoe je deze tools kunt installeren en geven wat tips voor het gebruik. Als besturingssysteem kiezen we voor Ubuntu 22.04, de laatste LTS-versie. Je kunt verschillende systemen gebruiken, zoals een gewone server (‘bare metal’) maar ook een Linux-container of virtuele machine.

Stappen vooraf

We gaan Docker en Docker Compose installeren op een server met Ubuntu 22.04 LTS. Je kunt hiervoor zoals aangeven diverse systemen gebruiken. Voordat we beginnen met de installatie nemen we enkele belangrijke stappen door.

Een niet-root gebruiker maken

Hoewel je Docker als root-gebruiker kunt gebruiken, is het beter om een niet-root account te gebruiken met sudo-rechten. Met onderstaande stappen maak je in regel 1 een nieuw account genaamd administrator. Hierbij stel je een wachtwoord in. Deze gebruiker wordt daarna in regel 2 toegevoegd aan de groep sudo. Met de laatste opdracht kun je controleren dat dit daadwerkelijk is gebeurd. Log hierna uit en log dan opnieuw in met de nieuwe gebruiker.

sudo adduser administrator
sudo adduser administrator sudo
id administrator

Updates en extra’s installeren

Zorg dat het besturingssysteem is bijgewerkt met de laatste versie via onderstaande opdrachten.

sudo apt update
sudo apt upgrade

Er zijn wat extra tools nodig die je via de volgende opdracht installeert.

sudo apt install apt-transport-https ca-certificates curl software-properties-common

Tijdzone instellen

Een Docker-container gebruikt doorgaans standaard UTC als tijdzone. Bij het configureren van een container zul je daarom vaak handmatig de correcte tijdzone instellen, bijvoorbeeld Europe/Amsterdam. Het is handig als de tijdzone ook op de host (het systeem waarop je Docker gaat installeren) correct is ingesteld. De tijdzone kun je controleren met cat /etc/timezone en eventueel wijzigen met de onderstaande opdracht, waarbij je land en dan stad of regio kunt kiezen.

sudo dpkg-reconfigure tzdata
Stel de juiste tijdzone in voor je server.

Installatie Docker

We gaan Docker installeren via de officiële Docker-repository. Daarvoor voegen we eerst de repository toe en gaan vervolgens Docker vanuit die repository installeren.

Repository toevoegen

Om de repository voor Docker toe te voegen is een GPG-sleutel nodig. Voeg deze daarom eerste toe aan je systeem.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Vervolgens kun je de repository toevoegen.

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Werk alles bij zodat de repository actief wordt:

sudo apt update

Controleer of Docker vanuit de zojuist toegevoegde repository zal worden geïnstalleerd. Je ziet met deze opdracht een lijst met alle versies en de locatie die begint met https://download.docker.com/linux/ubuntu:

apt-cache policy docker-ce
Controleer of Docker vanuit de officiële repository wordt geïnstalleerd.

Docker installeren

Installeer nu Docker:

sudo apt install docker-ce

Controleer of Docker actief is:

sudo systemctl status docker
Controleer of Docker actief is.

Docker starten zonder sudo

Docker kan alleen worden gestart door de root-gebruiker of door een gebruiker in de groep docker. Je kunt opdrachten vooraf laten gaan door sudo (zoals sudo docker ps). Het is echter makkelijker om jezelf toe te voegen aan de groep docker zodat je geen sudo hoeft te gebruiken voor elke opdracht:

sudo usermod -aG docker ${USER}

Log uit en log opnieuw in om de wijziging effect te laten hebben. Let er in het vervolg op, bij het werken met Docker of Docker Compose, dat je als deze niet-root gebruiker bent ingelogd (zoals in dit voorbeeld administrator). Ook als je bijvoorbeeld mappen gaat maken of configuratiebestanden voor Docker Compose gaat maken of aanpassen.

Werking controleren

Je kunt nu aan de slag met Docker. Installeer bijvoorbeeld de container hello-world om de werking te testen.

docker run hello-world

Docker zal eerst controleren of de image die nodig is op je systeem staat. Als dat niet het geval is, wordt deze opgehaald, ook wel pull genoemd. Na het downloaden wordt de container gestart en zie je aan de uitvoer dat het is gelukt.

Met deze eenvoudige opdracht kun je de werking van Docker controleren.

Werken met Docker

Het werken met Docker komt hier niet in detail aan bod, maar we willen je wel de belangrijkste opdrachten meegeven om je op weg te helpen. We starten als voorbeeld een container met WordPress:

docker run --name website -p 8080:80 -d wordpress

Met --name website geven we de container de herkenbare naam website. De optie -p 8080:80 zorgt dat poort 8080 op de host wordt gekoppeld met poort 80 in de container. Dat is de http-poort waarop WordPress actief is. De optie -d (detach) zorgt dat de opdrachtprompt weer vrij is nadat de container in de achtergrond is gestart. Met wordpress verwijzen we naar de naam van de image. Die image zal de eerste keer worden gedownload. Dat kan ook handmatig met docker pull wordpress.

Als je http://ipadres:8080 in een browser opent, waarbij je het ip-adres van je server invult, zie je de installatiepagina van WordPress. Om verder te gaan is overigens een database nodig, wat we hier buiten beschouwing laten.

Containers beheren

Voor een lijst met actieve containers geef je de opdracht docker ps. Je ziet dat elke container een id heeft (in dit voorbeeld 2b793b889e42) en een naam (in ons voorbeeld website).

De id of naam gebruik je om een container te starten, stoppen of weg te gooien. Daarvoor gebruik je respectievelijk docker start, docker stop en docker rm, steeds gevolgd door de id of de naam van de container, zoals:

docker start 2b793b889e42
docker stop website
docker rm website

Met Docker kun je dus in één opdracht een container starten met de gewenste opties. De container zal in de regel actief zijn totdat je deze stopt. Je kunt uiteraard meerdere containers starten en beheren, maar zeker in die situatie is het vaak makkelijker om met Docker Compose te werken.

Werken met Docker Compose

Docker Compose maakt standaard deel uit van Docker. Deze tool werkt met configuratiebestanden. Het is het meest praktisch om de bestanden en mappen voor Docker Compose binnen je thuismap te beheren. Maak daarvoor een map met mkdir ~/docker. Blader dan naar deze map map met cd ~/docker. Maak nu voor elke toepassing een eigen map. Als voorbeeld gaan we een webserver opzetten met Nginx.

We maken een map voor onze webserver met mkdir -p ~/docker/nginx en maken een map waarin we de HTML-bestanden voor de webserver kunnen zetten met mkdir -p ~/docker/nginx/html. Maak nu een eenvoudig HTML-bestand met nano ~/docker/nginx/html/index.html en zet daarin de volgende regels:

<!DOCTYPE html>
<html>
<head>
     <title>Welkom bij Nginx!</title>
</head>
<body>
     <h1>Welkom!</h1>
     <p>Dit is een test voor Nginx via Docker Compose</p>
</body>
</html>

Bladeren naar de map voor je webserver met cd ~/docker/nginx. Maak in deze map een configuratiebestand voor Docker Compose met nano docker-compose.yml. Zet daarin de volgende regels:

version: '3'

services:
  nginx:
    image: nginx:latest
    ports:
      - "1234:80"
    volumes:
      - ./html:/usr/share/nginx/html
    restart: unless-stopped

Bewaar het bestand met Ctrl+O en verlaat de editor met Ctrl+X.

In regel 7 geven we aan dat poort 1234 moet worden gekoppeld aan poort 80 in de container. In regel 9 koppelen we de map ./html met /usr/share/nginx/html in de container. Regel 10 zorgt dat de container opnieuw moet worden gestart tenzij deze handmatig is stopgezet. Je kunt de container nu starten:

docker compose up -d

De optie -d zorgt dat de opdrachtprompt weer beschikbaar is nadat de container is gestart. Wil je alle meldingen zien, dan kun je deze eventueel weglaten. Je kunt via http://ipadres:1234 de pagina index.html terugzien die via de webserver wordt geserveerd. Vervang ipadres door het ip-adres van de server. Wil je de container stoppen dan kan dat met:

docker compose down
Onze index.html wordt nu geserveerd door de webserver Nginx.

Dit is een eenvoudig voorbeeld. Meestal is een configuratiebestand voor Docker Compose veel uitgebreider. Je kunt bijvoorbeeld via hetzelfde configuratiebestand naast een container voor de webserver ook containers voor WordPress en een MySQL-database configureren die buiten de host om een netwerk kunnen gebruiken.

Deel dit artikel
Deelbare link
Vorig artikel

Transcripties en vertalingen van audio met Whisper

Volgend artikel

Camerabewaking met Frigate: detecteer personen en objecten

Comments 2
Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Gerelateerde artikelen
Deze website gebruikt cookies. Leer meer over het gebruik van cookies: privacybeleid