Estuve scripteando un poquito, e hice que eclipse corra en un container de docker (base, ubuntu:trusty), con las cosas que necesito para desarrollar sandro
Primero hice un dockerfile bastante trivial:
FROM ubuntu:trusty
RUN apt-get update && apt-get install -y \
git \
mercurial \
default-jdk
con su correspondiente .dockerignore
dockerfile
.dockerignore
en un directorio que nombré docker
Después hice una imagen con ese container (a la que llamé, sandro:base).
$ docker build -t sandro:base docker
Y después vino la parte complicada.
Decidí correr el eclipse en volumenes afuera del container, con la idea de que quizás sea una buena idea inyectarlo en muchos distintos y poder instalar fácilmente plug-ins y esas cosas y que siga andando todo cuando haga otros containers. Para eso hice 4 directorios:
- eclipse: donde puse un eclipse luna
- workspace: donde va el workspace del eclipse
- devel: donde pongo todo mi código
- apache-tomcat-7.0.62: acá puse un tomcat bajado de apache.org
Usando esa estructura hice 2 scripts:
- dev.sh corre cualquier programa en un container nuevo, setupeando todo para tener un ambiente razonable para laburar.
- eclipse.sh arranca eclipse usando dev.sh
Primero les muestro
eclipse.sh
#!/usr/bin/env bash
./dev.sh $1 eclipse/eclipse -data /workspace
Le pasás por parámetro la imagen que querés usar para arrancarlo, y usa como workspace el directorio workspace que les conté más arriba.
Y ahora, la posta.
dev.sh
#!/usr/bin/env bash
xhost +SI:localuser:root
ID=$( docker run \
-d --name sandro-dev -h sandro-dev \
-e SSH_AUTH_SOCK=$SSH_AUTH_SOCK -v $(dirname $SSH_AUTH_SOCK):$(dirname $SSH_AUTH_SOCK) \
-e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix \
-e GIT_SSH=/usr/bin/ssh \
-v `pwd`/devel:/devel -v `pwd`/eclipse:/eclipse -v `pwd`/workspace:/workspace -v `pwd`/apache-tomcat-7.0.62:/tomcat \
-p 127.0.0.1:8080:8080 \
$@ )
docker wait $ID
docker rm $ID
Mejor voy línea por línea porque es un bardo
- xhost +SI:localuser:root habilita al container a poner aplicaciones en la GUI (las apps de los containers corren como root).
- ID=$( docker run \ arranco el container y guardo su id
- -d --name sandro-dev -h sandro-dev \ hace que el container corra desattacheado y setea nombre y hostname a sandro-dev para hacerme la vida más fácil
- -e SSH_AUTH_SOCK=$SSH_AUTH_SOCK -v $(dirname $SSH_AUTH_SOCK):$(dirname $SSH_AUTH_SOCK) \ setupea el forwardeo del agente de ssh. Puede resultar útil si quieren pushear código vía ssh sin usar passwords
- -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix \ Comparte el display del desktop con el container
- -e GIT_SSH=/usr/bin/ssh \ para que si usan eclipse con git use el agente de ssh
- -v `pwd`/devel:/devel -v `pwd`/eclipse:/eclipse -v `pwd`/workspace:/workspace -v `pwd`/apache-tomcat-7.0.62:/tomcat \ monta todos los directorios que quedan afuera del container
- -p 127.0.0.1:8080:8080 \ forwardea el puerto 8080 (donde va a correr el tomcat de desarrollo) a localhost. Lo bindeo a 127.0.0.1 para que no se puedan conectar desde afuera.
- $@ ) recibe más parámetros para docker run, incluyendo los comandos para correr y el nombre de la imagen a usar
- docker wait $ID espera a que termine de correr el container
- docker rm $ID lo borra
Espero que les resulte útil, y espero mejoras y críticas,
Aureliano.