Docker parte 3: Exposición y volúmenes
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
--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
- 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.


0 comentarios