Docker y VirtualBox

Ambiente Docker virtualizado, para el desarrollo y la ejecución de contenedores.

Es una, guía hecha lo más sencillamente posible y explicada gráficamente para lograr el despliegue de un ambiente GNU Linux para su uso con Docker mediante VirtualBox, ha sido una necesidad real esto a la hora de usar un sistema como Windows para la ejecución de contenedores, personalmente me parece muy incómodo Windows para el desarrollo de aplicaciones que terminaran hospedándose en una nube GNU Linux.

Aplicando esta abstracción, podemos tener las ventajas de seguir en nuestro sistema operativo Windows, obteniendo el mejor rendimiento y compatibilidad posible con los entornos de producción en Cloud.

Requisitos

  • Windows, MacOS, Unix.
  • VirtualBox.
  • Cliente SSH (en Windows uso la Terminal de Windows que está en la Microsoft Store).
  • Visual Studio Code (Con 2 extensiones Remote SSH y VirtualBox).

Proceso de creación del ambiente

Virtualbox

How to Install VirtualBox on an Apple Silicon Mac Proceso de instalación para MacOS.

En Windows descargamos VirtualBox desde la web oficial de Oracle Downloads – Oracle VM VirtualBox.

Descarga de Virtualbox.
Descarga de Virtualbox.

Y descargamos e instalamos las librerias de Visual C++ Redistributable. (Solo necesario en Windows)

Librerías Microsoft Visual C++.
Librerías Microsoft Visual C++.

Una vez hemos instalado las librerías de MVC++ procedemos con la instalación de VirtualBox.

Instalación Oracle VirtualBox.
Instalación Oracle VirtualBox.
Configuración de las interfaces de red.
Configuración de las interfaces de red.

Linux

Una vez hemos finalizado la instalación de VirtualBox, descargamos la imagen Linux desde el sitio Osboxes.org – Ubuntu Server Virtual Machine

https://sourceforge.net/projects/osboxes/files/v/vb/59-U-u-svr/22.04/64bit.7z/download

He escogido Ubuntu Server 22.04 Jammy Jellyfish.

Username: osboxes
Password: osboxes.org
Open VM Tools: Not Installed
Keyboard Layout: US (Qwerty)
VMware Compatibility: Version 10+

Descomprimimos la imagen de virtualbox.

Debemos tener en cuenta que este es el disco duro de nuestra máquina virtual, lo guardaremos en un lugar seguro donde no lo borremos por accidente.

Instalación del ambiente en la máquina virtual de Oracle.

Siga los pasos de la siguiente descripción gráfica.

Creación de la máquina virtual parte 1
Creación de la máquina virtual parte 1
Creación de la máquina virtual parte 2
Creación de la máquina virtual parte 2

Una de las ventajas de este ambiente, es que podemos asignar los recursos de manera limitada.

Creación de la máquina virtual parte 3
Creación de la máquina virtual parte 3
Creación de la máquina virtual parte 4
Creación de la máquina virtual parte 4
Finish
Finish

Configuración e inicialización del ambiente en la máquina virtual de Oracle.

Primero configuramos los puertos de la máquina virtual, para que el puerto 22, 80 y 443 de la máquina virtual sean los mismos para el host, esto lo podemos usar a conveniencia dependiendo de nuestras necesidades, en este ejemplo básico usaremos los puertos más comunes.

Configuración de red
Configuración de red.
Iniciando la maquina virtual
Iniciamos la máquina virtual.
Permitimos VirtualBox en el firewall de Windows.
Permitimos VirtualBox en el firewall de Windows.

Conexión, gestión del ambiente GNU Linux

Para conectarnos necesitaremos un cliente ssh (en mi caso la terminal de Windows) .

con el siguiente comando:

$ ssh osboxes@localhost
Acceso por ssh.
Usuario: osboxes Contraseña: osboxes.org

Recomiendo cambiar nuestra contraseña con el comando passwd .

Instalación de Docker y Docker Compose

Actualizamos el índice de paquetes e instalamos los paquetes para permitir el uso de un repositorio a través de HTTPS:

sudo apt update
sudo apt install -y ca-certificates curl gnupg 

Agregamos la llave GPG oficial de Docker:

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

Utilice el siguiente comando para configurar el repositorio:

echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Actualizamos el índice del repositorio nuevamente:

apt update

Instalamos Docker Engine, containerd y Docker Compose:

sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Agregamos nuestro usuario al grupo Docker:

sudo usermod -aG docker $USER
newgrp docker

Configuramos Docker para que arranque en el inicio del sistema:

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

A esta altura ya podemos utilizar Docker desde nuestra terminal conectada por ssh a la máquina virtual, a continuación veremos como conectarnos con Visual Studio Code y desarrollar o ejecutar nuestra primera aplicación en un ambiente Linux puro de 64 bits, emulando las condiciones generales de la nube.

Visual Studio Code y nuestro primer contenedor.

Una vez tenemos instalado Visual Studio Code (lo pueden bajar de aca ) lo ejecutamos e instalamos las siguientes extensiones.

  • VirtualBox (Encender y apagar la VM)
  • Remote – SSH (Conexión hacia la maquia Virtual)
Extensiones de VSC.
Extensiones de VSC.

Conexión y creación de un proyecto.

Nos conectamos por ssh a la máquina virtual, siga los pasos de la descripción gráfica.

Conectar al Host.
Conectar al Host.
Agregamos el nuevo Host.
Agregamos el nuevo Host.
ssh osboxes@localhost
ssh osboxes@localhost
Seleccionamos donde guardar nuestra configuración ssh.
Seleccionamos donde guardar nuestra configuración ssh.
Conectamos la ventana actual.
Conectamos la ventana actual.
Escogemos "localhost" el cual es nuestro puerto 22 del Host.
Escogemos «localhost» el cual es nuestro puerto 22 del Host.
Sistema operativo
Sistema operativo.
Damos acceso con nuestra contraseña del usuario Linux.
Damos acceso con nuestra contraseña del usuario Linux.
Creamos la carpeta del nuevo proyecto y la abrimos en el editor.
Creamos la carpeta del nuevo proyecto y la abrimos en el editor.
Aceptamos que confiamos en el autor de la carpeta.
Aceptamos que confiamos en el autor de la carpeta.
Creamos un nuevo archivo docker-compose.yml
Creamos un nuevo archivo docker-compose.yml
Confirmamos.
Confirmamos.

Agregamos el siguiente contenido al archivo docker-compose.yml:

version: "3"

services:
    client:
        image: nginx
        ports:
            - 80:80

Y ejecutamos en nuestra terminal, desde el directorio del proyecto donde yace el archivo docker-compose.yml:

docker compose up -d
Podemos visualizar el contenedor con el comando docker ps
Podemos visualizar el contenedor con el comando docker ps .

Visitamos la dirección http://localhost desde nuestro browser y podremos observar que nuestro contenedor marcha a la perfección.

Nginx está vivo.
Nginx está vivo.

Conclusión

Este ambiente clásico, virtualizado desde VirtualBox me ha parecido una de las mejores alternativas para usar Docker en otro sistema operativo no Linux, una de las razones principales es que Docker Desktop consume muchos recursos, cuando hacemos la abstracción desde VirtualBox o VMware, asignamos una cantidad de recursos limitada, en mi caso he asignado 1 GB y puedo cambiar ese límite en el futuro si es necesario.

Windows y MacOS hacen caso omiso, no tienen una limitación de recursos estándar, deben usar un hipervisor para crear una abstracción del kernel Linux mediante WSL2, pero está limitada a las configuraciones de sus desarrolladores, pudiendo consumir más de 4 GB de ram sin estar ejecutando algún contenedor, en los nuevos modelos ARM de MacOS he tenido dificultades con ciertas imágenes que no tienen dependencias fabricadas para ARM, pero sí están en X64.

Tengo otro artículo comentando las desventajas más grandes de usar Docker fuera de su sistema operativo nativo, puedes verlo en el siguiente enlace.

https://blog.saiyans.com.ve/2023/07/14/docker-y-sus-desventajas-fuera-de-linux/

Administrador de sistemas, un curioso amante de las tecnologías.

Deja un comentario

Tu dirección de correo electrónico no será publicada.