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...

  1. Crear una red personalizada y conectar los 3 contenedores a esa nueva red.
  2. 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
  3. 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