Docker parte 3: Exposición y volúmenes

by - 5/05/2019 03:42:00 p.m.

Exponiendo contenedores


Los contenedores están aislados del sistema y a nivel de red. Cada contenedor tiene su propia stack de red y sus propios puertos. Debemos redirigir los puertos del contenedor a los de la computadora y lo podemos hacer al utilizar este comando: 
  • docker run -d --name nombrecontenedor -p 8080:8080 imagen
Ej: 
  • docker run -d --name servidor -p 8080:8080 nginx
-d , -detach = Ejecuta indicando que la salida no la voy a esperar, así puedo seguir usando la consola.
--name : asignamos explícitamente el nombre del contenedor
-p portinterno:portexterno = Indicamos explícitamente por cual puerto de la máquina expondremos el puerto del contenedor.
imagen : la imagen que usaremos para el contenedor. ej nginx

Hay que considerar que en la máquina solo tenemos 1 puerto 8080, por lo que no podemos asignar a 2 container el mismo puerto de salida. Nos dará error "port is already allocated".

Permanencia de datos


Existen tres maneras de hacer permanencia de datos: 
  • Bind mount: Se da parte del sistema de archivo del host al contenedor.
  • Volume (nuevo):  Parecido a bind bound pero en un espacio solo manejado por docker.
  • tmpfs mount (temporal file system): el almacenamiento solo se mantiene en memoria en el contenendor. Si el contenedor se borra, el almacenamiento se pierde.

Bind mount:

  • docker run -d --name nombrecontenedor  -v pathcarpetahost:carpetacontenedor imagen 
Ej: 
  • docker run -d --name bd  -v /Users/camila/Projects/nuevacarpeta:/data/db mongo 
Si el volumen se modifica en el host cliente, se sincronizará automáticamente con el contenedor y viceversa.
Esto resulta de utilidad cuando desarrollamos con node, y queremos probar los cambios sin necesidad de reiniciar el contenedor, usando nodemon.

Volume:

  • docker volume create nombrevolumen 
  • docker run -d --name nombrecontenedor --mount src=nombrevolumen,dst=carpetacontenedor img
Ej: 
  • docker volume create dbdata 
  • docker run -d --name mongo-db --mount src=dbdata,dst=/data/db mongo
Podemos usar almacenamiento en la nube en lugar de este almacenamiento.

tmpfs mount:

Usan la RAM del equipo y su contenido desaparecerá al parar el contenedor. 
En caso de tener poca RAM, los ficheros se parasán al SWAP del equipo real. 

Ej:
docker run -d -it --name ubu3 --tmpfs /var/html/tempo ubuntu:17.10 

Salvo que indiquemos una limitación de espacio usando el modificador tmpfs-size=999bytes, el espacio que pueden ocupar los ficheros es ilimitado (o limitado por el espacio disponible de RAM) Este tipo de almacenamiento puede ser usado para almacenar ficheros de sesiones web, temporales o contenido que nos interese que se borre en cada rearranque del contenedor.

Utilidad: 

  • docker volume ls = Lista los volúmenes existentes.
  • docker volume prune = Elimina volúmenes no usados
  • Podemos verificar el volumen usado por el contenedor con docker inspect nombrecontenedor.

You May Also Like

0 comentarios