Docker Init: Acelerando el futuro

Docker Init: Acelerando el futuro

Inicialización de Proyectos en tan solo un comando CLI, That's it! :-)

Docker ha transformado la forma en que los desarrolladores crean, empaquetan e implementan sus aplicaciones. Los contenedores Docker proporcionan un entorno de ejecución liviano, portátil y consistente que puede ejecutarse en cualquier infraestructura.

Una de las últimas contribuciones de Docker es la función Docker Init, un comando (CLI) que agiliza la incorporación de Docker a cualquier proyecto.

Cuadro azul que muestra el comando Docker Init en texto blanco.

Entendiendo sobre el Docker init

La función Docker Init no debe confundirse con el docker-initejecutable utilizado internamente, que Docker activa cuando se utiliza el flag --init con el comando docker run. Docker Init que estamos analizando aquí es una nueva característica en su fase beta que automatiza la creación de activos esenciales relacionados con Docker, como Dockerfiles, archivos .dockerignore y archivos compose.yaml.

La función Docker Init actualmente es compatible con Go, Node, Rust y Python, y el equipo de desarrollo de Docker extiende activamente el soporte a otros lenguajes y como Java y .NET. Esta expansión progresiva promete hacer que Docker Init sea aún más útil para una amplia gama de desarrolladores.

Trabajar con Docker Init

Para usar Docker Init, necesitará Docker Desktop versión 4.18 o posterior. Una vez configurado, puede ejecutar el comandodocker init en el root de su proyecto. Docker Init detectará las características del proyecto y generará automáticamente los archivos Docker necesarios.

Esta característica es particularmente valiosa para los desarrolladores que son nuevos en Docker, aquellos que están aprendiendo sobre contenedorización o los desarrolladores que buscan integrar Docker en sus proyectos existentes.

Puede leer más sobre cómo instalar Docker Desktop en la pagina oficial https://www.docker.com/products/docker-desktop/

Docker Init en acción

Tomemos como ejemplo un servidor web en Nodejs.

Como funciona la aplicación

Testear con el endpoint health check: /ping

curl localhost/ping

Si todo esta okey Responde ok.

Testear el endpoint /hello :

curl localhost/hello/roxs

Salida:

Hi there, Docker Init onfire, Roxs<br>
<i>1617809127162</i>Ejecutamos el comando para iniciar el proceso de generación automática de los archivos necesarios para ejecutar la aplicación usando Docker Compose:

docker init

Te va a pedir información sobre el stack tecnologico de tu aplicacion, para efecto de este ejemplo selecionaremos Node , la versión [18], cual es el comando para iniciar la aplicación [npm start] * por supuesto este debe estar definido en el package.json, y el puerto en este caso el puerto es el [80]

Al momento de responder todo el pedido, te va crear:

.dockerignore "se utiliza para evitar que ciertos archivos y directorios terminen en tu Docker image"

Dockerfile :"es un archivo o documento de texto simple que incluye una serie de instrucciones que se necesitan ejecutar de manera consecutiva para cumplir con los procesos necesarios para la creación de una nueva imagen."

compose.yaml :"se usa un archivo YAML para configurar los servicios de la aplicación"

En el mismo proceso te va a estar guiando de como seguir luego de haber ejecutado el comando docker init

y cuando estes listo , encender el contendor:

docker compose up --build

Si queremos una alternativa background usamos el flag -d

docker compose up --build -d

podrias revisar los comandos de docker-compose en la documentación oficial https://docs.docker.com/compose/reference/

Dockerfile generado por el docker-init

Compose generado por el docker-init

Comenzamos a crear nuestra imagen, pero detectamos un error, dice que no existe el package-lock.json

Revisamos el Dockerfile y nos damos cuenta que pide que tenga el package-lock.json, podemos modificarlo pero siguiendo las buenas practicas es importante que lo tenga para evitar alguna actualizacion de dependencia que pueda generar problemas.

RUN --mount=type=bind,source=package.json,target=package.json \
    --mount=type=bind,source=package-lock.json,target=package-lock.json \
    --mount=type=cache,target=/root/.npm \
    npm ci --omit=dev

Generamos desde nuestra maquina fisica el archivo que falta y listo.

Construccion de imagen y contenedor creado... It's Easy

Problamos la aplicacion curl localhost/hello/roxs o accedemos desde nuestro navegador localhost/hello/roxs

El servidor web está funcionando.

Beneficios de Docker Init

Docker Init juega un papel importante en la automatización de la creación de los recursos de Docker. Permite a los desarrolladores centrarse más en el desarrollo de sus aplicaciones, reduciendo el riesgo de errores e inconsistencias y acelerando así la adopción de Docker y la contenedorización.

Una vez que se haya completado Docker Init, es posible que sea necesario modificar los archivos creados para alinearlos con los requisitos de su proyecto. En tales casos, puede consultar la documentación de Docker para obtener más información.

Conclusión

Docker Init sigue creciendo, y ya se muestra muy prometedor como herramienta que simplifica el proceso de incorporación del soporte de Docker en los proyectos de los desarrolladores. Al automatizar la creación de activos de Docker, Docker Init es un paso más en el compromiso de Docker de simplificar y mejorar el mundo del desarrollo de software. A medida que Docker continúa perfeccionando y ampliando esta característica, Docker Init se convertirá en una parte vital del impresionante conjunto de herramientas de Docker.

Nueva característica y espero que pueda ayudar a mucha gente a comenzar su viaje con Docker y Containers. :-)