Conceptos fundamentales de virtualización
Los entornos virtualizados tradicionales mediante máquinas virtuales presentan limitaciones en eficiencia. Los contenedores Linux (LXC) ofrecen una alternativa mediente aislamiento a nivel de proceso. En lugar de virtualizar hardware completo, estos encapsulan procesos individuales creando un entorno controlado donde los recursos percibidos son abstractos.
Esta arquitectura presenta ventajas significativas:
- Inicio instantáneo: Los contenedores se ejecutan como procesos nativos del sistema anfitrión, eliminando la sobrecarga de arrancar un sistema operativo completo
- Optimización de recursos: Los contenedores comparten el kernel del host y consumen únicamente los recursos necesarios, permitiendo mayor densidad de despliegue
- Portabilidad reducida: Los artefactos contienen solo componentes esenciales, generando imágenes mucho más ligeras que las máquinas virtuales tradicionales
Implementación en Ubuntu
Para isntalar Docker Engine en sistemas Ubuntu modernos, ejecute estos comandos actualizados:
sudo apt update
sudo apt install -y ca-certificates curl
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
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
Finalice con:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
Configuración de repositorios
Para acelerar descargas en entornos con restricciones de red, modifique el daemon:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<'EOF'
{
"registry-mirrors": ["https://mirror.azure.cn"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Ejemplo práctico: Aplicación web en Python
Cree un servicio simple usando Flask. Primero, el archivo app.py:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def saludo():
return "Servicio contenerizado operativo"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
El archivo Dockerfile correspondiente:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "app.py"]
Donde requirements.txt contiene:
flask==2.3.3
Construcción y ejecución
Genere la imagen y lance el contenedor:
docker build -t servicio-web:1.0 .
docker run -d -p 8000:8000 --name instancia-servicio servicio-web:1.0