Docker Mastery notes para Windows Parte 2
Ciclo de vida de un container y datos persistentes
Los containers son comunmente inmutables, se pueden re deployar pero no cambian. Pero hay casos que necesitan cambios como una base de datos.
Persistent data
...
Hay dos maneras de manejar estos casos : Volumes y Bind Mount
Volumes
Volumes : crean un lugar por fuera del container UFS
Por ejemplo, para mysql se puede leer el siguiente comando en el docker file:
VOLUME /var/lib/mysql
Esto esta indicando que se van a guardar los datos en esa ruta dentro del container.
Tener en cuenta que estos datos necesitaran que se los borre manualmente, por lo que requerirá algunos pasos extras. Esto se debe a que los datos muchas veces son mas importantes que el container en si mismo.
docker pull mysql
para inspeccionar la imagen recien traida
docker image inspect mysql
docker container run -d --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=True mysql
Ahora ya podemos ver el container corriendo
docker container ls
Para ver el volume (o en caso de que halla varios)
docker volume ls
Si detenemos el container y lo borramos.
docker container stop mysql
docker container rm mysql
El volume van a seguir existiendo.
docker volumen ls
Sigue ahi.
Para hacerlo mas legible podemos darle un nombre a los volumes colocando el comando -v
y despues el nombre y el path donde se guardaran los datos:
docker container run -d --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=True -v mysql-db:/var/lib/mysql mysql
Bind mount
Bind Mount: Conectan un container file a un directorio.
Aqui se debe señalar la ruta al directorio usando el atajo ${pwd} en Windows
docker container run -d --name nginx -p 80:80 -v ${pwd}:/usr/share/nginx/html nginx
Ejemplo 1
Crear una base de datos con Postgres con un nombre de volume especifico y de una version especifica de postgres. Ver los logs y detener el container.
docker container run -d --name psql -e POSTGRES_PASSWORD=mypasswd -v psql:/var/lib/postgresql/data postgres:9.6.1
docker container logs -f psql
docker container stop <tres primeros numeros del container ID>
Ejemplo 2
Crear un proyecto con bind mount de un sitio web con la imagen de bretfisher/jekyll-serve.
docker container run -p 80:4000 -v $(pwd):/site bretfisher/jekyll-serve