Vous aimez Docker, mais vous l’utilisez au sein de votre entreprise derrière un proxy corporate ou vous avez un problème de décalage horaire. Voici 2 petites astuces à utiliser dans votre Dockerfile
Configurer le proxy dans le Dockerfile
Vous pouvez facilement configurer vos containers pour utiliser votre proxy.
Ajouter ceci dans votre Dockerfile
ENV http_proxy http://<VOTRE_SERVEUR_PROXY>:8000 ENV https_proxy http://<VOTRE_SERVEUR_PROXY>:8000 ENV no_proxy localhost,127.0.0.1,.sock #Proxy use for apt-get update RUN echo 'Acquire::http { Proxy "http://<VOTRE_SERVEUR_PROXY>:8000"; };' >> /etc/apt/apt.conf.d/01proxy RUN echo 'Acquire::https { Proxy "http://<VOTRE_SERVEUR_PROXY>:8000"; };' >> /etc/apt/apt.conf.d/01proxy
Gérer la timezone
Si vos containers ont un décalage horaire d’une heure, c’est qu’il ne sont pas configuré sur le bon fuseau horaire.
Pour le faire, ajouter au Dockerfile la commande suivante:
#Problème de timezone ENV TZ Europe/Paris RUN cp /usr/share/zoneinfo/Europe/Paris /etc/localtime
Créer une image de base
Pour gérer vos images au sein de votre entreprise ou même pour vos besoins personnels, le plus simple est de créer une image de base qui va servir à toute les autres.
Vous évitez ainsi de ré-écrire la même chose dans plusieurs Dockerfile, et en plus, vous profiterez du système de cache de Docker. La construction de vos images sera ainsi plus rapide surtout si vous utiliser les mêmes outils/librairies dans tous vos containers.
FROM debian:wheezy MAINTAINER w3blogfr #Gestion du proxy #Corporate Proxy ENV http_proxy http://<VOTRE_SERVEUR_PROXY>:8000 ENV https_proxy http://<VOTRE_SERVEUR_PROXY>:8000 ENV no_proxy localhost,127.0.0.1,.sock RUN echo 'Acquire::http { Proxy "http://<VOTRE_SERVEUR_PROXY>:8000"; };' >> /etc/apt/apt.conf.d/01proxy RUN echo 'Acquire::https { Proxy "http://<VOTRE_SERVEUR_PROXY>:8000"; };' >> /etc/apt/apt.conf.d/01proxy #Problème de timezone #Timezone fix ENV TZ Europe/Paris RUN cp /usr/share/zoneinfo/Europe/Paris /etc/localtime # Installation de quelques outils qui seront utilisé dans tous vos docker # Instal software very usefull for all others Docker RUN apt-get update && \ apt-get install -y curl git wget unzip build-essential software-properties-common && \ rm -rf /var/lib/apt/lists/*
Pour compiler
docker build -t ma-base .
Cette image n’étant construire que la première fois, elle sert ensuite de base aux autres images que vous allez construire. Docker utilisera son mécanisme de cache pour ne pas ré-executer cette partie.
Voici un exemple d’une image qui utilisera votre base. L’exemple créer un container avec Java.
# Pull base image. FROM ma-base #execution du code spécifique à chaque container # Exemple here with Java Install. RUN \ echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \ add-apt-repository -y ppa:webupd8team/java && \ apt-get update && \ apt-get install -y oracle-java8-installer && \ rm -rf /var/lib/apt/lists/* && \ rm -rf /var/cache/oracle-jdk8-installer
A quoi sert précisément
ENV TZ Europe/Paris
vu qu’il n’est pas utilisé dans la suite de l’exemple ?
Ici, il sert à déclarer une variable d’environnement Linux qui sera définit pour chaque container lancé de cette image.
C’est l’équivalent Linux de
export MY_VAR=toto