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.