Contenido

Tipos de imágenes disponibles.

DockerHub es un repositorio público de imágenes Docker, allí podremos encontrar imágenes desde servidores Apache, Nginx, bases de datos como Mysql, Postgres, MongoDB e incluso servicios como Proxy, DNS o servidores Radius.

DockerHub nos facilita la implementación de determinados servicios, si estamos en busca de implementar un servidor Apache o aplicaciones específicas, podríamos primero buscarlas en el repositorio previamente.

¿Pero qué sucede si tenemos una implementación muy específica? En esos casos podremos desplegar directamente un contenedor con un servidor Linux e instalar los paquetes necesarios para la implementación, con esta opción, tendremos la flexibilidad de instalar los paquetes necesarios a medida y controlar el entorno.

Requisitos

Estos son los requisitos para poder instalar contenedores Docker en RouterOS:

  1. Instalar la versión 7.4beta4 disponible en Mikrotik.
  2. Contar con un Router Mikrotik con arquitecturas ARM, ARM64 o x86 (CHR).
  3. Descargar el paquete de contenedores, es requisito descarga la versión «Extra Packages».
  4. No es obligatorio, pero es recomendable contar con almacenamiento externo, para el uso de los contenedores.

Desplegando contenedores Docker en RouterOS

En esta guía utilizaremos la arquitectura x86 implementada sobre un router CHR en una máquina virtual. Al final de esta guía podrás desplegar el mismo contenedor en arquitectura ARM, con las imágenes adecuadas.

Luego de haber actualizado la versión de RouterOS e instalar el paquete container ya podremos comenzar.

Al finalizar la actualización, es necesario habilitar la función de contenedores, además de tener instalado el paquete, abrimos a una nueva consola CLI y ejecutamos el siguiente comando:

/system/device-mode/update container=yes

Es recomendable asegurar el router previamente.

Luego hay que reiniciar el router o la máquina virtual. Podremos verificar si el cambio se aplicó correctamente ejecutando el comando /system/device-mode/print. Deberíamos ver lo siguiente:

container1

Creando la red virtual

Para el uso de redes en los contenedores, es necesario crear interfaces virtuales

Escribimos lo siguiente en la consola para crear la red virtual del contenedor, junto con la dirección IP y gateway.

/interface/veth/add name=veth1 address=172.17.0.2/16 gateway=172.17.0.1

Creando un Bridge

Crearemos un Bridge añadiendo la interfaz virtual creada previamente y asignando una IP al bridge dentro de la misma red, con las siguientes líneas:

/interface/bridge/add name=docker

/ip/address/add address=172.17.0.1/16 interface=docker

/interface/bridge/port add bridge=docker interface=veth1

NAT

Para que nuestro contenedor disponga de salida a internet, es necesario crear un NAT de su red. Lo haremos con el siguiente comando:

/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.17.0.0/16

Configurando el repositorio para obtener la imagen de nuestro servidor

Gracias a esta nueva función, podremos descargar directamente a nuestro router la imagen del contenedor. Ejecutamos el siguiente comando en la CLI.

/container/config/set registry-url=https://registry-1.docker.io

Descargando la imagen del servidor Ubuntu en RouterOS

Hemos diseñado una imagen con una máquina Linux con la distribución Ubuntu, de esta forma evitamos crear la imagen por medio del Dockerfile y convertirla en .tar y subirla a nuestro Router.

Escribiremos lo siguiente en la consola:

/container/add remote-image=lanpixel/ubunutu_ssh:v1 interface=veth1

Verificando la instalación correcta

Ahora verificamos con el siguiente comando si todo es correcto:

/container/print

Deberíamos ver:

container p

Para iniciar el contenedor ejecutamos el comando:

/container/start 0

El contenedor tiene que estar en el estado de «running».

container mikrotik running

Verificando la conexión y accediendo a nuestro servidor

Ya con nuestro contenedor en ejecución, vamos a verificar si responde por ICMP.

ping mikrotik

Tenemos respuesta, nuestro último paso es intentar una conexión por SSH, lo haremos desde nuestro Mikrotik con el comando:

/system/ssh 172.17.0.2 user=root

terminal.png

Podremos ver que tenemos respuesta del servidor SSH, nos solicita un password, la misma es: lanpixel

Luego de ingresar el password, ya deberíamos estar dentro de nuestro contenedor Ubuntu!

ubuntu-mikrotik.png

 

[Actualización]

Con las últimas versiones de RouterOS, ya podemos acceder vía shell o consola, sin la necesidad de establecer una conexión por SSH. Esta última opción es útil, ya que simularía a conectarnos vía teclado y monitor.

El comando a ejecutar es:

/container/shell number=0

apt update

apt install curl -y

curl.png

Luego verificamos el correcto funcionamiento ejecutando: curl https://google.com

curl mikrotik

Del mismo modo, podremos instalar los paquetes que necesitemos para nuestro despliegue.

Arquitectura ARM

Esta guía está orientada a una arquitectura x86, en caso de utilizar un Routerboard con arquitectura ARM, la imagen a utilizar es:

/container/add remote-image=lanpixel/mkv7:arm interface=veth1

Accediendo desde nuestra LAN

Para acceder desde nuestra LAN a nuestro contenedor Ubuntu es necesario crear una regla de DST-NAT:

/ip firewall nat add action=dst-nat chain=dstnat dst-address=[IP_ROUTER] dst-port=2022
protocol=tcp to-addresses=172.17.0.2 to-ports=22

Hay que tener en cuenta que el puerto de acceso es el 2022 desde nuestra LAN.

Recomendaciones

Como hemos comentado anteriormente, es recomendable utilizar un disco externo para los despliegues de contenedores, en esta demo, no lo hemos utilizado, pero puedes consultar la documentación oficial para ver los pasos necesarios.

También es recomendable asegurar el router correctamente, ya que podríamos tener algún vector sobre un contenedor.

Descargar imágenes verificadas u oficiales. Puedes descargar el Dockerfile de esta demo desde aquí:

DockerfileDescarga

Enlaces adicionales

Documentación oficial y desplegando PiHole en RouterOS

Dockerfile y Dockerbuild

Notas finales

En esta guía de introducción hemos desplegado un contenedor Ubuntu por medio de una imagen disponible, pero podremos crearla por medio de Dockerfile con nuestros propios parámetros.

Gracias a esta nueva característica disponible en Mikrotik, tendremos la capacidad de implementar servicios adicionales en el mismo router, como una página web, una base de datos e incluso un control de DNS.

¡Nos vemos la próxima!

Compartir en Facebook Compartir en X Compartir en LinkedIn
Volver al blog
Ver todos los artículos