Entorno de desarrollo con Docker

Hola gente, quería compartirles una herramienta con la que estuve trabajando últimamente y me resultó de mucha utilidad, se llama Docker(https://www.docker.com/).
Muy resumido, es una herramienta de virtualización basada en “contenedores”, que pueden correr en paralelo, sobre la imagen de un sistema operativo.
Para lo que yo lo uso y me parece muy conveniente es para programar desde Windows, sin necesidad de tener apache y postgres corriendo en mi maquina constantemente, teniendo la IDE que a mi me gusta y demás software que uso para el desarrollo día a día. Además de tener la comodidad de poder levantar el entorno de desarrollo en minutos sin salir de la consola y en cualquier plataforma( Windows, Linux, MacOs).
Con Docker, simplemente abriendo la consola y corriendo unos comandos, tengo el entorno de desarrollo para guarani completo (o cualquier proyecto), en menos de 10 minutos. Y para el trabajo diario solamente hay que correr 3 comandos y tengo todo listo para programar desde Windows, compilando en linux.
Además en caso de no querer usar Windows, es demasiado simple pasar a Linux, y todo funciona exactamente igual que en Windows. Con cambiar la ruta donde tenemos los proyectos por la ruta de Linux o de MacOS que sea, ya sale andando en esa plataforma.

Bueno, les dejo los pasos para hacer esto, los archivos los adjunto en un zip!

[ol]- Instalar Docker para la plataforma que se requiera, una vez instalado, verificar que podemos levantar imagenes y containers( esto se los dejo para que googleen que esta lleno de info).

  • Crear un directorio donde pondremos todos los proyectos, y cualquier archivo al que querramos acceder desde el servidor de docker. Este directorio será el que pongamos en el docker-compose.yml como volumen a compartir. Cuando lo abran van a ver que es muy simple, solo tienen que cambiar la ruta que puse yo por la suya.
    Una aclaración para windows: si o si tiene que estar bajo la ruta C:/Users/<tu_usuario>/

  • Una vez que tenemos docker corriendo, en el caso de windows, abrimos la consola de docker( Docker Quickstart Terminal). En linux simplemente abrimos la consola común. Y nos movemos a la ruta donde tengamos el archivo docker-compose.yml. Hay que conservar la jerarquía que está en el zip que adjunto!
    También fijense de obtener la ip de la maquina de docker. En windows al abrir la consola te dice la ip y sino con el comando docker-machine ip nos la da, en linux creo que es docker inspect y entre un choclo de informacion está la ip.
    El puerto, como van a ver en el docker-compose yo le puse 3000 para que no se me superponga con nada. Pueden cambiarlo por el que quieran, mientras no esté escuchando otra cosa.
    Más adelante van a poder acceder a los sitios que tengan a traves de ip:3000/

  • Parados en ese directorio corremos los siguientes comandos:
    docker-compose build
    docker-compose up -d
    docker exec -it dockerwindows_siu_1 bash
    El último en linux probablemente necesite ser corrido con sudo.
    una vez que corremos este ultimo, se nos abrira una instancia de bash dentro de nuestro nuevo servidor. Tenemos corriendo una máquina con ubuntu completamente funcional.
    Con el siguiente comando, se levantan los servicios de apache y postgres:
    ./run.sh
    Con esto ya podemos correr cualquier proyecto. En el Dockerfile, yo agrego al sites-enabled de apache los archivos conf de guarani, 3w y preinscripcion. Y a esta altura, si tienen 3w o preinscripción en la carpeta proyectos, ya lo pueden correr accediendo desde el navegador con la ip que obtuvieron antes de la forma ip:3000/3w o ip:3000/preinscripcion/ua1
    Seguramente les de error porque todavia no cargaron la base de datos.

  • Por el lado de postgres, hay que utilizar la version web de pgadmin, que corre sobre php precisamente. Se accede mediante ip:3000/phppgadmin y es muy similar al cliente normal de PgAdmin. Ahí ya pueden crear la base de datos, o tambien pueden hacerlo desde bash.[/ol]

Bueno finalmente dejo todos los comandos que uso yo para instalar guarani, que van a ser exactamente los mismos para ustedes, ya que la imagen de docker no difiere en nada en mi maquina que en la suya:

/var/www/proyectos/guarani_3_10_2/lib/toba/bin/instalar
service apache2 restart
cd /var/www/proyectos/guarani_3_10_2/lib/toba/bin/
./toba instalacion cambiar_permisos -u www-data -g root

--pegar en el instalacion.ini
vim /var/www/proyectos/guarani_3_10_2/lib/toba/instalacion/instalacion.ini
chequea_sincro_svn = 1
[xslfo] 
fop=/var/www/proyectos/guarani_3_10_2/php/3ros/fop/fop

cd /var/www/proyectos/guarani_3_10_2/bin
./guarani cargar -d /var/www/proyectos/guarani_3_10_2
service apache2 restart
./guarani instalar

Ahora ya estamos en condiciones de correr toba y guarani normalmente, con la misma ip que los otros proyectos ip:3000/toba_editor/2.6
Otros comandos que van a necesitar:

 --instalar fuentes para reportes
echo "deb http://us-west-2.ec2.archive.ubuntu.com/ubuntu/ trusty multiverse
deb http://us-west-2.ec2.archive.ubuntu.com/ubuntu/ trusty-updates multiverse
deb http://us-west-2.ec2.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse" | tee /etc/apt/sources.list.d/multiverse.list 
apt-get update
apt-get install ttf-mscorefonts-installer

--cargar base 
 su - postgres 
 psql -h localhost -p 5432 -U postgres -f /var/www/proyectos/guarani.sql guarani_prod
 
--servidor de reportes
java -jar /var/www/proyectos/guarani_3_10_2/lib/toba/php/3ros/JavaBridge/WEB-INF/lib/JavaBridge.jar SERVLET:8081

Una vez que tengan todo corriendo, pueden probar de cerrar todo y volver a levantarlo( esta vez sin buildear, ni instalar guarani ) con los siguientes comandos:

 --trabajo diario
docker-compose up -d
docker exec -it dockerwindows_siu_1 bash
./run.sh

si quieren despues del .sh pueden correr el servidor de reportes en ese mismo bash y están listos para codear.

Si llegaran a tener problemas con los alias, hay que editar los conf. pero recuerden que si en algun momento vuelven a buildear la imagen van a perder todo lo que hayan modificado. Lo mismo para la base de datos, si llegaran a borrar docker, o si hacen docker-compose down, la información se pierde, es como si se formateara la maquina. Así que cada cambio que quieran que persista tienen que agregarlo en el Dockerfile o al archivo que sea que modificaron(.conf, run.sh, docker-compose.yml).
Hay varias cosas que faltan agregar, como un volumen aparte para los datos, para que justamente no pase lo que mencioné anteriormente. También me gustaría agregar que se levanten solos los servicios, incluido el de reportes, que tengo entendido que se puede hacer correr como un servicio cualquiera( service jasper start por ejemplo). También que cree y cargue la base cuando buildea, y decargar las fuentes desde el Dockerfile, que no lo pude hacer por ahora porque piden aceptar un EULA que hay que hacer a mano.

Cualquier sugerencia la voy a agradecer, y espero que a alquien le sea de utilidad.

Saludos!

Felipe


docker - Windows.zip (5.22 KB)

Hola Felipe,

que bueno que estes mirando docker como herramienta, si te fijas en este Github vas a encontrar que tenemos varias imagenes con las que venimos trabajando dia a dia, son todas para desarrollo pero las podes usar y extender como mejor te sirvan, incluso creo que hay una que hicimos para Guarani 3… aunque puede que este medio desactualizada xq hace rato que no la buildeo. Finalmente reiterarte que son imagenes para DESARROLLO… no para produccion, de hecho por mas simpatico que me cae docker… todavia le faltan algunas cosas para poder meterlo en produccion me parece.

Fijate… si te sirven joya… sobre todo porque usando docker se puede facilmente replicar el mismo entorno para todo el equipo de desarrollo, entonces todos quedan con el mismo apache, postgres, php.

Saludos

Hola Richard! Miraaa, de haber sabido antes de ese repo… lo voy a chusmear.

Saludos!

Buenas noches, estoy tratando de meterme en el mundo de los Contenedores y quisiera que me dieran una mano en el camino a seguir, sobre todo en la configuración de los mismos para poder montar un entorno de desarrollo.
Gracias.

Hola Nicolas,

lo primero que te recomiendo es leer la documentacion de docker y docker-compose, familiarizarte con los comandos, opciones de los mismos, etc.

Luego , tal como le comente a felipe podes usar las imagenes que tenemos en Github para desarrollo, vienen ya armadas para que la instalacion de Toba sera bastante directa.

Saludos