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
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
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.
Ce Dockerfile peut donc servir de base afin de rapidement créer une image Tomcat embarquant un servlet.
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
#!/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
#!/bin/bash
/usr/local/sbin/start-master.sh --properties-file /spark-defaults.conf
/bin/bash
#!/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
docker run -d -t -p 8080:8080 --name spark_master spark /start-master.sh
docker run -d -t --link spark_master:spark_master spark /start-worker.sh
docker run -i -t --link spark_master:spark_master spark /spark-shell.sh
-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