Estate atento porque en esta división encontrarás la respuesta que buscas.
Solución:
Docker es un sistema para construir, distribuir y ejecutar contenedores Docker. Los contenedores se pueden ejecutar en Linux y Windows.
Packer es un sistema de compilación automatizado para administrar la creación de imágenes para contenedores y máquinas virtuales. Produce una imagen que luego puede tomar y ejecutar en la plataforma que necesite.
Para v1.1 esto incluye: Alicloud ECS, Amazon EC2, Azure, CloudStack, DigitalOcean, Docker, Google Cloud, Hyper-V, LXC, LXD, 1&1, OpenStack, Oracle OCI, Parallels, ProfitBricks, QEMU, Triton, VirtualBox, VMware
Dockerfile de Docker
Docker utiliza un Dockerfile
para administrar compilaciones que tienen un conjunto específico de instrucciones y reglas sobre cómo compilar un contenedor.
Las imágenes se construyen en capas. Cada FROM
RUN
ADD
COPY
Los comandos modifican las capas incluidas en una imagen de Docker. Estas capas se pueden almacenar en caché, lo que ayuda a acelerar las compilaciones. Cada capa también se puede abordar individualmente, lo que ayuda con el uso del disco y el uso de descargas cuando varias imágenes comparten capas.
Los Dockerfiles tienen un poco de curva de aprendizaje. Es mejor mirar algunas de las imágenes oficiales de Docker para seguir las prácticas.
Constructor Docker de Packer
Packer no requiere un Dockerfile
para construir una imagen de contenedor. Tiene un archivo de configuración JSON que comienza desde una imagen base específica (como FROM
). Packer luego le permite ejecutar herramientas de configuración del sistema estándar llamadas “Provisioners” encima de esa imagen. Cosas como Ansible, Chef, Salt, scripts de shell, etc. Esta imagen se exportará como una sola capa, por lo que perderá los beneficios de almacenamiento en caché/direccionamiento de capas en comparación con una compilación Dockerfile.
Packer permite algunas modificaciones en el entorno del contenedor de compilación, como ejecutar como --privileged
o montar un volumen en el momento de la compilación, que las compilaciones de Docker no permitirán.
Los momentos en los que podría querer usar Packer son si desea crear imágenes para múltiples plataformas y usar la misma configuración. También facilita el uso de scripts de compilación existentes si hay un aprovisionador para ello.
Ampliando el ¿Cuál es más fácil/rápido de aprovisionar/mantener y por qué? ¿Cuáles son los pros y los contras de tener un archivo docker?
Por experiencia personal aprendiendo y usando ambos, encontré: (YMMV)
- la configuración de Docker fue más fácil de aprender que Packer
- la configuración de docker fue más difícil de obligar a hacer lo que quería que packer
- la diferencia de velocidad en la creación de la imagen fue insignificante, después del revelado
- Docker fue más rápido durante desarrollo, debido al almacenamiento en caché
- el demonio de la ventana acoplable consumía algunos recursos del sistema incluso cuando no usaba la ventana acoplable
- hay un puñado de procesos ejecutándose como la demonio
Hice mi desarrollo en Windows, aunque estaba apuntando a servidores LINUX para ejecutar las imágenes. Eso no es un problema durante el desarrollo, excepto por la debilidad de ejecutar Docker en Windows.
- El demonio docker se reserva varios rangos de puertos TCP para sí mismo
- Los rangos pueden cambiar cada vez que reinicia su sistema o reinicia el daemon
- El único mensaje de error es en el sentido:
can't use that port!
pero no por qué no puede
Por cierto, el solución alterna Es para:
- apague el hipervisor
- reiniciar
- reserve los puertos públicos que desea que vea su sistema host
- activar el hipervisor
- reiniciar
Sin embargo, al ejecutar Packer en Windows, el problema que encontré es que el aprovisionador que quería usar, ansible, no se ejecuta en Windows.
Suspiro.
Así que termino teniendo que ejecutar Packer en un sistema LINUX después de todo.
Solo porque me sentía perverso, escribí un Dockerfile
para poder ejecutar los dos packer
y ansible
desde mi estación de Windows en un contenedor docker usando esa imagen.
Docker construye imágenes usando un Dockerfile. Estos se pueden ejecutar (contenedores Docker).
Packer también crea imágenes. Pero no necesitas un Dockerfile. Y tiene la opción de utilizar aprovisionadores como Ansible, que le permite crear imágenes mucho más personalizables. No se utiliza para ejecutar estas imágenes.
Comentarios y puntuaciones del tutorial
Si te animas, tienes la opción de dejar un escrito acerca de qué le añadirías a este tutorial.