Instalar Docker sobre contenedor LXC Proxmox
Os voy a mostrar como podemos virtualizar contenedores Docker bajo contenedores LXC Proxmox.
Hace ya un tiempo ya os contaba la diferencia entre contenedores Docker vs LXC, pero creo que no había creado un artículo donde un contenedor LXC sea el host para containers Docker sobre Proxmox, así que vamos a ello. Os dejo el artículo por si queréis leerlo:
Para la base del host LXC utilizaremos la imagen de Ubuntu. Las imágenes de los contenedores LXC, para los que estáis empezando en Proxmox, se descargan gratuitamente a un storage de los que tenéis configurando. Desde la gestión de vuestro proxmox, lo seleccionáis –> CT Templates -> Templates y elegís una para descarga. Así, una vez descargada, podéis seleccionarla al crear el contenedor LXC:
Elegimos un nodo de Proxmox, botón derecho -> Create CT:
Marcaremos en la pestaña General “Nesting” obligatorio el parámetro para luego que corra Docker en el sistema. Vamos completando el resto de opciones, como la password o el nombre:
Os enseño las opciones que he usado. No la arranquéis de momento:
Otra opción necesaria una vez creada para correr Docker en LXC, es un parámetro adicional. Editamos la máquina -> OPTIONS -> EDIT -> FEAUTURES:
Marcamos “keyctl” y marcamos OK:
Entramos en la consola y vamos lanzando la instalación de docker como en casi cualquier sistema Linux basado en Debian:
Lanzamos un update del sistema:
1 2 |
root@DOCKER01:~# apt update root@DOCKER01:~# apt upgrade -y |
Lanzamos la instalación del motor de Docker, que podéis seguir la ficha oficial, instalando el repositorio y luego los paquetes:
1 |
root@DOCKER01:~# apt install docker.io |
Habilitamos el servicio para el arranque:
1 |
root@DOCKER01:~# systemctl enable docker |
Arrancamos el servicio:
1 |
root@DOCKER01:~# systemctl start docker |
Comprobamos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
root@DOCKER01:~# systemctl status docker * docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; preset: enabled) Active: active (running) since Sat 2024-02-10 17:16:56 UTC; 3min 28s ago TriggeredBy: * docker.socket Docs: https://docs.docker.com Main PID: 4113 (dockerd) Tasks: 8 Memory: 54.0M CPU: 140ms CGroup: /system.slice/docker.service `-4113 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock Feb 10 17:16:55 DOCKER01 systemd[1]: Starting docker.service - Docker Application Container Engin> Feb 10 17:16:55 DOCKER01 dockerd[4113]: time="2024-02-10T17:16:55.585702190Z" level=info msg="Sta> Feb 10 17:16:56 DOCKER01 dockerd[4113]: time="2024-02-10T17:16:56.698810875Z" level=info msg="Loa> Feb 10 17:16:56 DOCKER01 dockerd[4113]: time="2024-02-10T17:16:56.823675480Z" level=info msg="Loa> Feb 10 17:16:56 DOCKER01 dockerd[4113]: time="2024-02-10T17:16:56.831114465Z" level=warning msg="> Feb 10 17:16:56 DOCKER01 dockerd[4113]: time="2024-02-10T17:16:56.831226209Z" level=info msg="Doc> Feb 10 17:16:56 DOCKER01 dockerd[4113]: time="2024-02-10T17:16:56.831454998Z" level=info msg="Dae> Feb 10 17:16:56 DOCKER01 dockerd[4113]: time="2024-02-10T17:16:56.855209723Z" level=info msg="API> Feb 10 17:16:56 DOCKER01 systemd[1]: Started docker.service - Docker Application Container Engine. lines 1-21/21 (END) |
Y lanzamos por ejemplo la creación de un contenedor docker con Portainer:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
root@DOCKER01:~# docker run -d \ --name="portainer" \ --restart on-failure \ -p 9000:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce Unable to find image 'portainer/portainer-ce:latest' locally latest: Pulling from portainer/portainer-ce 379538b6d68e: Pull complete 4ea3e2c3a39b: Pull complete 5171176db7f2: Pull complete 52e9438966a5: Pull complete 43d4775415ac: Pull complete c1cad9f5200f: Pull complete 22eab514564f: Pull complete 962b9fa821a2: Pull complete c153fefda5ce: Pull complete bed990c4615b: Pull complete 4f4fb700ef54: Pull complete Digest: sha256:908d04d20e86f07a50b0f1a029a111b89aa3089b7fc7fdf68ec1c71b025f36cd Status: Downloaded newer image for portainer/portainer-ce:latest eca7370355980da06290bb3a04d25d212b488ae22d5c2505a1fcb7827e9f3b7f |
Comprobamos:
1 2 3 |
root@DOCKER01:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES eca737035598 portainer/portainer-ce "/portainer" 56 seconds ago Up 40 seconds 8000/tcp, 9443/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp portainer |
Y nos conectamos a la página web, mediante la IP del contenedor LXC, portainer publica el puerto 9000. Para revisar la IP del contenedor LXC, por ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
root@DOCKER01:~# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether bc:24:11:92:7a:59 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 192.168.2.196/24 metric 1024 brd 192.168.2.255 scope global dynamic eth0 valid_lft 86316sec preferred_lft 86316sec inet6 fe80::be24:11ff:fe92:7a59/64 scope link valid_lft forever preferred_lft forever 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:94:1a:b8:f4 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:94ff:fe1a:b8f4/64 scope link valid_lft forever preferred_lft forever 5: veth422e425@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 2a:60:65:e1:85:65 brd ff:ff:ff:ff:ff:ff link-netnsid 1 inet6 fe80::2860:65ff:fee1:8565/64 scope link valid_lft forever preferred_lft forever |
Como veis en los datos anteriores, 192.168.2.196 para el contenedor LXC. Así que abrís la URL “http://192.168.2.196:9000/#!/init/admin” y magia:
Esta entrada complementará la entrada de soluciones para SOC Opensource, porque os permitirá lanzar aplicaciones en containers.
ENTRADAS RELACIONADAS CREACION SOC OPENSOURCE
-
- Crear SOC mediante herramientas OpenSource
- Implementar SOC: Instalación Suricata bajo Proxmox
- Instalar Docker sobre contenedor LXC Proxmox
- Implementar SOC: Instalación Wazuh
- Implementar SOC: Instalar TheHive, Cortex y MISP
- Implementar SOC: Instalación Patrowl
- Implementar SOC: Instalación Opensearch
- Implementar SOC: Decoders, Playbooks y Workflows
- Implementar SOC: Directorios Windows, Linux y MacOS a revisar
- Implementar SOC: Monitorización Completa con Prometheus, AlertManager, Grafana y Loki bajo Contenedores
- Implementar SOC: Instalar Security Onion sobre Proxmox
- Implementar SOC: Códigos de estado, Mensajes y Alertas
- Suricata: Cómo crear y testear reglas personalizadas
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?