Tengo una discusión con un amigo sobre los casos de uso de Docker . Un chico del equipo quiere usar Docker para todo, como una especie de envoltorio de proceso universal de Unix. El otro piensa que Docker solo debe usarse para aplicaciones sin estado como Microservices y aplicaciones de estilo AWS Lambda .
Hemos diseñado pruebas de conceptos para ambos. En nuestro clúster docker, tenemos una unidad compartida que se monta cuando se monta el host Docker, y si se monta una base de datos en un contenedor, simplemente monta un volumen en la unidad compartida.
Mi amigo todavía se apega a su posición, a pesar de que se me muestra la evidencia contraria. (También argumenta que Docker agrega riesgos innecesarios al agregar complejidad a la pila).
Estoy tratando de escuchar y comprender su punto de vista, tanto en un acto de empatía, como también para razonar mejor con él. (Todos nos llevamos bastante bien, así que esta es una mezcla de discusión en broma y seria).
El tipo de pregunta detrás de la pregunta es: ¿son las bases de datos ganado ? Este comentario sugiere que una buena estrategia automatizada de respaldo y recuperación para su base de datos es indistinguible de un servidor de ganado.
Mi pregunta es: ¿Cuáles son las razones por las que Docker no debe usarse para bases de datos?
EDITAR: La gente me ha pedido que aclare mi terminología. Supuse que la aplicación de la base de datos estaba en el contenedor y el almacenamiento estaba en el volumen. Lo que quise decir fue que el RDBMS está en el contenedor y el almacenamiento de la base de datos está en el volumen.
Algunos comentaristas han sugerido que los controladores de volumen de la ventana acoplable no funcionarán muy bien con las escrituras de bases de datos. (O algo por el estilo). ¿Podría por favor ampliar eso?
fuente
Respuestas:
Cuando las personas hablan de ejecutar una base de datos en Docker, no tienen la intención de almacenar los datos en un contenedor; están hablando de tener una imagen acoplable con el software DB y montar los datos como un volumen (un volumen de enlace, no un volumen de contenedor).
Los volúmenes son una parte esencial en Docker, y no son algo escamoso o simplemente agregado. Docker no está hecho solo para servicios (micro) sin estado.
Por mucho que lo desee, no puedo encontrar una razón técnica para no ejecutar una base de datos en un Docker, así que desafortunadamente elegiré el otro lado del argumento y, por lo tanto, tal vez no le dé la respuesta que está buscando.
(Estoy usando Oracle como ejemplo porque estoy familiarizado con él, tanto de metal desnudo como dockerizado, y porque es una bestia bastante notoria por ser un poco no trivial de operar si pasa de la configuración predeterminada).
Ahora, dependiendo de las circunstancias, puede haber razones blandas para no hacerlo:
Ahí vas. Por supuesto , dockerice su base de datos, al menos para sus desarrolladores (que estarán eternamente agradecidos) y sus entornos de prueba. En la producción, que se reducirá a gusto, y hay por lo menos, yo también preferiría la solución que se sienta mejor con los DBA / OPS especializados - si tienen décadas de experiencia trabajando servidores metal desnudo DB, entonces por todos los medios que confiar para continuar así. Pero si de todas formas es una startup que tiene toda la TI en la nube, entonces un contenedor Docker sería una pieza más de cebolla en toda la imagen.
fuente
Yo escribí sobre esto en profundidad pero aquí está el resumen:
Prevenir la división del cerebro (elegir más de un nodo maestro) necesita ser resuelto. De lo contrario, puede ser catastrófico
No existen soluciones de almacenamiento compartido listas para producción que permitan cerrar las bases de datos en una instancia y mostrarlas en otra sin perder todos sus datos.
fuente
Cuando dice que los datos están montados en un contenedor acoplable, ¿no sería más correcto decir que la "base de datos" está montada en el contenedor acoplable? Si persiste sus datos fuera del contenedor, entonces está haciendo lo "correcto" de no poner su base de datos en un contenedor.
Claro, vaya a la ciudad colocando un DBMS en un contenedor y dejándolo administrar los datos que almacena afuera, personalmente creo que es un buen diseño porque mantiene una separación clara entre la lógica y los datos. Pero una vez que coloca sus datos en un contenedor, potencialmente está jugando con fuego.
Aunque los controladores de almacenamiento de contenedores han recorrido un largo camino, personalmente todavía no estoy dispuesto a sumergirme y dejar mis datos enredados en un contenedor.
fuente