Docker‑daemon globale instellingen voor een uniforme ontwikkelomgeving
Of je nu lokaal of op een server werkt, je zult vaak dezelfde configuratie in je docker-compose.yml kopiëren en plakken.
- DNS altijd op
1.1.1.1,8.8.8.8 - Log‑driver vastzetten op
json-file+max-size=10m - Proxy, insecure registry, standaard netwerk‑bereik, enz.
Deze zaken zijn niet per container, maar host‑breed te beheren. Dat is precies wat de Docker‑daemon globale instellingen (daemon.json) doen.
Hieronder:
- Welke bestanden
- Waar je ze plaatst
- Hoe je ze schrijft
- Voor wie en wanneer ze nuttig zijn
1. Twee manieren om de Docker‑daemon te configureren
De Docker‑daemon (dockerd) kan op twee manieren worden ingesteld.
- JSON‑configuratiebestand (
daemon.json) ← aanbevolen - CLI‑flags bij het starten van
dockerd
Je kunt beide combineren, maar als je dezelfde optie in beide plaatsen definieert, stopt de daemon. Bijvoorbeeld, als je --log-driver zowel als flag als in daemon.json gebruikt, zal Docker een fout geven en niet opstarten.
Voor een uniforme team‑/server‑omgeving raden we aan:
“Verzamel zoveel mogelijk opties in
daemon.jsonen houd de flags minimaal.”
2. Locatie van daemon.json
De standaardlocatie varieert per OS en installatie‑methode. Hieronder een overzichtstabel:
| Omgeving | Standaardpad | Opmerking |
|---|---|---|
| Linux (standaardinstallatie) | /etc/docker/daemon.json |
Meest voorkomende locatie |
| Linux (snap‑installatie) | /var/snap/docker/current/config/daemon.json |
Ubuntu snap‑pakket |
| Windows Server / Docker Engine | C:\ProgramData\Docker\config\daemon.json |
Mogelijk vereist beheerdersrechten |
| Docker Desktop (Mac / Windows) | ~/.docker/daemon.json |
Interne locatie van de Desktop‑instellingen |
- Het bestand bestaat niet altijd; maak het aan als het ontbreekt.
- Voor team‑/server‑standaarden gebruiken we meestal de Linux‑server‑locatie
/etc/docker/daemon.json.
3. Standaardpatroon: “bestand maken → daemon herstarten”
De meest voorkomende workflow op Linux is als volgt.
daemon.jsonschrijven/bijwerken
{
"dns": ["1.1.1.1", "8.8.8.8"],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
- Valideer het configuratiebestand
sudo dockerd --validate --config-file=/etc/docker/daemon.json
# Als je "configuration OK" ziet, is alles in orde
- Docker‑daemon herstarten
sudo systemctl restart docker
Vanaf nu ervaart elke nieuwe container de globale instellingen als standaardwaarden.
4. Voorbeeld 1 – DNS‑servers globaal vastzetten
4.1 Waarom DNS globaal?
Als containers vaak problemen melden zoals "externe API niet gevonden" of "interne domeinen niet resolvable", ligt het meestal aan de DNS‑configuratie van de host.
Voorbeeld:
- Het hele team wil Cloudflare DNS (
1.1.1.1) gebruiken - Er zijn interne DNS‑servers die alleen via het bedrijfsnetwerk bereikbaar zijn
In plaats van dns: per project in docker-compose.yml te zetten, kun je dit op daemon‑niveau uniform maken.
4.2 Configuratievoorbeeld (daemon.json)
{
"dns": ["1.1.1.1", "8.8.8.8"]
}
Als er al een daemon.json bestaat, voeg je het "dns": [...]‑element toe binnen het hoofdelement { ... } (let op de komma’s).
⚠️ Let op: DNS‑instellingen worden in
/etc/resolv.confbinnen de container weerspiegeld. Bestaande containers worden niet meteen bijgewerkt; alleen nieuwe containers krijgen de nieuwe DNS‑instellingen.
4.3 Wie profiteert?
- Ontwikkelaars in een bedrijf met proxy of interne DNS
- Platform‑teams die in een multi‑cloud‑omgeving een specifieke DNS moeten afdwingen
- Persoonlijke ontwikkelaars die meerdere VPN‑verbindingen wisselen
5. Voorbeeld 2 – Log‑driver & opties globaal instellen
Container‑logs worden standaard opgeslagen met de json-file driver in /var/lib/docker/containers/.... Door dit globaal te wijzigen kun je:
- Log‑formaat
- Opslaglocatie
- Rotatiebeleid
5.1 Standaard json-file driver + rotatie
Een veelgebruikt patroon is het gebruik van json-file met een rotatie‑beleid om schijfruimte te besparen.
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "5"
}
}
Dit zorgt ervoor dat:
- Elke containerlog maximaal 10 MB is
- Er maximaal 5 log‑bestanden worden bewaard
- Overbodige logs worden automatisch verwijderd
5.2 Centrale log‑verzamelings‑driver (fluentd, journald, etc.)
Platform‑teams of infra‑teams willen vaak alle container‑logs naar een centrale log‑verzamelaar sturen.
Voorbeeld met Fluentd:
{
"log-driver": "fluentd",
"log-opts": {
"fluentd-address": "localhost:24224",
"tag": "{{.Name}}"
}
}
Met deze instelling worden alle container‑logs automatisch naar Fluentd gestuurd, zonder docker run --log-driver=... per container.
Een andere populaire keuze is de journald driver. In een systemd‑gebaseerde Linux‑omgeving kun je hiermee Docker‑logs en applicatielogs in één plek beheren.
{
"log-driver": "journald",
"log-opts": {
"tag": "{{.Name}}"
}
}
Met tag op de containernaam kun je eenvoudig:
journalctl -f | grep {container_name}voor realtime logsjournalctl --since "10m ago"voor logs na een bepaald tijdstipjournalctl -f -t {container_name}voor alleen de logs van een specifieke container
5.3 Relatie met Compose / docker run
- Globale
log-driver+log-optsfungeren als standaardwaarden. - Als je in Compose
logging:of indocker run--log-driver/--log-optspecificeert, wordt alleen die container overschreven.
Strategie: zet algemene waarden in daemon.json en laat uitzonderlijke services hun eigen log‑instellingen overschrijven.
6. Voorbeeld 3 – Proxy, insecure registry en andere globale netwerk‑instellingen
6.1 Proxy‑instellingen
Als je alleen via een bedrijfsproxy toegang hebt tot het internet, kun je de proxy op daemon‑niveau instellen in plaats van telkens omgevingsvariabelen te definiëren.
{
"proxies": {
"http-proxy": "http://proxy.example.com:3128",
"https-proxy": "http://proxy.example.com:3128",
"no-proxy": "localhost,127.0.0.1,.corp.example.com"
}
}
Docker gebruikt deze proxy bij het ophalen van images en tijdens builds.
6.2 Insecure registry
Voor een TLS‑vrije registry (bijv. interne test‑registry) kun je:
{
"insecure-registries": ["my-registry.local:5000"]
}
Gebruik dit alleen in een interne testomgeving vanwege veiligheidsrisico’s.
7. Voorbeeld 4 – Standaard netwerk‑bereik, storage‑driver, enz.
7.1 Standaard bridge‑netwerk‑bereik aanpassen
Om IP‑conflicten met VPN of bedrijfsnetwerken te voorkomen:
{
"default-address-pools": [
{
"base": "10.20.0.0/16",
"size": 24
}
]
}
Docker gebruikt dan 10.20.x.0/24 voor nieuwe bridge‑netwerken.
7.2 Storage‑driver afdwingen
Afhankelijk van je Linux‑distributie kan de standaard storage‑driver verschillen. Als je team alleen overlay2 wil gebruiken:
{
"storage-driver": "overlay2"
}
Controleer altijd de ondersteunde drivers voor je OS en kernel via de Docker‑documentatie.
8. Wanneer en voor wie is dit vooral nuttig?
8.1 Persoonlijke ontwikkelaars
- Werken met meerdere side‑projects met dezelfde Docker‑opties
- Frequent wisselen tussen VPN of bedrijfsproxy
- Moeite hebben met log‑ en schijfruimtebeheer op lokale machines
→ Eén daemon.json zorgt voor een uniforme omgeving en elimineert herhaalde configuratie.
8.2 Kleine/medium teams
- Teamleden hebben verschillende lokale Docker‑instellingen, waardoor “werkt op mijn machine” vaak voorkomt
- CI‑servers en lokale ontwikkelomgevingen moeten zo veel mogelijk gelijk zijn
- Bedrijfs‑standaard DNS, proxy en registry afdwingen
→ Definieer een team‑policy in daemon.json en distribueer het via Ansible, Chef, Terraform of Cloud‑Init.
8.3 Platform‑teams / DevOps / SRE
- Beheren tientallen of honderden containers op een node
- Log‑, storage‑ en netwerk‑beleid consistent moeten zijn
- Log‑verzameling, monitoring en beveiligingsregels moeten host‑breed gestandaardiseerd zijn
→ daemon.json fungeert als het beleid‑bestand voor een Docker‑node.
9. Debug‑tips
- Flags en dubbele configuratie
- Controleer of de systemd‑unit (
/lib/systemd/system/docker.service) al een--log-driverof andere flag bevat. - Duplicatie tussen flag endaemon.jsonleidt tot daemon‑fouten. - Docker Desktop
- De GUI heeft prioriteit; wijzigingen via de UI schrijven naar
~/.docker/daemon.json. - Als je handmatig het bestand wijzigt, kan de UI het overschrijven. Houd één bron van waarheid.
Samenvatting
- De globale standaardwaarden van Docker worden beheerd via
daemon.json. - Locaties:
- Linux:
/etc/docker/daemon.json - Windows:
C:\ProgramData\Docker\config\daemon.json - Docker Desktop:
~/.docker/daemon.json - Typische globale instellingen:
- DNS:
"dns": ["1.1.1.1", "8.8.8.8"] - Log‑driver:
"log-driver": "json-file","log-opts": {...} - Proxy, insecure registry, standaard netwerk‑bereik, storage‑driver, enz.
- Globale instellingen bieden gemak voor individuele ontwikkelaars en standaardisatie voor teams en platform‑teams.
- Als je dezelfde opties steeds in
docker-compose.ymlofdocker runherhaalt, overweeg dan om ze naardaemon.jsonte verplaatsen.

댓글이 없습니다.