Docker -> software als virtual machine - Mijnglasvezelverbinding

Gehost op Synology NAS met XS4ALL glasvezel

Docker –> software als virtual machine

Laatst kwam ik in aanraking met Docker, en het leek mij handig om hier mijn ervaring te delen. Ik kan hier dan direct wat aantekeningen kwijt zodat ik het nog een keer terug kan lezen 🙂

De duurdere Synology modellen ondersteunen Docker, maar je kunt Docker ook gebruiken op een desktop of remote server.

Wat is Docker?

Met Docker kun je software (met alles wat nodig is om de software te kunnen draaien) bundelen als één pakketje. Het handige hiervan is dat je dat pakketje kunt ‘installeren’ op verschillende platformen waarbij je zeker weet dat het gedrag hetzelfde is, als je het nu op een windows systeem of een linux systeem draait. Je kunt bijvoorbeeld ook meerdere versies van dat pakketje (bijvoorbeeld apache of php) tegelijk draaien. Vergelijk het dus met een virtuele machine, maar dan voor software. Al kun je met docker bijvoorbeeld ook Ubuntu als pakketje kunt verpakken.

Een groot voordeel is dat je deze pakketjes, wat in docker termen een container heet, naar elkaar kan laten verwijzen. Zo kun je bijvoorbeeld een MySQL en WordPress container laten samenwerken.

Doordat alles netjes binnen de container zit, blijft de host waar docker op is geïnstalleerd lekker schoon.
De containers kun je ook backuppen en kopieren naar zoveel hosts als je maar wilt.

Een image is een kant en klaar pakket dat als container kan draaien binnen Docker. Deze standaard images staan voor je klaar op hub.docker.com. Een image gebruik je vervolgens als bron om te draaien als container. Zo kun je dus meerdere containers draaien met hetzelfde image. Je kunt ook zelf een image maken, je bent daarbij niet afhankelijk van hub.docker.com.

Docker hub

Voorbeeld –>
NGINX reverse proxy met Let’s Encrypt certificaten en Node-RED via Docker

In dit voorbeeld leg ik uit hoe je Node-RED kunt draaien in een Docker container. We installeren ook een reverse proxy van NGINX met gratis Let’s Encrypt certificaten.
Een reverse proxy is handig als je maar één ip adres hebt waar je meerdere websites of api’s op wilt hosten.

Ik ga hier niet uitleggen hoe je Docker installeert omdat daar via google al heel veel beschrijvingen van zijn.

Laat ik starten met wat basis commando’s om Docker images an containers te beheren:
docker images –> Hiermee krijg je een overzicht van alle images die zijn binnengehaald:

Docker images

docker ps -a –> Hiermee krijg je een overzicht van alle containers:

docker ps-a

docker pull [image] –> Image downloaden uit de repository (standaard hub.docker.com)
docker rmi [image] –> Image verwijderen
docker run [..] –> Container starten
docker stop [ID] –> Container stoppen.
docker rm [ID] –> Container verwijderen
docker volume ls –> Overzicht van alle volumes (filesystem van de container)

De nginx proxy is als image beschikbaar in de docker hub. Deze gaan we binnenhalen en starten door dit commando uit te voeren. Docker ziet zelf dat het image er nog niet is, en zal hem dan eerst zelf downloaden:

docker run -d -p 80:80 -p 443:443 \
–name nginx-proxy \
-v /home/certs:/etc/nginx/certs:ro \
-v /etc/nginx/vhost.d \
-v /usr/share/nginx/html \
-v /var/run/docker.sock:/tmp/docker.sock:ro \
jwilder/nginx-proxy

met -v kun je een map van de host delen met de container. Dat kan handig zijn als je een map of bestand wilt delen tussen verschillende containers. In dit geval certificaten en nginx configuratie. Als je heel flexibel wilt zijn dan kun je ook containers installeren die een filesystemen leveren.

Een ander image verzorgt de Let’s Encrypt certificaten, deze starten we zo op:

docker run -d -p 80:80 -p 443:443 \
–name nginx-proxy \
-v /home/certs:/etc/nginx/certs:ro \
-v /etc/nginx/vhost.d \
-v /usr/share/nginx/html \
-v /var/run/docker.sock:/tmp/docker.sock:ro \
jwilder/nginx-proxy

Vervolgens kun je nu containers gaan starten die via deze reverse proxy moeten gaan lopen. Je doet dat door de variabele (-e ..) VIRTUAL_HOST en onderstaande Let’s Encrypt variabelen mee te geven wanneer je een container start.

docker run -d \
-e “VIRTUAL_HOST=vps.roeltraag.nl” \
-e “LETSENCRYPT_HOST=vps.roeltraag.nl” \
-e “LETSENCRYPT_EMAIL=roel@roeltraag.nl” \
–name=nodered -d -v /home/nodered/:/root/.node-red cpswan/node-red

Met bovenstaand commando heb ik ook een node-red container gestart waarbij ik ook een link heb gelegd naar een map op de host om hier handig een config file van node-red op te slaan. Maar dat is optioneel.

vps node-red

 


Post a Comment

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

  • Categorieën

  • Tag cloud