ID.nl logo
Instapcursus Docker Desktop: geen gedoe met losse applicatiebestanden
© Sergey Novikov/serrnovik
Huis

Instapcursus Docker Desktop: geen gedoe met losse applicatiebestanden

Er bestaan heel wat interessante serverapplicaties, vaak gebaseerd op Linux, die zich niet eenvoudig in Windows laten installeren en ook lastig te configureren zijn. Docker bundelt alle benodigde componenten netjes in een container, die je moeiteloos kunt uitpakken op je eigen pc.

In dit artikel leggen we uit wat Docker is en hoe het werkt. In het kort:

  • We installeren Docker Desktop
  • We downloaden de gewenste images
  • We voeren de image(s) uit, oftewel we zetten ze om naar een container

Ook interessant: Fouten maken mag! Zo kun je in een veilige omgeving je netwerk testen

Voor het efficiënte transport van verschillende ladingen worden vrijwel altijd containers ingezet. Ze zorgen er immers voor dat alle objecten veilig en geordend bij elkaar blijven in een afgesloten omgeving. Wat als je dit principe ook kon toepassen op applicaties? Je zou alle benodigde elementen van zo’n toepassing, zoals programmabibliotheken en configuratiebestanden, kunnen verpakken in een container, waardoor je deze gemakkelijk kunt verplaatsen, beheren en uitvoeren op het gewenste systeem.

Deze aanpak met containers bestaat al enkele decennia, maar het is vooral Docker, dat ongeveer tien jaar geleden deze methode heeft gestandaardiseerd en populair heeft gemaakt.

Containers versus virtualisatie

Docker gebruikt containertechnologie om (web)applicaties te bouwen, te testen en makkelijk uit te rollen of te verspreiden. Voor het Docker-tijdperk gebruikten ontwikkelaars hiervoor gewoonlijk virtuele machines, met behulp van zogeheten hypervisors als Microsoft Hyper-V, VMware ESXi of Oracle VM VirtualBox.

Virtualisatie heeft helaas enkele nadelen. Een virtuele machine bevat naast de eigenlijke applicatie en benodigde software, immers ook een complete kopie van het besturingssysteem, wat veel intern geheugen kan vergen. Bovendien kan het virtualiseren van hardware een flinke impact hebben op de prestaties van het gast-besturingssysteem.

Applicaties in Docker-containers daarentegen gebruiken evenveel werkgeheugen als deze zonder container nodig zouden hebben, wat maakt dat je vaak probleemloos verschillende containers tegelijk op een doorsnee computer kunt draaien. Elke container draait in een volledig afgescheiden, virtueel bestandssysteem met alleen de nodige software en afhankelijkheden. Dit maakt dat je containers moeiteloos kunt migreren en desgewenst kunt verwijderen zonder sporen na te laten. Containers zijn doorgaans dus efficiënter, draagbaarder en veiliger dan virtuele machines.

Ook bij meerdere containers is er slechts één besturingssysteem (host) nodig, terwijl elke virtuele machine zijn eigen besturingssysteem (gast) vereist.

Van image tot container

Om met containers te werken, is het begrijpen van het concept van ‘images’ essentieel. Een container is namelijk een actieve uitvoeringsinstantie gebaseerd op een onveranderlijke blauwdruk of sjabloon, ook wel image genoemd. Samen met een instructiebestand (Docker-bestand) bevat dit alles wat nodig is om een applicatie te draaien, waaronder de programmacode, omgevingsvariabelen, programmabibliotheken en configuratiebestanden. Een image kan zelfs uit meerdere gestapelde lagen bestaan, zoals Ubuntu Linux, Apache en PHP voor het bouwen van een webserver.

Om een container te maken, kun je gelukkig gebruikmaken van een kant-en-klaar image met behulp van de juiste software. Het programma dat we hiervoor gaan gebruiken, is Docker Desktop. Dit kun je beschouwen als een grafische gebruikersinterface (kortweg GUI) bovenop de onderliggende Docker Engine-software (met de Docker Daemon).

Docker Engine is verantwoordelijk voor het laden van Docker-images, het maken en beheren van Docker-containers op basis van die images en het communiceren met Docker-repository’s voor het downloaden (en uploaden) van images. Docker Desktop maakt daarnaast gebruik van andere softwarecomponenten zoals Docker CLI-client en Docker Compose, maar deze komen verder in onze introductie niet expliciet aan bod.

Een Docker-bestand en een Docker-image maken samen een Docker-container.

Docker-repository’s

Repository’s (repositories in het Engels) zijn bibliotheken of opslagplaatsen waar Docker-images worden opgeslagen en gedeeld. Ze kunnen zowel openbaar als privé zijn en geven gebruikers de optie om images te uploaden (push) en te downloaden (pull). Een bekend voorbeeld is Docker Hub, de standaard openbare repository van Docker zelf (zie ook de paragraaf ‘Images zoeken’).

Natuurlijk bevatten images programmacode die binnen containers wordt uitgevoerd, wat het veiligheidsaspect belangrijk maakt. In de paragraaf ‘Veiligheidscontrole’, helemaal aan het einde van dit artikel, bespreken we kort hoe je bekende kwetsbaarheden in images kunt identificeren. Bij niet-officiële images valt niet helemaal uit te sluiten dat er bewust malware is toegevoegd. Er zijn zelfs images ontdekt waarin een cryptominer was ingebouwd of die een ‘Docker-escape’ bevatte waarmee een gecontaineriseerd proces alsnog toegang krijgt tot het hostsysteem.

Voor wie op zoek is naar een kant-en-klaar image: enige waakzaamheid is vereist. Zo’n zoektocht wordt vaak ook bemoeilijkt doordat er vaak honderden images beschikbaar zijn voor dezelfde software. De hoeveelheid downloads en gebruikersbeoordelingen kunnen je wel helpen bij het maken van een keuze.

Een schematische voorstelling van een ‘Docker-escape’, die gelukkig zeer uitzonderlijk zijn.

Windows en hardware

Je hebt nu genoeg basiskennis om aan de slag te gaan met Docker (Desktop), maar je beseft waarschijnlijk wel dat dit vooral iets is voor de wat meer gevorderde gebruiker. Docker Desktop vereist een Windows-machine met Windows 10 of 11, Home of Pro (64 bit), minimaal versie 21H2, maar bij voorkeur de allernieuwste versie.

De machine moet ten minste 4 GB geheugen hebben en een 64bit-processor met SLAT-ondersteuning (Second Level Address Translation, een specifieke hardware-virtualisatietechnologie, bij AMD vaak RVI genoemd en bij Intel Core-processors EPT). In het UEFI/BIOS moet hardware-virtualisatie ook daadwerkelijk zijn ingeschakeld, vaak aangeduid als AMD-V of VT-X. Je kunt dit snel controleren door in Windows op Ctrl+Shift+Esc te drukken, het tabblad Prestaties te openen en op Processor te klikken. Bij Virtualisatie moet Ingeschakeld worden weergegeven. Neem desnoods je systeemhandleiding door voor eventuele aanpassingen aan het systeem-BIOS.

Het ziet er naar uit dat hardware-virtualisatie is ingeschakeld op ons systeem.

Niet de juiste specs?

Shop voor een nieuwe pc

Windows Subsystem for Linux versie 2

We gaan voornamelijk aan de slag met containers op basis van Linux en voor optimale prestaties hebben we de zogenoemde WSL2-backend nodig (Windows Subsystem for Linux versie 2). Hiermee kan Docker Desktop een echte Linux-kernel gebruiken, wat resulteert in snellere opstarttijden en efficiënter gebruik van bronnen. Een alternatieve backend is Hyper-V, maar die is alleen beschikbaar op Windows Pro en hogere versies, en is doorgaans logger.

Bij een recente Windows-versie is het installeren van WSL2 eenvoudig: open de Opdrachtprompt als administrator en voer het commando wsl --install uit. Als dat nodig is, kun je WSL ook downloaden vanuit de Microsoft Store. WSL werk je eenvoudig bij met het commando wsl --update.

Controleer daarnaast het volgende: druk op de Windows-toets+R en voer optionalfeatures uit. In het venster Windows-onderdelen in- of uitschakelen zorg je er dat zowel Platform voor virtuele machine als Windows-subsysteem voor Linux is aangevinkt. Bevestig met OK en herstart indien nodig je systeem.

Docker Desktop vereist dat exact de juiste onderdelen zijn ingeschakeld.

Kennismaking Docker Desktop

We zijn nu eindelijk klaar om Docker Desktop te installeren. Je kunt deze gratis downloaden via deze pagina. Start de installatie met een dubbelklik op het exe-bestand (je kunt ook een installatie via de Opdrachtprompt uitvoeren, maar dit laten we hier buiten beschouwing). Indien van toepassing laat je het vinkje staan bij Install required Windows components for WSL 2. Volg de verdere setup-instructies en herstart Windows.

Na de installatie vind je Docker Desktop in het Windows-startmenu. Zorg dat je Docker Desktop opstart met een administrator-account (je kunt ook een account aan de gebruikersgroep docker-users toevoegen, maar dit terzijde).

Klik op het tandwielpictogram en open het onderdeel General. Zorg dat er vinkjes staan bij Use the WSL 2 based engine, Open Docker Dashboard at startup (alleen als je de applicatie vaak gebruikt) en Show CLI hints. Bij Software updates is het handig om Automatically check for updates ingeschakeld te laten. En hoewel we hier in deze introductie niet expliciet op ingaan: laat onder Extensions het vinkje staan bij Enable Docker Extensions.

Alle onderdelen van Docker Desktop zijn bereikbaar via een knoppenbalk aan de linkerzijde. De belangrijkste onderdelen voor dit artikel zijn Containers (actieve instanties van images) en Images (waarschijnlijk gedownload vanuit een repository). Daarnaast zijn er onder andere:

• Volumes: blijvende opslagruimtes om gegevens te behouden, ook als je bepaalde containers niet meer gebruikt;
• Docker Scout: voor analyses van gedownloade images, inclusief veiligheidsanalyse;
• Learning Center: met diverse gidsen en voorbeelden;
• Extensions: verschillende extensies om de functionaliteit van Docker Desktop uit te breiden.

Het dashboard van Docker Desktop, met een overzicht van reeds gedownloade images.

Images zoeken

Je hebt inmiddels begrepen dat alles begint met images. Open daarom het onderdeel Images in Docker Desktop en klik op Local. Je zou hier het image getting-started al moeten zien staan, dat bedoeld is om je verder op weg te helpen met Docker. We laten zo zien hoe je images kunt uitvoeren en omzetten naar een actieve instantie, oftewel een container, maar we leggen eerst uit hoe je andere images kunt toevoegen.

Zoals gezegd kun je hiervoor onder meer terecht in de populaire repository Docker Hub. Maak een account aan, meld je aan, klik op Continue with Free en klik op Verify Email Address in de bevestigingsmail. Meld je met dit account tevens aan in Docker Desktop zelf via Sign in.

Terug in Docker Hub kun je op Explorer klikken en zoekfilters gebruiken. De combinatie Images en Docker Official Image bijvoorbeeld levert ongeveer 180 resultaten op. Als je ook het filter Verified Publisher toevoegt, vind je bijna aan 9000 images. Uiteraard kun je ook je eigen zoektermen in de zoekbalk invoeren.

Bij elk zoekresultaat zie je ook het aantal downloads, oftewel ‘pulls’, inclusief tijdsgrafiek en gebruikerswaardering. Klik op een resultaat voor het specifieke Docker pull command (zie volgende paragraaf), en voor uitleg over de opstart en verdere configuratie van de applicatie.

Overigens kun je ook rechtstreeks vanuit Docker Desktop naar images zoeken. Je hoeft je zoekterm maar in de zoekbalk bovenaan te tikken of je drukt op Ctrl+K voor de ingebouwde zoekmodule. Klik vervolgens op Images en Hub images voor de beschikbare exemplaren op Docker Hub. Klik op het pijlknopje bij Tag om, naast de meest recente versie (Latest) ook alternatieve versies te kunnen opvragen.

Bijna 9000 ‘officiële’ images of afkomstig van geverifieerde ontwikkelaars.

Een keur aan images We schreven al dat het lastig kan zijn om een gerichte keuze te maken uit de talrijke (zo goed als kant-en-klare) Docker-images. We weten natuurlijk niet naar welk soort (server)applicaties jouw specifieke interesses uitgaan, maar hieronder vermelden we toch al een aantal images waarvan we hopen dat je die zelf ook interessant vindt – en die op een Windows-machine zonder gebruik van containers lastig(er) te configureren zijn. In willekeurige volgorde:

  • Ubuntu: populaire Linux-distributie
  • Pi-hole of AdGuard Home: flexibele adblockers
  • Transmission: Torrent-client met VPN
  • Nextcloud of Owncoud: private cloudopslagdiensten
  • Heimdall: dashboard voor applicaties en sites
  • Home Assistant: centrale aansturing van slimme apparaten en domotica
  • Plex of Jellyfin: mediaservers
  • Airsonic-advanced: audioserver
  • SABnzbd: nieuwsgroep-reader
  • MeTube: krachtige downloader voor online video’s als YouTube
  • MariaDB met phpMyAdmin: MySQL-database inclusief beheermodule
  • Vaultwarden: wachtwoordbeheerder op basis van Bitwarden
  • DDNS Updater: updatetool voor een dynamisch DNS.

Op de websites van de respectievelijke makers vind je vaak configuratie-instructies en gebruikershandleidingen. Wanneer je met een zoekmachine zoekt naar iets als applicatienaam docker container vind je ook al snel pull- en run-instructies, inclusief parameters, voor gebruik vanuit Docker.

Images downloaden

Je hebt nu één of meerdere Docker-images gevonden die je interesseren. Nu is het tijd om die op je eigen pc te krijgen. Gelukkig is dit proces niet ingewikkeld. De eenvoudigste manier is vanuit Docker Desktop, waar je in de zoekmodule op Pull klikt bij het gewenste image. Binnen korte tijd wordt dit image aan je lijst met images toegevoegd, met de status Unused. Je kunt dit image ook weer verwijderen door op het vuilnisbak-icoon te klikken en te bevestigen met Delete forever. Indien van toepassing, dien je wel eerst de bijbehorende container te verwijderen. Als je alleen de container verwijdert en deze nadien opnieuw aanmaakt, is de kans groot dat alles nog werkt zoals ervoor. Dit hangt er wel vanaf of de ontwikkelaar van het bijbehorende image de opslagvolumes correct heeft gekoppeld. Je kunt de inhoud van zo’n container bekijken door op de containernaam te klikken en Files te openen.

Een andere optie om images te downloaden, is om de Opdrachtprompt te gebruiken met het Docker-commando (voer docker in zonder extra toevoegingen voor een overzicht van beschikbare parameters). Om een image te downloaden, gebruik je docker pull <image-naam>, zoals vermeld op Docker Hub. Hierna zul je dit image ook in de lijst van Docker Desktop zien verschijnen.

Je kunt een image downloaden vanuit Docker Desktop of vanaf de Opdrachtprompt.

Uitvoeren via Desktop

Om een image uit te voeren en om te zetten naar een (potentieel) actieve container, hoef je in principe alleen maar op het pijlknopje te klikken naast het gewenste image en nogmaals te bevestigen met Run. Je krijgt in het getoonde venster echter de kans om een of meer instellingen aan te passen onder Optional settings. Dit omvat vaak een Container name (als je geen naam invoert, zal Docker er automatisch een genereren), de Host port, eventuele volumes en omgevingsvariabelen. Nadat je hebt bevestigd, vind je het image terug als een actieve container onder de opgegeven naam.

Stel, je ziet bij Port(s) staan: 8000:8081. Dit betekent dat de interne serverapplicatie draait op poort 8081, maar dat je deze kunt bereiken via poort 8000. Wanneer je dan klikt op die 8000 voor :8081/tcp, zal je browser normaal gesproken starten met het volgende adres: http://localhost:8000.

Bij wijze van voorbeeld hebben we dit gedaan met de MeTube-applicatie. We kwamen direct op een webpagina waar we alleen een video- of playlist-url hoefden in te voeren (bijvoorbeeld https://www.youtube.com/watch?v=_DqeuX44YUg) en de gewenste Quality en Format moesten selecteren. Met een druk op de knop Add werd de bijbehorende video opgehaald en aan de lijst toegevoegd. Je kunt deze video vervolgens via de knop Download naar een fysieke opslaglocatie kopiëren.

Afhankelijk van het image kun je nog extra parameters instellen.

Uitvoering via de Opdrachtprompt

Het uitvoeren van een image kun je ook regelen vanaf de Opdrachtprompt met een Docker-commando, maar meestal moet je wel de juiste parameters kennen. Vaak vind je deze informatie op de website van de makers of via een zoekopdracht.

We geven één eenvoudig voorbeeld om het standaard educatieve image docker/getting-started uit te voeren:

docker run -d -p 80:80 docker/getting-started

In dit geval is docker/getting-started de naam van het image. Met de parameter -d (detached) start je de container in de achtergrond en met -p 80:80 koppel je poort 80 van je Windows-pc (de hostmachine) aan de standaardpoort 80 van de container. Dit betekent dat je simpelweg http://localhost in je browser kunt invoeren (aangezien poort 80 de standaard http-poort is). Als je bijvoorbeeld -p 8080:80 had gebruikt, zou je http://localhost:8080 moeten invoeren als adres.

Je kunt een image ook vanaf de Opdrachtprompt uitvoeren, met de nodige parameters.

Alternatieven

Gebruik je liever niet Docker Desktop – of lukt het je hiermee niet – dan kun je een gratis opensource-alternatief overwegen, zoals Podman Desktop. Deze is trouwens ook beschikbaar voor macOS en Linux.

De interface heeft veel weg van Docker Desktop. Wanneer je het onderdeel Images opent kun je via Pull an image op basis van trefwoorden images uit repository’s ophalen. Klik op Manage registries om je bijvoorbeeld bij Docker Hub aan te melden. Vanuit het onderdeel Images kun je een image vervolgens opstarten via Run Image / Start Container. Je krijgt dan eerst nog een scherm te zien waarin je allerlei parameters kunt instellen, bijvoorbeeld voor netwerk en veiligheid. Je vindt een opgestarte container terug in het onderdeel Containers.

Heb je een NAS die Docker ondersteunt, dan kun je Docker-images ook rechtstreeks vanaf je NAS draaien. We nemen een Synology DS220+ als voorbeeld. Je installeert eerst Container Manager vanuit het Package Center (of Docker in oudere versies) waarna je ook hier de inmiddels bekende onderdelen als Image en Container aantreft. Images kun je toevoegen vanaf een url of via een lokaal bestand. Raadpleeg eventueel de online gebruikersgidsen van de NAS-fabrikant voor meer informatie.

Podman Desktop is een waardig alternatief voor Docker Desktop en draait ook op macOS en Linux.

Veiligheidscontrole

Wanneer je je beperkt tot actuele Docker Official Images en images van Verified Publishers, hoef je meestal niet te veel zorgen te maken over ernstige kwetsbaarheden. Toch is het verstandig om ook dan regelmatig een veiligheidscheck uit te voeren. Met een gratis Docker Hub-account kun je enkele veiligheidsaspecten van je images controleren. Dit kan via Docker Scout binnen Docker Desktop. Selecteer het gewenste image in het menu Sample image en klik op Analyze image. Het overzicht van kwetsbaarheden verschijnt, opgedeeld in C (Critical), H (High), M (Medium) en L (Low). Voor meer details klik je op View packages and CVEs. Bij Vulnerabilities kun je de bijbehorende Packages openen en meer technische informatie opvragen via de links.

Vergelijkbare informatie kun je ook opvragen vanaf de Opdrachtprompt met deze commando’s:

docker scout quickview <image-naam>

of:

docker scout cves <image-naam>

of:

docker scout recommendations <image-naam>

We hebben helaas niet de ruimte hier dieper op in te gaan. Zorg er in elk geval voor dat je zoveel mogelijk de recentste images en updates downloadt en gebruikt.

Gebruik up-to-date images en check regelmatig op belangrijke kwetsbaarheden.

Watch on YouTube
▼ Volgende artikel
Zo komt je eten superkrokant uit de airfryer
© Grandbrothers - stock.adobe.com
Huis

Zo komt je eten superkrokant uit de airfryer

Je hebt een airfryer aangeschaft om gezonder en met minder vet te koken. Maar vetarm betekent gelukkig niet smaakloos of zompig! Sterker nog: in je airfryer maak je de lekkerste krokante gerechten, zonder dat ze in een plas olie liggen. Je moet alleen even weten hoe.

In dit artikel ontdek je:

  • Hoe een airfryer precies werkt
  • Wat de beste manier is om snacks en groenten knapperig te krijgen
  • Handige trucs voor het beste bakresultaat
  • Praktische tips om het maximale uit je apparaat te halen

Lees ook: Airfryer met één of twee lades? Zo kies je slim

Zo werkt een airfryer (en waarom dat belangrijk is)

Een airfryer is in de basis een compacte heteluchtoven waarin hete lucht snel circuleert. Je legt je eten meestal in een mandje of op een rekje. Dankzij het krachtige verwarmingselement is het apparaat razendsnel op temperatuur. Omdat de binnenruimte klein is, blijft de warmte goed behouden en is je maaltijd sneller klaar dan in een gewone oven. Dit maakt het niet alleen energiezuiniger, maar ook ideaal voor snelle, krokante resultaten.

©Hazal

Krokante snacks uit de airfryer: zo lukt het wél

Natuurlijk wil je friet en snacks kunnen maken in je airfryer. Gelukkig zijn er volop diepvriesproducten speciaal ontwikkeld voor dit apparaat. Volg voor het beste resultaat de aanwijzingen op de verpakking. En: altijd voorverwarmen, ook al staat in de handleiding van je apparaat dat het niet nodig is! Zet je airfryer zo'n vier minuten op de gewenste temperatuur voordat je begint.

Leg snacks zoals kroketten niet in een koude airfryer, net zoals je ze niet in koude olie zou leggen. Controleer aan het einde van de bereiding of je snack er mooi goudbruin uitziet. Elke airfryer is net even anders, dus sommige snacks hebben iets meer tijd nodig.

Groenten met een krokant jasje? Zo doe je dat

Wil je groenten met een lekkere bite? Dan is paneren je geheime wapen. Niet met een beslagje, maar met ei en paneermeel of panko. Snijd bijvoorbeeld bloemkoolroosjes klein, meng wat bloem met specerijen naar smaak en klop een eitje los. Haal de bloemkoolroosjes eerst door het bloemmengsel, dan door het ei, en druk ze daarna stevig in de panko. Twintig minuten op 190 graden en je hebt heerlijke krokante bloemkool.

Dit trucje werkt ook goed met andere groenten zoals courgette, aubergine (in repen) of wortel. In plaats van bloem en ei kun je ook een papje maken van bloem, kruiden en water, en dat gebruiken om je paneerlaag vast te laten plakken.

©Igor Ploskin

De truc met maizena voor perfect krokante aardappels

Maak je graag verse aardappels in de airfryer? Het kan lastig zijn om die goed krokant te krijgen. Dat komt door het zetmeel in aardappels, dat per ras en seizoen verschilt. Sommige aardappels bevatten veel suikers en worden daardoor snel bruin, zelfs als ze nog niet gaar zijn.

De oplossing? Week de aardappelpartjes of -schijfjes minstens een half uur in koud water om het overtollige zetmeel te verwijderen. Dep ze daarna goed droog. Meng per 500 gram aardappel één eetlepel maizena of aardappelzetmeel door de aardappels. Spray ze licht in met olie (bijvoorbeeld met zo'n handige flacon van de supermarkt) en bak ze 25 tot 30 minuten op 180 graden in een voorverwarmde airfryer. Controleer met een mes of ze gaar zijn, en serveer meteen: ze worden tijdens het afkoelen minder knapperig.

Spray je voedsel in met olie voor het beste bakresultaat

Met een speciale verstuiver krijg je een mooi, dun laagje

Algemene tips voor het beste bakresultaat

Veel mensen gebruiken bakvormen of leggen bakpapier onder hun eten om de airfryer schoon te houden. Prima, maar let erop dat de lucht vrij moet kunnen circuleren. Sluit je de mand te veel af, dan wordt je eten ongelijkmatig gaar.

Je hebt niet veel olie nodig voor een goed resultaat, maar wel een beetje. Voorgepaneerde producten, zoals een schnitzel uit de supermarkt, worden pas echt bruin en krokant als je de buitenzijde licht insprayt met olie. Invetten met een kwastje kan ook, maar dat geeft vaak een minder gelijkmatig resultaat.

Lukt het niet ondanks alle tips? Controleer dan de temperatuur van je airfryer met een oventhermometer. Verwarm je apparaat vijf minuten voor, zet de thermometer erin, en laat hem nog vijf minuten draaien op de gewenste temperatuur. Zo zie je snel of de ingestelde temperatuur overeenkomt met de werkelijke waarde. 


▼ Volgende artikel
Bestanden bewaren zonder tussenkomst van big tech? Maak kennis met Seafile
© jahidsuniverse
Huis

Bestanden bewaren zonder tussenkomst van big tech? Maak kennis met Seafile

Er zijn veel diensten voor dataopslag en bestandssynchronisatie, maar ze hebben één ding gemeen: je data worden in de cloud opgeslagen. Vind je dit geen prettige gedachte, dan kun je je eigen server hosten, voor volledige controle over je gegevens. Met Seafile kan dit ook nog helemaal gratis.

In dit artikel laten we zien hoe je je eigen cloudopslag host met Seafile:

  • Installeer de gratis Seafile Community Edition op een Linux-server of NAS
  • Configureer gebruikersrechten, encryptie en versiebeheer voor maximale controle
  • Synchroniseer bestanden tussen je pc, smartphone en tablet met Seafile-clients
  • Deel bestanden en mappen veilig via versleutelde links en toegangsrechten
  • Optimaliseer je Seafile-server met Docker, WSL of een Raspberry Pi

Is je privacy belangrijk? Lees dan zeker ook: WhatsApp of Signal: kies je voor meer functies of voor meer privacy?

Code downloaden

In dit artikel worden voorbeelden van diverse commando’s gegeven. Omdat het overtikken van dergelijke opdrachten erg foutgevoelig is, kun je ze beter downloaden en daarna bekijken of kopiëren. Zie het bestand seacode.txt (en de standaardversie van docker-compose.yml).

Dropbox, OneDrive en Google Drive zijn populaire opslagdiensten die je vast kent. Je kunt er veel data in de cloud opslaan, gratis of tegen een kleine vergoeding. Bij Google Drive bijvoorbeeld kost 200 GB 3 euro per maand. Je hebt op elk moment en via vrijwel elk apparaat toegang, via een browser of een losse app. De meeste diensten bieden bovendien handige opties om data te delen met specifieke machtigingen.

Waarom zou je dan de moeite nemen om zelf cloudopslag- en synchronisatiesoftware te installeren en te hosten? Omdat jij dan de volledige controle over je data behoudt, zonder afhankelijk te zijn van derde partijen. Voor wie privacy belangrijk vindt, is dit een groot pluspunt. En geef toe: het opzetten van een eigen server blijft altijd een leuke uitdaging, zeker als die ook nog eens nuttig blijkt te zijn.

Lees ook: Exit-strategie: zo verlaat je Google, Microsoft, Apple of Meta

1 Waarom Seafile?

In dit artikel laten we je kennismaken met de applicatie Seafile. Dit is een platform voor cloudopslag, delen en synchronisatie, vergelijkbaar met diensten als Nextcloud, ownCloud, Syncthing en Resilio Sync.

Seafile is wellicht iets minder bekend, maar dit is niet helemaal terecht. Het is namelijk niet alleen opensource, maar je kunt het ook gratis gebruiken. Verder biedt het een robuuste client-serveropzet, met een lichte en efficiënte architectuur, waardoor het minder serverbronnen gebruikt dan de meeste andere diensten.

Seafile ondersteunt ook standaard client-side-encryptie, zodat data versleuteld worden voordat ze de server bereiken. Daarnaast biedt de server sterke toegangscontrole-opties voor nauwgezet beheer van rechten en gedeelde toegang (zij het iets minder in de gratis editie).

Seafile heeft tevens een ingebouwd versiebeheersysteem, waarmee gebruikers snel eerdere bestandsversies kunnen herstellen. Voldoende redenen, zo lijkt ons, om Seafile nader te verkennen. Voor wie koudwatervrees heeft: op https://demo.seafile.com/demo kun je veilig aan de slag met een online demo-installatie.

Wil je snel weten of Seafile handig is? Probeer dan de demo-omgeving.

2 Installatie

Seafile is te vinden op www.seafile.com. De Community Edition is volledig gratis en geschikt om zelf te hosten. Op de website vind je bij Download de desktop-synchronisatieclients voor Windows, macOS en Linux, desktop-drive-clients (zonder synchronisatie) voor dezelfde besturingssystemen, en mobiele clients voor Android en iOS/iPadOS. In de laatste paragraaf komen we nog terug op die clients, maar eerst hebben we de servermodule nodig.

Klik hiervoor bij Server for generic Linux op Server Manual en selecteer in het menu links Seafile Community Setup on Linux – niet de Professional Setup, die niet gratis is en vanaf 4 tot 9 gebruikers jaarlijks 100 dollar (ca. 95 euro) kost. Als je op het kopje Outline klikt, lees je dat er twee installatiemethodes zijn. Handmatig, waarbij je zelf de nodige modules configureert, zoals database (MariaDB), geheugencaching (memcached) en webserver (Nginx/Apache). Of deels geautomatiseerd met Docker. Deze tweede methode is handigst en wordt aanbevolen, die volgen we hier.

Seafile bevat heel wat clientmodules, maar eerst hebben we een server nodig.

3 Windows Subsysteem voor Linux

In dit artikel bekijken we een deels geautomatiseerde installatie vanuit Linux. Dat kan een aparte Linux-machine zijn, maar je kunt ook ongeveer dezelfde methode via Docker gebruiken (zie volgende paragraaf) voor de installatie op een Windows-machine. Een native Linux-omgeving heeft wel de voorkeur, omdat er voor een Windows-omgeving extra voorbereiding en andere ingrepen nodig kunnen zijn (zie ook paragraaf 9).

Zo heb je, om Seafile op Windows te draaien, het Windows Subsysteem voor Linux (WSL) nodig. Op recente Windows-edities is het installeren van WSL of WSL 2 gelukkig eenvoudig: open de Opdrachtprompt als administrator en voer de opdracht wsl --install uit. Indien nodig kun je WSL ook downloaden via de Microsoft Store. Bijwerken van een bestaande WSL-installatie kan op elk moment met de opdracht wsl --update.

Controleer voor alle zekerheid het volgende: druk op Windows-toets+R, voer optionalfeatures uit, en controleer in het venster Windows-onderdelen in- of uitschakelen dat zowel de opties Virtual Machine Platform als Windows-subsysteem voor Linux zijn aangevinkt. Bevestig met OK en herstart je systeem indien nodig.

Het Windows Subsysteem voor Linux laat zich doorgaans snel en probleemloos installeren.

Meer alternatieve installaties

Wij installeren Seafile in een Linux-omgeving en binnen Ubuntu via WSL. Je kunt de software ook op andere systemen draaien, zoals een virtuele Linux-machine (bijvoorbeeld met VirtualBox), een Raspberry Pi of een NAS. Ook in deze omgevingen kun je een Docker-image voor Seafile gebruiken.

Voor een Raspberry Pi kun je met deze commando’s al veel bereiken:

sudo apt-get update

sudo apt-get dist-upgrade

curl -SL https://get.docker.com | sh

sudo usermod -aG docker $USER

newgrp docker

docker run hello-world

Hiermee ben je klaar om ARM(64)-compatibele Docker-images op je Raspberry Pi te installeren.

Ook op een Synology NAS kun je Seafile installeren via Docker in combinatie met Portainer, een beheertool voor containerplatformen. Voor goede stap-voor-stap instructies kun je terecht op de website Mariushosting.

4 Docker-voorbereiding

We gaan ervan uit dat je de Linux-terminal hebt opgestart en commando’s kunt invoeren. In Windows met WSL volstaat het om Ubuntu op te starten via het startmenu (Ubuntu wordt namelijk standaard met WSL 2 geïnstalleerd. In Ubuntu kun je de terminal openen met Ctrl+Alt+T.

Omdat we met de Docker-container voor Seafile gaan werken, moet Docker eerst worden geïnstalleerd. Om conflicten met eventuele restanten van eerdere Docker- (of Podman-)installaties te voorkomen, voer je voor alle zekerheid het volgende commando uit:

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

Na deze opschoning voeg je de officiële GPG-sleutel van Docker toe met de volgende commando’s:

sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

Dit zorgt ervoor dat je Docker zonder problemen kunt installeren en dat de pakketbronnen correct geverifieerd worden.

Voor alle zekerheid gooi je eventuele restanten van oudere Docker-installaties eerst overboord.

5 Docker-installatie

Vervolgens voeg je de Docker-repository toe, waar de benodigde Docker-softwarepakketten en componenten worden bewaard, met deze twee commando’s:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

Daarna installeer je Docker zelf met:

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Om Docker-commando’s ook zonder rootrechten uit te kunnen voeren, voer je de volgende drie commando’s uit (waarbij het eerste wellicht overbodig is):

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

Zoals gebruikelijk bij programmeurs kun je nu even de wereld gedag zeggen met:

sudo service docker start
sudo docker run hello-world

Ook zonder sudo zou dit commando nu moeten werken:

docker run hello-world

Je bent nu klaar om met Seafile aan de slag te gaan.

De melding ‘Hello from Docker’ is de bevestiging dat die software goed draait.

6 Downloaden yml-configuratiebestand

Voor het draaien van Seafile gebruik je een bestand genaamd docker-compose.yml. Zo’n bestand haalt de nodige Docker-images op, stelt omgevingsvariabelen in, koppelt volumes en netwerken, en definieert eventuele afhankelijkheden. Het zet deze onderdelen om naar containers die binnen een gedefinieerd netwerk samenwerken.

Maak eerst een submap aan (bijvoorbeeld /seafile) in je actuele gebruikersmap in Ubuntu/WSL. Gebruik hiervoor het commando mkdir seafile. Controleer de mapinhoud met de opdracht ls. Navigeer naar deze map met cd seafile en download het yml-bestand voor Seafile met het commando:

wget -O docker-compose.yml https://manual.seafile.com/11.0/docker/docker-compose/ce/11.0/docker-compose.yml

Hiermee haal je dus versie 11.0 van de Community Edition (CE) binnen.

Haal het juiste yml-bestand op en plaats het bij voorkeur in een aparte map.

7 Aanpassen yml-configuratiebestand

Het gedownloade bestand docker-compose.yml is bijna klaar voor gebruik, er zijn nog enkele aanpassingen nodig. Je past dit aan met de ingebouwde teksteditor Nano in Ubuntu (gebruik de pijltjestoetsen om te navigeren), vanuit de map /home/<gebruiker>/seafile. Gebruik dit commando:

nano docker-compose.yml

Pas bij het kopje volumes: de regel /opt/seafile-mysql/[…] aan naar de submap die je eerder hebt gemaakt: /home/<gebruikersnaam>/seafile/mysql/[…].

Met het commando whoami kun je eventueel je gebruikersnaam opvragen. De submap /mysql wordt bij het uitvoeren van het yml-bestand (zie volgende paragraaf) automatisch aangemaakt.

Pas verder bij het kopje volumes: de regel /opt/seafile-data:/shared aan naar: /home/<gebruikersnaam>/seafile/data:/shared.

Vervang het standaardwachtwoord db_dev bij MYSQL_ROOT_PASSWORD= en DB_ROOT_PASSWD= door een eigen sterk wachtwoord.

Bij het kopje ports: kun je het poortnummer wijzigen waarop de webinterface van je Seafile-server bereikbaar is (standaard is dit 80). Wil je bijvoorbeeld poort 8001 gebruiken, pas dan "80:80" aan naar "8001:80".

Wijzig TIME_ZONE=Etc/UTC in TIME_ZONE=Europe/Amsterdam (of Europe/Brussels), vul je eigen e-mailadres in achter SEAFILE_ADMIN_EMAIL= en wijzig het standaard wachtwoord ascret van de beheerder achter SEAFILE_ADMIN_PASSWORD= in een sterk wachtwoord.

Voeg de regel restart: always toe om ervoor te zorgen dat de container automatisch opnieuw start, ook bij een herstart van de host. Dit kun je bijvoorbeeld doen net voor de twee onderste regels:

networks:
  seafile-net:

Sla het bestand op met Ctrl+O, bevestig met Enter en sluit af met Ctrl+X.

Alle wijzigingen in het yml-bestand in één oogopslag binnen Nano. 

Https

In het standaard docker-compose.yml-bestand van Seafile zie je dat bij ports: de regel "443:443" is uitgeschakeld met een commentaarteken (#). Laat dit in eerste instantie zo staan. Wil je je Seafile-server ook extern bereikbaar maken, dan is het zeker aan te raden om de server via https (standaardpoort 443) te laten benaderen. Pas in dit yml-bestand de regel SEAFILE_SERVER_LETSENCRYPT=true aan (in plaats van =false) en stel bij SEAFILE_SERVER_HOSTNAME= de hostnaam (en het eventuele poortnummer) in waarmee de server via https te bereiken is. We hebben hier helaas niet de ruimte om uit te leggen hoe je een https-certificaat van bijvoorbeeld Let’s Encrypt koppelt aan de domeinnaam van je Seafile-server en wat er precies nodig is om de server via https bereikbaar te maken.

8 Seafile starten

Om het yml-configuratiebestand uit te voeren, heb je Docker Compose nodig. Dit is gelukkig al meegekomen met de Docker-installatie van paragraaf 5. Vanuit de map /home/<gebruikersnaam>/seafile voer je deze opdracht uit:

docker compose up

Je ziet nu de logs van de containers, wat handig is om foutmeldingen in dit stadium op te sporen. Ongeveer een halve minuut later verschijnt, als het goed is, onderaan de melding Seahub is started. Done.

Open een browser op dit systeem en tik het adres localhost in, of localhost:<poortnummer> als je een andere poort hebt ingesteld in het yml-configuratiebestand. Het inlogvenster van Seafile verschijnt (gebruik het e-mailadres en wachtwoord van de Seafile-admin, zoals in het yml-configuratiebestand aangegeven). Na je aanmelding verschijnt een welkomstvenster en beland je in je dashboard (zie ook paragraaf 10).

Als alles naar behoren werkt, kun je voor volgende sessies deze opdracht gebruiken om meldingen te onderdrukken en de containers op de achtergrond te laten draaien:

docker compose up -d

Met dit commando kun je op elk moment de status van de draaiende containers bekijken:

docker ps

Het grote moment: de webinterface van Seafile met inlogvenster verschijnt.

9 Extra stappen in WSL 2

We testten Seafile tevens uit in een WSL2-omgeving in Windows en stuitten daarbij op twee onverwachte problemen. De eerste foutmelding was dat het bestand docker-credential-desktop.exe niet gevonden werd. Dit konden we oplossen door het bestand config.json in de map ~/.docker leeg te maken, vermoedelijk was dit een gevolg van een eerdere Docker Desktop-installatie.

Een vervelender probleem is dat WSL 2 standaard een gevirtualiseerde netwerkadapter gebruikt die niet direct bereikbaar is vanaf andere apparaten op het thuisnetwerk. Door een poortproxy (portforwarding) in te stellen, kun je de Seafile-webserver wel vanaf andere apparaten benaderen via <LAN-ip-adres>:<poortnummer>.

Start op het systeem met de WSL2-Seafile-server de Windows Opdrachtprompt als administrator en voer het commando wsl hostname -I uit. Dit levert drie interne WSL-ip-adressen op, waarbij het eerste adres reageert op een ping-commando:

ping <eerste ip-adres>

Dit adres correspondeert met de Seafile-webserver. Met het volgende commando wordt verkeer naar de ingestelde poort op een van de fysieke netwerkinterfaces (0.0.0.0) doorgestuurd naar de poort op het interne ip-adres van de Seafile-server:

netsh interface portproxy add v4tov4 listenport=<poortnummer-fysiek> listenaddress=0.0.0.0 connectport=<poortnummer-Seafile> connectaddress=<interne IP-Seafile-server>

In ons voorbeeld werd dit:

netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=8001 connectaddress=172.25.102.224

Hiermee was de Seafile-webserver bereikbaar via <LAN-ip-adres-Windows-pc>, bij ons: 192.168.0.164, op de standaardpoort 80.

We zetten een ‘poortproxy’ op om de WSL2-interne Seafile-server via het netwerk te kunnen bereiken.

10 Systeembeheer

Voordat we overgaan naar de synchronisatie met de clients, is het nuttig om enkele opties in het Seafile-serverdashboard te bekijken. Rechtsboven bevindt zich een profielknop waarmee je via de optie Instellingen onder meer de taal, het wachtwoord en de notificatiefrequentie kunt aanpassen. Hier vind je ook de opties Uitloggen en Systeembeheerder. Met de laatste optie open je een uitgebreid menu met systeemopties. De rubriek Statistic biedt bijvoorbeeld inzicht in opslaggebruik, gebruikers en verkeer, en maakt het genereren van rapporten mogelijk.

Het onderdeel Apparaten toont een overzicht van verbonden toestellen. Belangrijk is ook de sectie Instellingen. Hier moet je namelijk de velden SERVICE_URL en zeker ook FILE_SERVER_ROOT wijzigen van de standaard-url (http://docs.seafile.com) in die van je eigen server. In onze testopstelling was dat bijvoorbeeld respectievelijk http://192.168.0.164 en http://192.168.0.164/seafhttp (de submap /seafhttp is standaard bij gebruik van Nginx/Apache). Bevestig deze wijzigingen telkens door op het vinkje te klikken. Verder vind je hier nog opties om voorwaarden voor nieuwe gebruikers in te stellen, zoals wachtwoordvereisten of een activatiemail.

In de rubriek Gebruikers beheer je eenvoudig gebruikers, inclusief importeren en exporteren van gegevens van en naar Excel. Bij Groepen kun je gebruikersgroepen en de bijbehorende bibliotheken beheren.

We raden je aan om alle rubrieken en opties een keer zorgvuldig door te nemen.

Vergeet niet om de url’s op die van je eigen Seafile-server af te stemmen.

Ook interessant: Weg van big tech, dit is het fediverse 

11 Databeheer

Bij Seafile draait alles om data, waarbij bibliotheken het centrale concept vormen. Klik linksboven op het logo om naar je dashboard te gaan en open Mijn bibliotheken. Met de knop Nieuwe Bibliotheek maak je eenvoudig extra bibliotheken aan en kun je door een vinkje bij Versleutel de toegang beveiligen met een wachtwoord. Bovenaan kun je via Upload en Nieuw bestanden toevoegen aan een geopende bibliotheek. Geselecteerde bestanden kun je kopiëren, verplaatsen, verwijderen en naar je systeem downloaden.

Als je met de muis over een bibliotheek, map of bestand beweegt, verschijnen enkele pictogrammen. Naast Downloaden en Verwijderen zie je het pictogram Meer handelingen voor een extra optiemenu. Bij Bestanden biedt dit menu onder meer Tags (labels toevoegen om data sneller te herkennen), Openen via programma (je kiest zelf de gewenste applicatie voor dat bestandstype) en Geschiedenis. Deze laatste optie geeft toegang tot versiebeheer, zodat je oudere versies kunt terughalen via Downloaden. De opties Tags en Geschiedenis vind je trouwens ook op bibliotheekniveau, via knopjes rechts boven de bibliotheekinhoud.

Seafile biedt ook een krachtig versiebeheer aan.

12 Delen

In de sectie Bibliotheken vind je bovenaan en bij een geselecteerd item de optie Delen. Kies je het pictogram Delen naast een geselecteerd bestand, dan verschijnt een venster met de opties Deellink en Interne link.

We richten ons hier op de eerste optie (Interne link is alleen voor gebruikers met specifieke leesrechten). Klik op Generate Link of op Generate links in batch voor meerdere links tegelijk. Na het klikken op Genereer verschijnen twee links: één waarmee de gebruiker een bestand kan previewen (indien beschikbaar) en dan beslissen om te downloaden, en één voor een directe download. Beide links bieden een QR-code. Je kunt ook een wachtwoord instellen (via Wachtwoord beveiliging toevoegen) en een vervaldatum voor je link meegeven (via Voeg automatische vervaldatum toe).

Als je Delen kiest op bibliotheekniveau, heb je extra opties: Upload Link (voor gebruikers om bestanden in je bibliotheek te uploaden), Delen met gebruiker en Delen met een groep, waarbij je telkens machtigingen instelt op Alleen lezen of Lezen/schrijven. In je dashboard vind je linksonder de optie Delen beheer, waarmee je gedeelde bibliotheken, mappen en links nog sneller kunt beheren.

Gedeelde links, inclusief QR-code.

13 Clients

Een Seafile-server is pas nuttig als je over clients beschikt die daarmee kunnen samenwerken. Seafile biedt hiervoor verschillende apps, zowel desktop als mobiel, voor diverse besturingssystemen. We richten ons hier op de Windows-client, maar de werking van de verschillende clients is vergelijkbaar.

Start na installatie de app en kies een lokale hoofdmap voor je bewaren van je Seafile-bibliotheken. Meld je aan bij de Seafile-server met hostnaam of ip-adres, e-mail, wachtwoord en computernaam. Na het inloggen verschijnen de bibliotheken. Klik op Ja om de standaardbibliotheek direct te downloaden.

In het appvenster kun je via het contextmenu van een bibliotheek de optie Synchroniseer deze bibliotheek selecteren om de inhoud met je desktop te synchroniseren. Je kunt hiervoor ook een alternatieve map kiezen. Klik met rechts op de gesynchroniseerde bibliotheek voor opties als Set sync Interval en Uitschakelen auto sync.

Je kunt zo’n bibliotheek nu ook lokaal openen om bestanden en mappen toe te voegen of te verwijderen. De gewijzigde data worden daarna gesynchroniseerd met de cloud, zoals jij hebt ingesteld. Via het tandwielpictogram pas je nog allerlei andere instellingen aan, zoals eventuele download- en uploadlimieten, notificaties en taal.

Je bepaalt zelf of en hoe vaak je data worden gesynchroniseerd.