Archives de catégorie : Docker

Docker – changer les ip par défaut

Docker c’est bien mais il se met bien à l’ aise sur la machine où il se situe. J’entends par là qu’il se créé son interface docker0 avec son range d’ip 172.17.0.0. Mais parfois on veut un peu plus contrôler le scope d’ip de docker car il peut entrer en concurrence avec une ip d’un réseau interne.

Vous pouvez retrouver le bridge docker0 de différente manière :

route -n
docker network inspect
iptables -L

Mais docker est prévoyant et il est tout à fait possbile de paramétrer les ip que docker utilise pour son bridge docker0.

Pour celà c’est très simple, il suffit d’éditer ou créer un fichier /etc/docker/daemon.json de la manière suivante :

{
"bip": "192.168.1.1/24"
}

Dans notre cas docker0 utilisera un /24 sur 192.168.x.x.

Une fois ce fichier modifié, lancez :

systemctl daemon-reload
service docker restart

Vérifiez ensuite le changement du scope de docker0 :

ip a

Si l’interface docker0 est monté deux fois vous pouvez supprimer celle inactive grâce à cette commande :

ip link del docker0

[Docker] : Comment prendre en compte un proxy pour puller/pusher et comment le passer dans un conteneur ?

 

Docker, c’est un sujet que j’ai l’occasion de creuser un peu en ce moment. Les pros de docker comme les devops savent faire cela les doigts dans le nez mais pour les débutants c’est un petit moment de recherche.

Lorsque l’on parle de docker et de proxy, deux questions reviennent souvent :

  • Comment prendre en compte un proxy sur la machine host pour puller/pusher des images ?
  • Comment faire pour que mon conteneur utilise un proxy ?

1. Utilisation d’un proxy sur la machine host de docker

Pour prendre en compte un proxy et éviter d’y revenir, il est nécessaire d’éditer la configuration de docker. Ainsi, comme si vous paramétiez votre proxy pour une utilisation par apt, vous allez vous rendre dans /etc/systemd/system/docker.service.d/ et créer un fichier de conf.

Par exemple, nous allons créer un fichier intitulé https-proxy.conf. Et nous allons ajouter dedans l’adresse de notre proxy en variable d’environnement (pour le service docker donc) :

[Service]
Environment="HTTPS_PROXY=http://monproxy:sonport"

Une fois ceci réalisé, le premier réflexe est de redémarrer le service docker… C’est pas faux mais dans notre cas on vient de modifier la conf de docker au niveau de systemd. donc il faut tout d’abord redémarrer le démond :

systemctl daemon-reload
service docker restart

Et voilà pour la première partie, vous pouvez utiliser votre proxy avec docker pour faire des pull et des push vers votre repository (dockerhub ou autre). Mais attention si vous être sur votre laptop, il se peut que vous ayez besoin de switcher (avec ou sans proxy), je vous invite donc à faire les fonctions qui vont bien ou alias pour vous faciliter la vie. L’idée c’est d’utiliser :

echo "Environment=\"HTTP_PROXY=http://monproxy:monport\"" | 
sudo tee --append /etc/systemd/system/docker.service.d/http-proxy.conf

2. Passer la conf de votre proxy dans un conteneur

C’est indispensable si vous êtes derrière un proxy sinon pas d’update ou d’installation possible sur le conteneur.

Et là docker est tout simplement génial car il permet de passer des variables d’environnement dans le conteneur à son lancement (son run). Remarque : si cela est plus durable vous pouvez faire cela directement dans votre Dockerfile.

Comment passer votre variable de proxy ? comme ceci :

docker run -tid -e http_proxy="http://monproxymonport" 
--name nom_conteneur nom_image

Et le tour est joué. Vous pouvez aussi passer un serveur dns avec –dns= »monipdns ».

Si vous voulez que votre image contienne toujours cette variable, vous devez la builder avec cette variable. Là encore c’est pas compliqué à ajouter dans le dockerfile :

ENV http_proxy="http://monproxymonport"

Vous pouvez consulter ce bon article sur les variables docker.

[Docker] : mettre à jour toutes les images en une seule ligne de commande

Potentiellement, un serveur docker peut faire appel à de nombreuses images. Il arrive un moment où on peut être intéressé pour faire une mise à jour globale de ces images. Pourquoi pas automatiser cela si les images ne sont pas risquées en terme de modification ?

Cette commande est donc à lancer avec des pincettes et lorsque l’on a bien conscience de ce que l’on fait (ça vaut toujours le coup de le rappeler).

docker images | grep -v REPOSITORY | awk '{print $1}' | xargs -L1 docker pull

Donc :

  • on liste les images
  • on vire la première ligne avec un grep
  • on garde la première colonne avec un awk
  • on utilise xargs pour passer un docker pull sur les noms des images.vignette_docker

[docker] : copier un fichier de votre host vers un container avec tar

Docker est quand même très pratique. Les commandes sont pensées avec simplicité.  Là par exemple nous allons voir comment très simplement passer un fichier où le contenu d’un tar directement du serveur qui porte docker vers le conteneur.

En fait c’est ultra simple :

docker cp /chemin/source +nom_conteneur+:/conteneur/chemin/

C’est donc comme si on passait un bon vieux cp c’est fou ça ?

Et l’inverse est vrai :

docker cp :/conteneur/chemin/ /chemin/source

Alors avec un tar comment faire ?

tar -cv * | docker exec -i +conteneur+ tar x -C /var/www>

Donc :

  • tar -cv : on créé une archive en mode verbose
  • on exécute un tar dans le conteneur
  • on extrait l’archive (x)

Et vous, comment faites vous pour faire ce genre de copie de fichier ?