Cuando trabajabas con máquinas virtuales no había dudas: cuanto más completa sea la máquina mejor.
Sí, instalarla por primera vez era un trabajito. Que definir el hardware, el disco, el sistema operativo, instalarl Apache, MySQL, Git… una mañana se te iba en un abrir y cerrar de ojos. Pero funcionaba.
Luego apareció Vagrant y fue como tocar el cielo con las manos… por un tiempo.
Ahora te estás queriendo pasar a Docker y el saber popular dice que hay que tener muchos contenedores pequeños en lugar de un único monolito que tenga todo lo necesario para correr la app.
¿Por qué esa es la mejor opción?
Dejame que te plantee la pregunta al revés: ¿por qué es una buena idea meter todo en una única máquina virtual?
Tal vez te parezca ridículo pero seguime el juego por un momento.
La respuesta es obvia, ¿no?: ¡porque te quedás sin máquina en un segundo!
Ahora bien, si tuvieras memoria infinita y un procesador que no se agota nunca… ¿no preferirías tener una VM por cada proceso?
Imaginate, un Apache en una VM, el MySQL en otra, tal vez un Redis por allá, una VM para correr los cronjobs…
Tan mal no estaría, ¿verdad?
Bueno, tal vez sería compleja la orquestación de todo eso, pero tampoco sería tan terrible.
De esa forma, cada VM podría tener su propio sistema operativo, sus propias dependencias instaladas y, en caso de que algo falle, sería sólo ese servicio el que se vería afectado.
De pronto no suena tan mal, ¿o sí?
Precisamente esa es la idea de usar Docker (O, más correctamente, contenedores): tener diferentes ambientes de ejecución auto-contenidos.
Pero… ¿no vas a caer en el mismo problema de correr muchas VMs en una misma computadora?
No. Acá es donde la cosa se pone más técnica pero digamos que la diferencia principal entre una VM y un contenedor es que la VM virtualiza hardware mientras que el contenedor sólo virtualiza software.
En la práctica, esto quiere decir que el contenedor es mucho más liviano que una VM.
La contracara es que el contenedor te da algo menos de flexibilidad.
Por ejemplo, es muy fácil tener corriendo una VM con Windows y otra con Linux en un host Mac. Hacer lo mismo con contenedores… no tanto.
Ahora bien, si tus contenedores usan el mismo sistema operativo de base (Por ejemplo son todos Linux), en un mismo host podés albergar significativamente más contenedores que VMs.
La siguiente pregunta es… administrar tantos contenedores ¿no se vuelve complejo?
Y… la respuesta es que un poco sí.
Ahí es donde aparece docker-compose para salvar el día. Tema para otro post.
- Cómo agregar una página de error 500 en un proyecto PHP - 31/10/2024
- ¿Cuántos contenedoresnecesita tu php? - 28/10/2024
- Cuál es el mejor framework PHP para hacer APIs REST - 25/10/2024