Docker Engine Network y Storage / Docker Registry
Crear redes y volumenes en contenedores
Marcelo Denis
Ing. Informático


@mdrm016

mdrm016@gmail.com
Overview
- Gestión de puertos
- Redes en Docker
- Administración de redes

- Docker Network
- Docker Storage
- Tipos de volúmenes
- Administración de volúmenes
- Docker Registry
- Implementación de un registry
- Administrar imágenes en registry
- Ejercicios
Docker Network
Estructura de Docker

Networking
-
Un contenedor puede contener aplicaciones que necesitan ser accedidas desde el exterior.
- Nginx
- Rest API
- Bases de Datos
- Otros Servicios
-
Por defecto los puertos de los contenedores son privados y no pueden ser accedidos.
- Debemos mapearlos a puertos del host anfitrion para hacerlos públicos.
- El localhost del contenedor es diferente que el localhost del host.
Gestión de Puertos

Client
80
8080
http://localhost:8080
Container
Host
Gestión de Puertos
Con el argumento -P se asigna puertos aleatorios del host a los puertos de escucha del contenedor.
docker run -P nginx
Con el argumento -p podemos mapear explícitamente un puerto del host a un puerto del contenedor.
docker run -p 8080:80 nginx
Host
Contenedor
Redes en Docker
- Docker manjea por debajo una arquitectura de redes.
- Permite conectar entre contenedores.
docker network ls

Redes en Docker
- bridge: Driver por defecto. Permite conectar contenedores independientes a travéz de la red del anfitrión.
- host: En esta red, los contendores utilizan la red del host anfitrion por lo que se elimina el aislamiento del contenedor en la red de docker.
- null: Es un contenedor que no tiene red.
- overlay: Permite la conexión entre dos contenedores independientes en diferentes demonios Docker.
- ipvlan: Brindan a los usuarios un control total sobre las direcciones IPv4 e IPv6.
- macvlan: Le permiten asignar una dirección MAC a un contenedor, haciéndolo aparecer como un dispositivo físico en su red.
Inspeccionar un Contenedor
docker inspect <CONTAINER_ID>

Inspeccionar una Red
docker network inspect <network>

Crear Redes
docker network create --help

Crear Redes
docker network create --help
docker network create red1
docker inspect red1
docker network create -d bridge red2
docker network create --subnet=192.168.0.0/16 --gateway=192.168.0.1 red3
Asociar Contenedor a una Red
docker inspect ubuntu1
docker run -it --name ubuntu1 --network red1 ubuntu

Asociar Contenedor a una Red
docker run -d --name nginxA --network red1 nginx
docker inspect nginxA

Asociar Contenedor a una Red
apt-get install iputils-ping --> ubuntu1
ping 172.19.0.3

Asociar Contenedor a una Red
docker network connect red2 ubuntu1
docker inspect ubuntu1

La red none
docker run --network none --name hola -d -ti centos

Eliminar Redes
docker network rm red1

Docker Storage
Docker Volúmenes
Los volúmenes nos permiten almacenar información persistente en el contenedor.
Los datos almacenados en el contenedor es temporal, al eliminar el contenedor se elimina toda la información del mismo.
Por ejemplo Base de Datos, filesystem, etc.

Tipos de volúmenes
- Host: Los datos se almacenan en un directorio del host.
- Anonymus: No se define un directorio, en cambio se genera el directorio de forma aleatoria.
- Named Volumes: Tienen un nombre y es administrado por docker.
Crear Volumen
docker volume create dbdata

Crear Volumen
docker run -d --name db --mount src=dbdata,dst=/data/db mongo

Crear Volumen en un Contenedor
docker run -it -v /info --name ubuntu1 ubuntu bash

Inspeccionar Volumen
docker volume ls
docker inspect dbdata

Eliminar Volumen
docker volume rm <volume_name>

Directorios Compartidos
docker run -it -v C:/docker_files:/docker_files_container --name ubuntu1 ubuntu

Crear Volúmenes Personalizados
docker volume create <nombre_volumen>

Asociar Volúmenes Personalizados
docker run -it --name ubuntuA -v new_volume:/info ubuntu bash

Montajes TMPFS
Un montaje de este tipo es temporal y solo persiste en la memoria del host anfitrión.

Docker Registry
¿Qué es?
Docker Registry es una aplicación del lado del servidor sin estado y altamente escalable que almacena y le permite administrar y distribuir imágenes de Docker.
Docker Registry es de código abierto.
Puede encontrar el código fuente en GitHub.
Nos permite almacenar las versiones de una misma imagen.
Implementar un Registry
docker pull registry
docker run -d -p 5000:5000 --name mi_registro registry

Subir Imágenes del Registro
docker tag nginx localhost:5000/mi-nginx
docker images localhost:5000/mi-nginx
docker push localhost:5000/mi-nginx

Bajar Imágenes del Registro
docker pull localhost:5000/mi-nginx

Cambiar la Ruta de Almacenamiento del Registry
docker run -d --name repositorio1 -p 5000:5000 -v /register_docker:/var/lib/registry registry
docker tag nginx localhost:5000/nginx:repoPrueba
docker push localhost:5000/nginx:repoPrueba
Ejercicios
Utilizando los 3 contenedores de la clase anterior...
- Crear una red personalizada y conectar los 3 contenedores a esa nueva red.
- Verificar el punto de montaje del contenedor de BD y luego crear un volumen con nombre para luego redirigir los datos almacenados en la BD en el nuevo volumen
- Tanto para los contenedores de Backend y Frontend conectar a volúmenes del host donde se haga el desarrollo del código, de tal manera a utilizar los contenedores como ambiente de desarrollo.
Referencias
Sumary

- Estructura de docker
- Gestión de puertos
- Redes bridge, host y null además de overlay, ipvlan y maclan
- Crear redes, asociar contenedor a una red la red none y eliminación de redes
- Storage
- Docker Registry
- Ejercicios
- Implementación de un registry
- Subir y bajar imágenes
- Cambio de la ruta de almacenamiento de imágenes
- Host, Anonymous y Named Volumes
- Crear y Eliminar volúmenes, directorios compartidos y volúmenes personalizados
- Montajes TMPFS
- Mejorar la gestión de contenedores aplicando los nuevos conceptos de esta clase
Docker Engine Network y Storage / Docker Registry
By Marcelo Rafael Denis Meza
Docker Engine Network y Storage / Docker Registry
- 156