Proxy et Timezone pour votre Dockerfile

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