Usar docker es sencillo y rápido, pero, como todo, tienes que tener cuidado con todo lo que ocupa espacio ya que los discos y las particiones son finitas… Y los contendores docker ocupan espacio (bastante), así que aquí dejo el método para mover el directorio de datos de la partición por defecto a otra cualquiera que queramos y para la que tengamos espacio de sobra.
Lo primero que hay que saber es que el directorio por defecto donde docker guarda sus imágenes, contenedores y demás cosas que ocupan espacio es:
/var/lib/docker
Que, generalmente, está en la partición raiz (o la que tengamos para var) que no suele ser muy grande. Supongamos que queremos moverla a un disco de datos con capacidad suficiente como este:
/mnt/disks/data/docker
Para ello lo que tendremos que hacer es: parar el servicio docker
sudo service docker stop
Crear un archivo llamado daemon.json en el directorio /etc/docker con este contenido:
{
"graph": "/path/to/your/docker"
}
Copiamos el directorio original al nuevo y lo renombramos por seguridad (ya lo borraremos después)
Reiniciamos el servicio docker y todo debería estar como antes del cambio (podéis comprobar con un docker ps si se ha levantado todo lo que teníais funcionando antes).
sudo service docker start
Después de comprobar que todo está ok, ya podemos borrar el original y habremos terminado con la operación del todo:
Las ventajas de utilizar docker para desarrollar y desplegar la aplicaciones nunca deja de sorprenderme. Conseguimos con una simple definición en texto crear máquinas con configuraciones exactas a ejecutar en todas partes. Una de las cosas en donde todavía no había aplicado docker es en la aplicaciones web que desarrollo en Java. Habitualmente se requiere de un servidor tomcat (con cierta versión de máquina virtual de java) y una base de datos (yo he trabajado con mysql mayoritariamente) con otra versión particular.
Dado que las versiones de base de datos y de tomcat y de java han sido muy variables con el tiempo y que los proyectos no solo hay que desarrollarlos y entregarlos sino que hay que mantenerlos, nos encontramos con una situación imposible en que cualquier combinación de estos elementos es posible y necesaria para probar cualquier mínimo cambio que queramos realizar (si hay cosas muy compatibles que se pueden hacer con versiones nuevas y muchas otras que no)… El caso es que esta vez voy a deciros cómo podemos olvidarnos de una vez por todas de estos problemas utilizando docker y docker-compose.
Si eres el desgraciado usuario de una versión de windows las cosas pueden ser un poco más complicadas, pero si usas un sistema operativo de verdad la instalación y puesta en marcha de docker es trivial e inmediata (ya lo he tratado antes en el blog). Voy a dar por hecho que ya tienes un proyecto Java a ejecutar con tomcat (si es con maven o gradle que te generen el .war automáticamente, mejor) y que ya tienes docker instalado en tu equipo (y docker-compose). Lo que sigue es lo que tienes que hacer para probar tu war en un tomcat con una versión determinada que use una base de datos de una versión determinada:
Crea un directorio docker al mismo nivel que tienes el pom.xml si usas maven y dentro de ese directorio crea el archivo docker-compose.yml
En el directorio del pom.xml ejecuta lo siguiente:
mvn package
Esto te genera el war dentro de target y ya estarás en disposición de entrar dentro del directorio docker y ejecutar:
docker-compose up -d
Quiá la primera vez podrías querer ejecutarlo sin la opción -d para ver todo el log que sale (también es cierto que la primera vez se descarga todos los contenedores y tardará un poco). A partir de que haya arrancado podemos acceder a la aplicación en:
http://localhost:8080/miproyecto
También se puede acceder a la base de datos directamente:
mysql -h 127.0.0.1 -u root -p
Y yasta… En próximas entradas veremos como depurar con docker también.
Una entrada corta, muy corta, para desearos un feliz año 2020… Sea que empecemos los felices años veinte (aunque en el siglo pasado tampoco es que fuesen demasiado felices tampoco) o sea que tengamos que esperar al año que viene para iniciar una nueva década como dice la RAE.
¿Qué espero yo de este nuevo año?
Tener, por fin, un proyecto con cierta aceptación (mola tener idéas geniales, pero no mola que nadie te las compre).
Dedicarle tiempo al cuidado de la salud, que ya empezamos a tener una edad y no todo va a ser trabajo
Recuperar contacto con la famila que, al fin y al cabo, es todo lo que tienes en propiedad para siempre y hay que cuidarlo de vez en cuando.
Y, para todo lo demás… No tener más preocupaciones ni miedos que los que ya he tenido, con eso me doy por satisfecho.
Y mis propósitos son…
Cabrearme menos (si eso es posible), tendré que empezar a contar hasta 10000 antes de contestar airadamente.
Planificar un poco más lo que hago… Que si, que lleva tiempo, pero vale la pena.
Buscar gente mejor que yo en todo, colaborar, contratar o aprender de ellas (se acabó el ombliguismo).
Perder menos el tiempo con chorradas (esto ya es más complicado, porque mi definición de chorrada es muy esotérica).
Supongamos que Guillermo es una persona normal, con una carrera técnica en la que sabe un montón de lo suyo y muy poco de lo demás, obviamente no es médico ni nada similar. Un día, en base a unas molestias se pasa por el médico y después de hacerle unas pruebas le diagnostica un cancer.
Guillermo, no contento con el diagnóstico y acojonado como no podía ser de otra manera, decide visitar a otros médicos, solicitar otras opiniones a conocidos oncólogos y todos coinciden en el diagnóstico, cancer. Por suerte es tratable y solo se le pide que empiece el tratamiento cuanto antes.
Pero algo no le cuadra a Guillermo, decide que lo que los médicos han estudiado y a los pacientes que han tratado no son sinónimo de que tengan la razón, intenta documentarse y visita internet con asiduidad, por desgracia el 99% de lo que encuentra le confirma el diagnóstico y el tratamiento. Para el sería una jodienda tener que someterse al tratamiento y decide elegir al 1% que le dice que los médicos están todos compichados con las farmacéuticas para vender carísimos tratamientos contra el cancer y que, en realidad, sus síntomas se curan con agua diluida en principios mágicos…
Guillermo ha decidido que la ciencia médica ya no le sirve, que él y los cuatro iluminados de internet son más listos y ven la verdad más allá de las tramposas multinacionales de las medicinas. Así que se niega a recibir el tratamiento y decide esperar a que el cancer se cure solo con ayuda de medicinas neanthertales. No le ablanda la preocupación de su familia y amigos, él es más listo y nadie ha sabido argumentarle la forma en que las células sanas mutan en cancerígenas de una manera convincente (nada de estudios con cifras, ni causalidadades de esas que se inventan las farmaceúticas)..
Guillermo es feliz sabiendo que él es más listo que los borregos que le rodean aunque sospechosamente su grupo de afectados por la conspiración global de los falsos diagnósticos de cancer va perdiendo miembros a marchas aceleradas, aunque cada día hay nuevos miembros y él activamente evangeliza a todo el que conoce para que evite seguir el tratamiento…
Guillermo muere entre terribles dolores tras un periodo espantoso donde ha perdido el control de sus funciones motoras poco a poco. ¿FIN?
La historia de Guillermo no es ficción, ahora mismo tenemos negacionistas de cualquier cosa que niegan la evidencia y la autoridad de los científicos para casi todo lo que nos ha convertido en una civilización avanzada. No es ya tener una opinión diferente, eso es muy loable, es pensar que su opinión tiene el mismo peso que décadas o cientos de años de estudios e investigaciones y todo se resume en un «Creo que la tierra es plana ¿puedes hacerme cambiar de opinión?»
El avance imparable de la informática en todas las áreas nos ha creado nuevos problemas a los desarrolladores, no ya el hecho de tener que conocer nuevas herramientas cada mes, o nuevos frameworks de desarrollo que tardas más tiempo en aprender que el que te ahorras, sino la pérdida completa del control de lo que tus usuarios pueden instalarse, dónde y cómo. Os pondré un ejemplo.
NoMorePass es una aplicación móvil de la que os llevo hablando bastante y que desarrollamos nosotros; a nivel básico consiste en la app y un conjunto de extensiones para los navegadores que nos permiten intercambiar las contraseñas mediante un código QR. La app ahora mismo tiene su máxima utilidad cuando se usa desde la extensión. Desarrollar una extensión para navegador no es especialmente complicado, como ya os expliqué en esta entrada, probarlas tampoco es difícil con el modo desarrollador de los navegadores, pero una vez que la tenemos lista tenemos que pasar por un infierno inesperado… Ponerla a disposición del público.
Antes se podía distribuir un archivo empaquetado que al abrirse permitía instalar la extensión, pero esa forma de distribuir extensiones se volvió peligrosa (a pesar de que los navegadores preguntaban muchas veces si de verdad querías instalar eso) y Google decidió que para chrome solo se podían instalar extensiones que pasasen por su tienda de aplicaciones el chome web store. Firefox, por su parte, no lo hace obligatorio por el momento, pero la mejor manera de que una extensión se conozca es tenerla en la página de add-ons de firefox. Lo mismo pasa con Opera (aunque esta es otra odiséa que ya os contaré) y, hasta el momento, con Edge.
No tengo nada en contra de las tiendas de aplicaciones mientras estas funcionen de manera ágil y razonable. A efectos prácticos se convierten en cuellos de botella que pueden afectar en gran medida a la forma en la que se produce la distribución de los productos. Como ejemplo valga lo que me ha pasado en las últimas semanas con la extensión de chrome.
El día 19 de noviembre terminé de desarrollar una mejora a la extensión que había en la tienda, pasaba de la versión 2.1.1 a la 3.0.0 y tras probarla en local y funcionando perfectamente intenté subirla al web store… Se quejó que de que pedía demasiados permisos (cosa que no hizo con la versión anterior) y modifiqué la extensión para que funcionase sin necesidad de pedirlos, generé una nueva versión y la subí a toda prisa… Tanta prisa que se me coló un bug que impedía que funcionase el botón derecho (una funcionalidad que se usa mucho cuando la web no está reconocida o queremos rellenar un formulario con una contraseña que tenemos)… Me di cuenta de ello minutos después de haber «publicado» la versión y cuando intenté subir la versión corregida veo que NO ME DEJA... Dice que la extensión está pendiente de revisión y no se puede enviar otra versión. WTF!!!
No había mucho problema, la versión anterior funcionaba perfectamente y las nuevas funcionalidades podían esperar… Así que esperé ¡¡5 DIAS!! a que Google pasara a producción la versión con el bug un sábado por la mañana… Inmediatamente subí la nueva versión (que solo tiene 2 líneas de código distintas con la versión anterior) esperando que se aprobase inmediatamente y que los clientes no tuviesen que sufrir el bug… Pero no, volvieron a poner en revisión la nueva versión y en esas estamos, llevamos ya 4 días con la versión defectuosa de la extensión y con clientes que ya se han quejado… Y no podemos hacer nada, Google nos ha jodido y no nos da ninguna pista de cuando se publicará de verdad la nueva versión.
No hay nada que podamos decir a los clientes, no hay forma de volver a una versión antigua si tenías la auto-actualización de las extensiones (google no guarda las versiones viejas) y no hay forma de acelerar el proceso de publicación. Tampoco hay forma de hablar con Google (he mandado múltiples formularios de contacto con un sonoro silencio por respuesta), tampoco puedo dar un método alternativo para instalar la extensión porque Google obliga a usar su tienda si-o-si, así que no queda más que esperar a que se publique finalmente la nueva versión y disculparnos ante los clientes y asumamos las pérdidas que esto nos pueda ocasionar como algo inevitable… Muy mal google.
ACTUALIZACIÓN 1:28/11/2019 Google ha leído este post y ha decidido ir un paso más adelante, nos ha RECHAZADO la extensión por pedir más permisos de los que necesitamos (cuando la anterior versión pedía exactamente los mismos)…
Nada, nueva versión pidiendo menos permisos (v3.0.2) y a esperar otros cuatro días (con suerte)…
Gestionar el consentimiento de las cookies
Si, es un coñazo, pero tengo que ponerte este aviso sobre las cookies y mi
Funcional
Siempre activo
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
Preferencias
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario.
Estadísticas
El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos.El almacenamiento o acceso técnico que se utiliza exclusivamente con fines estadísticos anónimos. Sin un requerimiento, el cumplimiento voluntario por parte de tu Proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo para este propósito no se puede utilizar para identificarte.
Marketing
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para rastrear al usuario en una web o en varias web con fines de marketing similares.