Pour supprimer tous les volumes docker orphelins:
docker run -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker:/var/lib/docker --rm martin/docker-cleanup-volumes
Conseil: lancer un dry-run avant et comparer avec la liste des volumes utilisés par des containers existants:
$ for d in $(docker ps -aq ); do docker inspect $d | awk -F\" '/Source/ {print $4}' | awk -F\/ '{print $6}'; done | sort > volumes-in-use
$ docker run -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker:/var/lib/docker --rm martin/docker-cleanup-volumes --dry-run | awk '/deleted/ {print $4}' | sort > volumes-not-used
$ comm -1 -2 volumes-in-use volumes-not-used
Nomad fourni des services de gestion de cluster et d'ordonnancement de jobs en environnement cloud. C'est fait par Hashicorp, la boite qui développe Vagrant, Terraform et plein d'autres outils sympa.
Un exemple d'utilisation de docker pour automatiser des tests unitaires et d'intégrations avec maven/jenkins et selenium
Un script qui permet de supprimer les layers intermédiaires d'une image docker.
2 cas d'utilisations:
- réduire la taille d'une image docker
- supprimer des fichiers confidentiels qui auraient pu être ajoutés dans les layers intermédiaires (ex: http://blog.cloud66.com/pulling-git-into-a-docker-image-without-leaving-ssh-keys-behind/)
http://blog.cloud66.com/pulling-git-into-a-docker-image-without-leaving-ssh-keys-behind/
lorsqu'on utilise Docker sur un serveur ouvert sur internet protégé par iptables, les règles iptables automatiquement ajoutées par docker peuvent créer un trou dans le firewall.
Une image docker qui permet de sauvegarder des containers dans s3.
exemple:
$ docker run --rm --env-file env.txt --volumes-from mysql --name dockup borja/dockup
$ cat env.txt
AWS_ACCESS_KEY_ID=<key_here>
AWS_SECRET_ACCESS_KEY=<secret_here>
AWS_DEFAULT_REGION=us-east-1
BACKUP_NAME=mysql
PATHS_TO_BACKUP=/etc/mysql /var/lib/mysql
S3_BUCKET_NAME=docker-backups.example.com
Une distrib Linux minimale qui se concentre sur la légèreté et la sécurité. L'image de base fait 8Mo (sans le kernel Linux) et peu faire une bonne base de départ pour des containers docker
Un retour d'experience sur l'utilisation de docker en prod chez Yelp
Howto pour utiliser le Docker Workflow Plugin de Jenkins.
Ce plugin permet à Jenkins de builder un container docker, de l'enregistrer dans un repo docker (Docker Registry) et de lancer ses tests sur le container.
Pour sauvegarder un data volume d'un container:
docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
Pour utiliser X11 dans un docker sur MacOS X:
brew install socat
brew cask install xquartz
open -a XQuartz
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
# in another window
# MyVBoxIP = VirtualBox IP with ifconfig vboxnet0
docker run -e DISPLAY=${MyVBoxIP}:0 jess/geary
Un "garbage colector" pour nettoyer automatiquement les conteneurs et images docker qui ne sont plus utilisés.
Docker permet maintenant de lier son compte DockerHub (qui est leur 'registry') à son compte github/bitbucket.
Un build+push docker peut être déclenché automatiquement en cas de nouveau push de code sur le repo source. Ils mettent également des webhooks à disposition.L'avantage de tout cela c'est bien sûr l'automatisation mais aussi la rapidité du push qui se fait dans le réseau interne (du moins pas chez nous) de DockerHub.
Une image docker pour jenkins
Utilisation de Docker sur MacOS X avec Docker Machine à la place de Boot2Docker.
L'install passe par Docker Toolbox mais on peut aussi utiliser brew:
brew cask install dockertoolbox
Un classement de tutos pour différents langages (ruby, python, ...) et outils (git, puppet, chef, aws ec2, ...)
Dans un contexte d'architecture microservices utilisant des containers et le concept ImmutableServer, l'utilisation d'un serveur d'application java (tomcat...) fournit uniquement le framework (servlets, ...) nécessaire à l'application java.
Les fonctionnalités de gestion des applications (plusieurs applis dans la même JVM, déploiement à chaud, ...) sont en effet directement gérées au niveau containers (1 applis = 1 JVM = 1 container, déploiement d'un nouveau container en cas de mise à jour de l'applis).
En fin d'article, il est également question de SpringBoot (http://projects.spring.io/spring-boot/) et CamelBoot (https://camel.apache.org/camel-boot) qui permettent de démarrer directement une JVM avec son framework sans toute la lourdeur du serveur d'application.
Exemple de déploiement automatique d'une application avec docker, chef et amazon opswork.
Une webapp javascript pour avoir un shell sur son serveur depuis le navigateur chrome.
Utile quand on doit accéder à son serveur depuis un endroit ou le SSH est bloqué.
J'ai utilisé l'image docker fournie par le projet avec un nginx en front + ssl + authentification.
Ça marche nickel et ça me donne enfin une raison de jouer avec docker.
Attention cette webapp ne marche qu'avec Chrome (KO sur Firefox)
Pour sauvegarder les changement effectués dans un container:
- docker commit : créé une nouvelle image à partir du container qui tourne dans le repository docker local
- docker export : exporte le container qui tourne dans un tarfile
- docker save : sauvegarde l'image du repository docker local dans un tarfile
quelques subtilités à retenir