5 Septembre 2016

Mise en place d’un environement de travail Docker

Mise en place d’une machine virtuelle CoreOS avec Virtualbox. Cela permet d’avoir un environement plus neutre que si on avais installé docker directement sur la machine.

La documentation utilisée est disponible ici

Création d’une image Docker avec Tomcat

1. Ressources utilisées

Image tomcat officielle

2. Création d’un Dockerfile

FROM tomcat

MAINTAINER "Paul TREHIOU <paul.trehiou@gmail.com>"

ADD settings.xml /usr/local/tomcat/conf/  
ADD tomcat-users.xml /usr/local/tomcat/conf/  
ADD sample.war /usr/local/tomcat/webapps/  

Ce fichier va créer une image en se basant sur l’image officielle tomcat récupérée sur le site Docker Hub

Ensuite les deux fichiers de configuration y sont insérés ainsi qu’un servlet d’exemple

Pour compiler l’image la syntaxe est la suivante :

docker build -t example-tomcat-app .

Cette commande fonctionne si le Dockerfile se trouve dans le dossier actif. Sinon il faut remplacer le point par l’emplacement de celui ci.

Il en résulte une image Docker que l’on peut démarer en créant un container

3. Lancement du container

On peut utiliser la ligne de commande pour directement créer un container basé sur l’image et le lancer :

docker run --rm -p 8080:8080 example-tomcat-app

Cette commande met en place une redirection du port par défaut de tomcat (8080) afin de pouvoir y accéder depuis un navigateur sur la machine hôte. Il est possible de modifier le port exposé en modifiant la première partie du paramètre (par exemple 8888:8080 le port exposé est le 8888 et permet toujours d’accéder a Tomcat.

4. Conclusion

Ce Dockerfile peut donc servir de base afin de rapidement créer une image Tomcat embarquant un servlet.

Création d’une image Docker avec Spark

1.Création d’un Dockerfile

FROM java

MAINTAINER "Paul TREHIOU <paul.trehiou@gmail.com>"

RUN cd /usr/local && curl http://d3kbcqa49mib13.cloudfront.net/spark-2.0.0-bin-hadoop2.7.tgz | tar zx --strip-components=1

ADD scripts/start-master.sh /start-master.sh
ADD scripts/start-worker.sh /start-worker.sh
ADD scripts/spark-defaults.conf /spark-defaults.conf
ADD scripts/spark-shell.sh /spark-shell.sh
ADD scripts/remove_alias.sh /remove_alias.sh

ENV SPARK_HOME /usr/local/

ENV SPARK_MASTER_OPTS="-Dspark.driver.port=7001 -Dspark.fileserver.port=7002 -Dspark.broadcast.port=7003 -Dspark.replClassServer.port=7004 -Dspark.blockManager.port=7005 -Dspark.executor.port=7006 -Dspark.ui.port=4040 -Dspark.broadcast.factory=org.apache.spark.broadcast.HttpBroadcastFactory"
ENV SPARK_WORKER_OPTS="-Dspark.driver.port=7001 -Dspark.fileserver.port=7002 -Dspark.broadcast.port=7003 -Dspark.replClassServer.port=7004 -Dspark.blockManager.port=7005 -Dspark.executor.port=7006 -Dspark.ui.port=4040 -Dspark.broadcast.factory=org.apache.spark.broadcast.HttpBroadcastFactory"

ENV SPARK_MASTER_PORT 7077
ENV SPARK_MASTER_WEBUI_PORT 8080
ENV SPARK_WORKER_PORT 8888
ENV SPARK_WORKER_WEBUI_PORT 8081

EXPOSE 8080 7077 8888 8081 4040 7001 7002 7003 7004 7005 7006

L’image de départ est l’image java officielle dans laquelle on télécharge puis on extrait l’archive contenant les binaires de spark

Des scripts permettent ensuite d’utiliser cette image soit comme maitre, comme esclave ou bien comme shell connecté au maitre

start-worker.sh

#!/bin/bash

/usr/local/bin/spark-class org.apache.spark.deploy.worker.Worker spark://${SPARK_MASTER_PORT_7077_TCP_ADDR}:${SPARK_MASTER_ENV_SPARK_MASTER_PORT} --properties-file /spark-defaults.conf

/bin/bash

start-master.sh

#!/bin/bash

/usr/local/sbin/start-master.sh --properties-file /spark-defaults.conf

/bin/bash

spark-shell.sh

#!/bin/bash

/usr/local/bin/spark-shell --master spark://${SPARK_MASTER_PORT_7077_TCP_ADDR}:${SPARK_MASTER_ENV_SPARK_MASTER_PORT} --properties-file /spark-defaults.conf

2. Utilisation du container

Pour démarrer un Master :

docker run -d -t -p 8080:8080 --name spark_master spark /start-master.sh

Pour démarer un worker :

docker run -d -t --link spark_master:spark_master spark /start-worker.sh

Pour se connecter avec un shell sur ce master :

docker run -i -t --link spark_master:spark_master spark /spark-shell.sh

Explications

-d lancement en daemon

-t attache un TTY

-p 8080:8080 redirige le port 8080 (interface web) du maitre vers l’extérieur afin de pouvoir y accéder