Joaquin Solís

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