He escuchado varias veces decir que alguien no usa Docker porque al borrar el contenedor o al parar una base de datos toda la informaci贸n se perder谩 en el olvido pero, nada m谩s lejos de la realidad. Docker persiste la informaci贸n en nuestro sistema no lo crea y lo mantiene en un limbo virtual 馃懟
Con esto quiero decir que cuando creamos un contenedor de Docker autom谩ticamente, si no se lo indicamos, nos crear谩 un directorio en nuestro sistema para guardar toda la informaci贸n que se encuentre dentro del mismo. La clave est谩 en que nosotros podemos definir d贸nde queremos que haga este mapeo, incluso decirle que directorio concreto queremos que mapee dentro del contenedor. Esto se hace con los vol煤menes
Por ejemplo, si partimos de nuestra fake-api que hemos creado anteriormente en la cual primero copiamos nuestro c贸digo en el momento de la creaci贸n de la imagen con la sentencia COPY . /app
dentro de nuestro archivo de configuraci贸n Dockerfile.
En el momento de la creaci贸n de la imagen no tenemos que hacer nada especial, ejecutaremos la sentencia igual que hasta ahora
docker build -t criskrus/fake-api .
La diferencia viene cuando creamos el contenedor. En este caso tendremos que indicar al contenedor que directorio tenemos que mapear. A nosotros para este ejemplo nos interesa que nuestro c贸digo fuente el cual modificamos en la m谩quina anfitriona se modifique autom谩ticamente en el contenedor para mostrar los cambios. Esto es de bastante utilidad cuando estamos en fases de desarrollo.
Para hacer esto tendremos que a帽adir una nueva opci贸n en el comando de creaci贸n indicando que el directorio actual d贸nde est谩 todo nuestro c贸digo corresponde con el c贸digo que se ejecuta dentro del contenedor. Esto se hace de la siguiente forma -v $(pwd):/app
, con esta opci贸n decimos que el directorio actual se mapee al directorio /app
del contenedor. Tenemos que usar el comando pwd
porque tenemos que indicar la ruta absoluta.
Por lo tanto el nuevo comando con el que crearemos el contenedor queda de la siguiente forma.
docker run --rm -it -p 8080:8080 -v $(pwd):/app criskrus/fake-api
Ahora, sin parar el contenedor, podemos hacer modificaciones en el c贸digo y veremos como se actualiza de manera autom谩tica en el contenedor. Como tenemos instalado nodemon
esta actualizaci贸n del servidor ocurrir谩 autom谩ticamente al actualizar el c贸digo sin necesidad de actualizar o hacer nada en nuestro contenedor.
Con esto podremos persistir y mantener en nuestra m谩quina local lo que ocurra en el contenedor y nos interese mantener: configuraci贸n, logs, copias de seguridad de una base de datos, etc