GeoWE corriendo en Docker |
Parece que en las últimas semanas me persigue una ballena cargada de contenedores. Docker por aquí, Docker por allí, Docker esto, Docker lo otro. Hace años que empezaba a leer sobre los beneficios de usar contenedores, tanto en desarrollo como en producción, y no se porqué últimamente me está "azotando" insistentemente, quizá sea que el grado de madurez de esta tecnología está alcanzando un punto álgido, o quizá es porque está de moda, o tal vez que alguna de las personas que me rodean acaba de descubrir los contenedores, y ha encontrado un nuevo martillo. Quién sabe, la cuestión es que llevaba bastantes meses sin escribir un post, y me ha parecido una buena idea dedicarle un ratito a Docker.
No me voy a poner a describir las bondades de los contenedores, (para eso ya hay mucha literatura). Voy a centrar el post en un caso práctico, "Dockerizar" mi SIG Web. Como se puede ver en la imagen el objetivo ha sido "meter" GeoWE en un contenedor, un Sistema de Información Geográfica, del que ya he escrito en otras ocasiones.
Bueno, pues manos a la obra. voy a intentar ser breve, listando los pasos que he seguido:
Instalar Docker
Compilar GeoWE
Recuerda: GeoWE es de código abierto, si quieres puedes cambiarlo a tu antojo.
Construir la imagen de Docker
El fichero Dockerfile que he usado queda así:
FROM tomcat:8.0.43-jre8
ADD geowe.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD chmod +x /usr/local/tomcat/bin/catalina.sh
CMD ["catalina.sh", "run"]
Una vez tengo el Dockerfile definido procedo a construir la imagen ejecutando:
$ sudo docker build - . < Dockerfile
Compruebo que la imagen se ha creado ejecutando:
$ sudo docker images
¡Upss! se me ha olvidado ponerle un tag a la imagen. Siempre es mejor identificar amigablemente, así que:
$ sudo docker tag cce3afdcdcc7 geowe-1.5
Ahora ya me gusta más:
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
geowe-1.5 latest cce3afdcdcc7 6 hours ago 485MB
tomcat 8.0.43-jre8 03fc9c4ee243 22 months ago 367MB
Ejecutar el contenedor
$ sudo docker run -i -t -d -p 8080:8080 geowe-1.5
-i: interactivo
-t: Asigno un pseudo-TTY
-d: ejecuto en segundo plano
-p: publico el puerto
Hora de abrir el navegador y acceder a la aplicación: http://localhost:8080/geowe
GeoWE en el contenedor: http://localhost:8080/geowe |
Si queremos visualizar las estadísticas de uso del contenedor (como se ve ne la primera imagen):
$ sudo docker container stats
Pues eso es todo... o ¿no?
Paremos el contenedor:
$ sudo docker stop cce3afdcdcc7
y vamos a guardar nuestra imagen
$ sudo docker image save -o geowe-docker-img.tar geowe-1.5
para llevárnosla a donde nos plazca y ejecutarla en otro sitio:
$ docker load -i geowe-docker-img.tar
La imagen ocupa aproximadamente 480MB. Para un SIG en el bolsillo, no está mal.Ahora si, ¡ya está!
Umm.. o ¿no? venga si, ya lo dejo. Pero estaría bien preparar la imagen y publicarla en Docker Hub.
También estaría genial integrar el proceso manual descrito en este post, en un sistema de CI/CD, con Kubernetes, pero eso es tema de otro post.
Comentarios
"deberías usar copy, de hecho recomiendan usar siempre copy,add es poco seguro.
(add automáticamente hace lindezas como descomprimir)"
https://nickjanetakis.com/blog/docker-tip-2-the-difference-between-copy-and-add-in-a-dockeril
Gracias por el aporte!!