Red de conocimiento informático - Conocimiento informático - Cómo navegar en la "jungla" del fenómeno Docker

Cómo navegar en la "jungla" del fenómeno Docker

Ahora, esto es lo que tengo que decir: He tardado en analizar seriamente Docker durante algún tiempo, principalmente debido a la falta de tiempo y a la reciente decisión de nuestro patrocinador y empresa matriz ZeroTurnaround de salir por completo de la industria de operaciones para centrarme en herramientas de desarrollo. Como ingeniero que desarrolló versiones anteriores de herramientas de automatización, tiendo a tener poco interés en centrarme en la virtualización o en herramientas de gestión de grandes clústeres.

Puede que sea un poco tarde para centrarme en el mundo de Docker, pero hoy discutiré cómo los desarrolladores de Java pueden atravesar la jungla del fenómeno Docker y comprender más fácilmente cómo usar este popular Nueva tecnología para simplificar los beneficios del proceso de desarrollo.

En este artículo, exploraremos lo que puede hacer con Docker y cómo puede considerarse una tecnología emergente.

Instalación y primeros pasos

Para mi sorpresa, las instrucciones de instalación de Docker están disponibles en el sitio web oficial (/installation/mac/#installation). No quiero entrar en detalles sobre los pasos específicos necesarios para obtener Docker, por lo que para mantener esta publicación de blog de alto nivel, esta sección será muy breve.

Si tienes la suerte de tener un sistema operativo que admita Docker directamente (lo que implica algunas distribuciones de Linux), entonces estás listo. Instala Docker usando tu administrador de paquetes favorito y confirma que este comando funciona:

$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world' Hello world

Si no lo estás Si tienes suerte de ejecutar Windows u OS X, no te preocupes. proyecto boot2docker (/installation/mac/#installation.

Utilice el comando anterior para ingresar mediante ssh a boot2docker y ejecutarlo para confirmar que boot2docker se está ejecutando:

$ boot2docker ssh ## . Boot2Docker versión 1.3 .1, compilación maestra: 9a31a68 - viernes 31 de octubre 03:14:34 UTC 2014 Docker versión 1.3.1, compilación 4e9bbfa docker@boot2docker: ~$ sudo docker run ubuntu: 14.04 /bin/echo 'Hola mundo' Hola mundo

Eso es todo, ejecutamos nuestra primera aplicación Docker. No hace nada sofisticado, solo envía un mensaje, pero es un paso importante en la configuración de la infraestructura para un sistema útil. p>Esos contenedores que importan

Si bien amamos Groovy como lenguaje, no somos una empresa de Groovy en absoluto, por lo que nos concentraremos en hacer que Java se ejecute en contenedores.

Buenas noticias. Sí, todo funciona para nosotros incluso aquí. Tenemos un repositorio oficial: dockerfile/java (/dockerfile/java) que contiene imágenes de Docker para Java. Para ser precisos, estas no son imágenes de Docker (dockerfiles) que le dicen a Docker cómo hacerlo. para crear la imagen real.

Si observa el Dockerfile para Java 8 (/dockerfile/java/blob/master/oracle-java8/Dockerfile), notará inmediatamente que la imagen de Java 8 se basa en la imagen normal de Ubuntu. Puede instalarlo tal como. La máquina Ubuntu también tiene Java instalado.

Además, define JAVA_HOME y los comandos predeterminados de Docker que deben ejecutarse:

# Defina el directorio de trabajo.

WORKDIR /data

# Definir variables JAVA_HOME de uso común

ENV JAVA_HOME /usr/lib/jvm/java-8-oracle

# Definir comando predeterminado.

CMD ["bash"]

Ahora nuestro contenedor Docker está equipado con Java, por lo que podemos ejecutar comandos Java:

docker run -it --rm dockerfile /java: oracle-java8 java -version java versión "1.8.0_25" Entorno de ejecución Java(TM) SE (compilación 1.8.0_25-b17) Máquina virtual de servidor Java HotSpot(TM) de 64 bits (compilación 25.25-b02, mixta mode )

Podemos ejecutar comandos Java aleatorios que se ejecutan dentro del entorno Docker. No utiliza una máquina virtual estándar para esto, por lo que no tiene que preocuparse en absoluto por la sobrecarga de una máquina virtual.

¿Ves lo fácil y portátil que es esto?

Mayor personalización

Sé lo que estás pensando: esto es genial, pero ahora tengo que crear un archivo Docker para descargar e instalar Maven, clonar el repositorio de mi proyecto y luego compilar. También descarga la mitad de Internet en el proceso. No se preocupe, Docker tiene fácil acceso a su sistema de archivos host, por lo que no necesita proporcionar mucho acceso fuera de Java.

De hecho, puedes tenerlo. Linux claramente tiene la ventaja de ser el sistema operativo nativo de Docker, por lo que el mapeo es fluido y sin complicaciones. El comando Docker requiere solo un parámetro: -v para asignar directorios a objetos dentro del contenedor.

Por ejemplo, el siguiente comando disfrutará de mi directorio y contenedor ~/repo.

docker run -v /Users/shelajev/repo:/opt/repo ubuntu ls -la /opt/repo/zt-zip

Los usuarios de OS X no tienen que preocuparse sobre este problema tampoco. Porque desde boot2docker 1.3.1, su directorio de inicio está asignado a él de forma predeterminada. A partir de boot2docker 1.3.1, su directorio de inicio está asignado a la máquina virtual boot2docker*** de forma predeterminada, por lo que -v también funcionará:

Los usuarios de Windows no tienen que preocuparse, pueden estar seguros de que una versión funcionará. Funciona bien (consulte /compartir-una-carpeta-de-Windows-con-el-boot2docker-vm/). En resumen, debe instalar VirtualBox Guest Additions y asignar manualmente una carpeta entre el host y la máquina virtual boot2docker. Esta parte es bastante fácil e intuitiva si sabes lo que estás haciendo o sigues una guía práctica útil (como el enlace de arriba).

Ahora se explica por sí mismo cómo ejecutar una aplicación Java real en un contenedor Docker. Su código fuente reside en el host, donde puede editar el código fuente; incluso puede crear el código fuente en el host, porque el envío no comienza con el código fuente, sino con componentes prefabricados. Después de eso, sólo es cuestión de colocarlo en el lugar correcto y ejecutarlo con el comando correcto.

A continuación se muestra un ejemplo de un proyecto Java. Usaré Spring Boot (¿completo? ¿master?) $ java -jar target/gs-spring-boot-0.1.0.jar

Confirme también que la aplicación se esté ejecutando en el puerto 8080. Para ejecutar en un contenedor Docker, simplemente hago lo mismo, pero necesito proporcionar un mapeo de puerto para poder acceder a él desde el host:

docker run -v /Users/shelajev/repo: / opt/repo -p 8080:8080 --rm dockerfile/java.oracle-java8 java -jar /opt/repo/tmp/gs-spring-boot/complete/target/gs-spring-boot-0.1.0.jar

El resultado de este comando es muy predecible; inicia la aplicación Spring Boot y el resultado muestra todo el contenido de inicialización. En aras de la simplicidad, no lo adjuntaré aquí, pero se verá como este Pastebin a continuación.

¡Mira! ¡Ahora puedo acceder a él a través del navegador host! Puede obtener fácilmente la IP precisa simplemente usando este comando. boot2docker proporciona una interfaz asignada a Docker:

Abra http://$(boot2docker ip 2gt;/dev/null)/

<. p> Conclusión:

Puedo decir con seguridad que Docker es una herramienta bien pensada y se puede acceder a casi todo a través de la línea de comandos.

En este artículo examinamos cómo empezar a utilizar contenedores Docker para crear un entorno de desarrollo fácilmente portátil para proyectos Java. Esto podría hacer que los nuevos proyectos sean más fáciles de instalar sin sacrificar los beneficios o el rendimiento que le brinda su entorno habitual: entornos de desarrollo integrados (IDE) regulares, pruebas automatizadas, herramientas como JRebel (publicidad descarada).

Para los desarrolladores de Java, Docker ayuda a aislar nuestra aplicación en un entorno limpio, mitigando así en cierta medida la incertidumbre de si se ejecutará en mi máquina. El aislamiento es importante porque reduce la complejidad de los entornos de software que utilizamos. Además, gracias a Docker, no es necesario profundizar en el mundo de los contenedores para empezar a implementar aplicaciones en miles de nodos. El aislamiento de la máquina del desarrollador es una gran ventaja.

Con una interfaz de usuario intuitiva que reduce aún más la complejidad, Docker se ha convertido en una gran herramienta para todos los desarrolladores. Otros beneficios de usarlo incluyen la simplificación del trabajo del personal de operaciones, y todos sabemos lo importante que es.