Ik probeer tegenwoordig zoveel mogelijk services om te zetten in Docker Containers. Het grote voordeel van Docker Containers is dat je op deze manier snel kunt switchen van machine en bovendien (door handig gebruik te maken van ‘volumes’ in je ‘docker-compose.yml’ file) je configuratie/data kunt scheiden van je software. Dit is handig want zo kun je hiervan eenvoudig een backup maken. Tijdens dit migratie proces heb ik een hoop geleerd en dat wil ik hier delen.
Volgen logging van een container
Om de logging van een container te volgen kun je gebruik maken van de Docker Container Dozzle. Je kunt ook gebruik maken van het ‘docker’ commando zelf met argument ‘logs’. Om bijvoorbeeld continue de logging van container ‘zigbee2mqtt’ te volgen gebruik je het volgende commando:
docker logs -f zigbee2mqtt
Hierbij is ‘zigbee2mqtt’ de naam van je container. Deze kun je vinden met het commando ‘docker ps’ en controleer dan de laatst kolom. Het argument ‘-f’ toont continue de logging.
Uitvoeren commando in Docker Container
Om een commando uit te voeren in een Docker Container kun je gebruik maken van het ‘exec’ argument. Zie ook de Docker documentatie. Om bijvoorbeeld in de shell van Docker container ‘zigbee2mqtt’ te komen gebruik je:
docker exec -it zigbee2mqtt sh
Indien je klaar bent dan ga je met ‘exit’ weer uit de shell.
Vergroten aantal netwerken in Docker
Als je te veel Docker Containers gebruikt dan kun je tegen netwerk beperkingen aanlopen met de default Docker configuratie. Je krijgt dan bij het starten van je nieuwe Docker Container de melding:
Error response from daemon: all predefined address pools have been fully subnetted
Dit kun je oplossen door de default-address pools aan te passen. Edit (of creëer) de file ‘/etc/docker/daemon.json’ en zet hierin de volgende inhoud:
{
"bip": "10.254.1.1/24",
"default-address-pools":[{"base":"10.254.0.0/16","size":28}]
}
Restart hierna de docker omgeving met het commando:
service docker restart
Tonen alle beschikbare tags van een container
Om alle ’tags’ van een container te vinden volg je de volgende stappen:
- Creëer file ‘docker_tags.sh’ met de volgende inhoud:
#!/usr/bin/env bash # Gets all tags for a given docker image. # Dependencies: curl, jq # Examples: # retrieve all tags for a single library # docker-tags "library/redis" # retrieve all tags for multiple libraries # docker-tags "library/mongo" "library/redis" token_uri="https://auth.docker.io/token" list_uri="https://registry-1.docker.io/v2/###IMAGE###/tags/list" images=($@) scope='' for image in "${images[@]}"; do scope+="scope=repository:${image}:pull&" done token=$( curl -Ss "${token_uri}?service=registry.docker.io&${scope}" | jq -r .token ) for image in "${images[@]}"; do this_uri=$( echo -n "${list_uri}" | sed -e "s^###IMAGE###^${image}^" ) curl -Ss -H "Accept: application/json" -H "Authorization: Bearer $token" "${this_uri}" | jq . done - Maak deze file uitvoerbaar met het commando:
chmod +x docker_tags.sh
- Voer deze uit met de image naam als argument. Bijvoorbeeld:
./docker_tags.sh koenkk/zigbee2mqtt
Als jij nog goede tips weet voor Docker dan hoor ik dat graag in de reacties onderaan dit artikel.