Articles avec #docker tag

Publié le 24 Janvier 2017

Dans la version 1.13.0 de Docker j'ai rencontré des problèmes de DNS avec des adresses qui parfois ne pouvaient être résolues (environ une fois sur deux par moment).

Pour éviter ce problème j'ai simplement changé le DNS utilisé par le docker daemon.

Sous linux il faut éditer le fichier /etc/docker/daemon.json. Sur OS X si vous utilisez docker native il suffit de se rendre dans Préfèrences / Daemon / Advanced tab.

Ensuite il faut ajouter la configuration des DNS, par exemple:

{
   "dns": ["8.8.8.8", "8.8.4.4"]
}

Puis il faut redémarrer le docker daemon, directement depuis l'interface de docker native sous mac, ou avec la commande suivante sous linux:

sudo service docker restart

Pour moi ça a suffit à résoudre les erreurs de résolutions d'adresses.

Voir les commentaires

Rédigé par Bliz

Publié dans #docker

Repost 0

Publié le 26 Septembre 2016

Il peut être intéressant de limiter les nombres de cores CPU disponible pour un conteneur.

Par exemple on peut vouloir n'utiliser qu'un seul core pour les conteneurs docker de façon à laisser assez de CPU disponible pour l'hôte.

docker permet de préciser les cores CPU utilisable par un conteneur grâce à l'option --cpus-set.

Cette option accept soit une liste de nombres et/ou d'intervalles.

Par exemple

--cpus-set 0 # CPU 0
--cpus-set 0-3 # CPU 0, 1, 2 et 3
--cpus-set 0,2-4 # CPU 0, 2, 3 et 4

et dans une commande docker run ça donne quelque chose comme:

docker run --cpus-set 0 <image> <commande>

Voir les commentaires

Rédigé par Bliz

Publié dans #docker

Repost 0

Publié le 19 Septembre 2016

Si vous utilisez docker vous avez surement remarqué que l'espace disque utilisé augmente rapidement. Voici quelques règles pour économiser un peu de place sur votre disque.

Supprimer les volumes associés à un conteneur

Lorsqu'on supprime un conteneur penser à utiliser l'option -v qui permet de supprimer les volumes associés à un conteneur.

Pour supprimer tous les conteneurs qui ne tournent pas on peut utiliser la commande suivante:

docker rm -v $(docker ps -aqf status=exited)

Recréé un conteneur est assez rapide du moment que son image est disponible. Ce qui nous amène vers le nettoyage des images inutiles.

Supprimer les images inutiles

J'appelle image "inutile" une image "intermédiaire" qui sert dans la construction d'une image "finale" et qui n'est donc jamais utilisé pour créer un conteneur.

On peut supprimer ces images avec la commande suivante:

docker rmi $(docker images -qf dangling=true)

Souvent indispensable après un docker pull.

Supprimer les volumes orphelins

Un volume orphelin est un volume pour lequel son conteneur associé a été supprimé sans l'option -v. Pour supprimer ces volumes on a la commande suivante:

docker volume rm $(docker volume ls -qf dangling=true)

Voir les commentaires

Rédigé par Bliz

Publié dans #docker

Repost 0

Publié le 14 Juillet 2016

Pour accéder un répertoire local depuis un conteneur docker il faut le monter en temps que volume docker. C'est l'équivalent des "shared folders" de Virtual box.

La définition d'un volume s'effectue avec l'option -v de manière similaire au mapping des ports.

Par exemple pour accéder à son répertoire "home" depuis docker on utilisera la commande suivante:

docker run -it -v $HOME:/shared ubuntu /bin/bash

L'option -v précise que le répertoire /shared à l'intérieur du conteneur docker correspond au $HOME de l'utilisateur hôte.

Voir les commentaires

Rédigé par Bliz

Publié dans #docker

Repost 0

Publié le 12 Juillet 2016

En gros un docker registry est une bibliothèques d'images docker. Il y a docker hub qui est le docker registry officiel de docker mais la plupart des entreprises avec qui je travaille utilise leur propre docker registry.

En fait il est assez simple de mettre en place en tel registry en utilisant docker bien sûr et l'image registry:

docker run -d -p 5000:5000 -v $HOME/registry:/var/lib/registry registry

Comme ce registry n'est pas sécurisé (pas de docker login nécessaire pour y accéder) il faut redémarrer le daemon docker avec l'option --insecure-registry HOSTNAME.

Ensuite on peut faire des push/pull sur ce registry:

docker push HOSTNAME:5000/image:tag

docker pull HOSTNAME:5000/image:tag

Voir les commentaires

Rédigé par Bliz

Publié dans #docker

Repost 0

Publié le 12 Juillet 2016

L'option -p de docker run permet de mapper le port d'un conteneur vers un port de l'hôte. Par exemple pour accéder un service web on utilisera docker run -p 9000:80 ... pour mapper le port 80 du conteneur vers le port 9000 de l'hôte.

Il peut y avoir des services pour lesquels il n'est pas nécessaire d'exposer un port externe. Par contre un autre conteneur docker peut y avoir accès. Par exemple un service web peut avoir besoin d'accéder une base de données mais il n'y a pas de raison de rendre la base de données accessible en dehors de docker.

Dans ce cas on dit qu'on lit le service web à la base données avec l'option --link.

Pour démarrer la base de données on utilisera:

docker run --name mysql_wp -e MYSQL_ROOT_PASSWORD=**** -d mysql

Une fois le conteneur démarrer un peut démarrer le service web (ici wordpress) avec

docker run --name ws --link ws_mysql:mysql -p9000:80 -d wordpress

Voir les commentaires

Rédigé par Bliz

Publié dans #docker

Repost 0

Publié le 8 Juillet 2016

Tout simplement avec la commande

docker logs mon_conteneur

C'est particulièrement utile lorsqu'on démarre le conteneur en arrière-plan avec l'option -d car la sortie standard n'apparait pas dans le terminal.

Voir les commentaires

Rédigé par Bliz

Publié dans #docker

Repost 0

Publié le 8 Juillet 2016

On peut démarrer un conteneur docker en tant que daemon ce qui est plus pratique que d'embarquer la commande dans un nohup.

docker run -d -i -p 7000:7000 ubuntu:trusty netcat -l 7000

Ici c'est l'option -d qui permet de lancer le conteneur en tant que daemon.

-p permet de préciser le mapping des ports (host:container).

-i active le mode interactif (qui permet de garder l'entrée standard ouverte)

ubuntu:trusty est le nom de l'image à utiliser (ubuntu:latest n'inclut plus la commande netcat)

nc -l 7000 lance netcat en écoute sur le port 7000.

Voir les commentaires

Rédigé par Bliz

Publié dans #docker

Repost 0

Publié le 8 Juillet 2016

Par défaut pour des raisons de sécurité le daemon docker n'est accessible que localement.

Il utilise une socket unix locale mais on peut demander à utiliser une socket tcp accessible à distance.

Cela s'effectue avec l'option -H lorsqu'on redémarre le daemon docker:

docker daemon -H tcp://0.0.0.0:2375

Attention ici on utilise l'adresse 0.0.0.0 qui signifie simplement que n'import qui peut se connecter mais on peut préciser une adresse donnée pour limiter l'accès.

Voir les commentaires

Rédigé par Bliz

Publié dans #docker

Repost 0

Publié le 7 Juillet 2016

J'utilise un docker registry privé sur lequel les développeurs pousse régulièrement de nouvelles images.

Il faut donc régulièrement mettre à jour les images locales que nous utilisons et quand on commence à avoir beaucoup d'images cela devient vide fastidieux.

Heureusement on peut effectuer cela en une seule ligne

for image in $(docker ps -a | awk '{ if (NR != 1) print $2 }'); do docker pull $image; done

Voilà pour la commande et maintenant son explication:

On récupère la liste de toutes les images avec docker ps -a ensuite on récupère uniquement la deuxième colonne à l'aide de awk (le if permet d'éviter la première ligne qui contient l'entête).

Enfin on utilise une boucle for classique pour executer docker pull avec chaque image.

Voir les commentaires

Rédigé par Bliz

Publié dans #docker

Repost 0