• LOGIN
  • No hay productos en el carrito.

Login

Curso de Proxmox Taller 8.- Instalación de Contenedores LXC y Docker en Proxmox

En este taller veremos como instalar contenedores LXC y Docker en Proxmox, los contenedores son máquinas virtuales ligeras que comparten recursos con el host anfitrión y se comunican directamente con el kernel del mismo.

1.- Contenedores LXC

Para instalar un contenedor LXC en proxmox, tenemos primero que descargar una plantilla y luego crearlo con el botón «Crear CT»

1.1.- Descargar una plantilla LXC

Cambiar a la izquierda arriba a «Vista por Carpetas»

Seleccionar Centro de Datos ---> Almacenamiento ---> hanfs 
Editar y Seleccionar adicionalmente  en Contenido: "Plantillas de contenedor"

Luego Proxmox1--> hanfs ---> Contenido y click en el botón "Plantillas"

Instalaremos una plantilla de Ubuntu 24.04-standard, seleccionamos en el listado y click en "Descargar"

Ahora podemos cambiar a «Vista por Servidor»

1.2.- Instalación de un contenedor LXC

Seleccionamos el Servidor Proxmox 1 y click en el botón «Crear CT»

General
    Nombre del Host:           WebServer3
    Conjunto de Recursos:      desarrollo
    Contraseña:                PonerClaveSegura.123
Plantilla
    Almacenamiento:            hanfs
    Plantilla:                 Ubuntu_standard_24.04
Root Disk
    Almacenamiento:            hanfs
    ACLs:                      default
    Tamaño del disco:          8GB
CPU
    Núcleos:                   1
Memoria
    Memoria MB:                512
    Swap:                      512
Redes
    Nombre:                    eth0
    Dirección MAC:             auto
    Puente:                    vmbr2 (DMZ)
    Etiqueta VLAN:             no VLAN
    Límite de Velocidad:       unlimited
    IPv4:                      Static
    IPv4/CIDR:                 192.168.XX.2/24
    Puerta de Enlace:          192.168.XX.1 (Ip del SophosXG)
    IPv6:                      DHCP
DNS
    Dominio DNS:               aulautil.com
    Servidores DNS:            8.8.8.8
Confirmación
    Finalizado

Modificar regla en sophos para dar salida al contenedor a Internet.

Acceder al contenedor con el usuario root y la clave e instalar Apache

apt update
apt install apache2

Habilitar servicio automático

systemctl start apache2
systemctl enable apache2

Ver que este apaga la VM WebServer para que haya conflicto con el contenedor

Probar desde la laptop

2.- Contenedores Docker (Solo referencia)

Los contenedores Docker se derivan LXC y se han convertido en la opción mas popular para desplegar contenedores; y tiene las siguientes versiones

  • Versión para Linux con host anfitrión en Linux y Windows (a través de alphine)
  • Versión para Windows (sólo bajo Windows 2016 Server)

Tiene también un fork llamado podman; creado por Red Hat y que viene a mejorar la seguridad de docker.

2.1.- Ajustes iniciales del Host Anfitrión

El host anfitrión puede ser un equipo físico o virtual, el escenario más común es usar una máquina virtual.
Conectarse a la máquina virtual del servidor web Rocky Linux 8 (Corregir los NAT en el firewall)

Habilitar contabilidad de la memoria y el swap

vim /etc/sysconfig/grub
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 crashkernel=auto  vconsole.font=latarcyrheb-sun16 rhgb quiet cgroup_enable=memory swapaccount=1"

Actualizar grub

grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-install /dev/vda

Reiniciar

reboot

2.2.- Instalar Docker en el Host Anfitrión Rocky Linux 8}

Añadir repositorio de Docker en Rocky Linux 8

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Actualizar la distro

dnf update

Instalar docker

dnf install docker-ce docker-ce-cli containerd.io

Iniciar servicio

systemctl start docker

Habilitar arranque automático de docker

systemctl enable docker

Obtener información de la instalación docker

docker info

2.3.- Descarga de imágenes de Docker

Buscar imágenes de contenedores disponibles de centos, incluido tags

docker search centos | less

Buscar imágenes de contenedores disponibles de ubuntu

docker search ubuntu | less

Buscar imágenes de contendores disponibles de zentyal

docker search zentyal

Descargar la imagen oficial de CentOS 8

docker pull docker.io/centos

Ver imágenes descargadas

docker images

Ver contenedores en ejecución

docker ps

Ver todas las imágenes(contenedores) y sus tags

docker images

2.4.- Ejecutar un nuevo contenedor (instancia en ejcución de una imagen)

(si el contenedor no existe intentará descargar la imagen)

docker run -i -t docker.io/centos /bin/bash

ó

docker run -i -t docker.io/centos:latest /bin/bash

En otra consola ejecutar ps para ver los contenedores ejecutados y su ID

docker ps

Ejecutar dentro del contenedor

cat /etc/redhat-release

Instalamos paquetes utiles de red

yum -y install net-tools iproute

Verificamos la IP del contenedor

ip addr show

Verificamos la tarjeta del contenedor

ip link show

ping a la Ip del host anfitrión

ping 172.17.0.1

ping al DNS de google

ping 8.8.8.8

Creamos archivo vacío

touch hola
exit

Verificar los contenedores en ejecución

docker ps

Ejecutar un nuevo contenedor con un nuevo ID

docker run -i -t docker.io/centos /bin/bash

Verificamos que no existe archivo hola creado en el anterior contenedor

cat hola
exit

Al salir del container se detiene el mismo

2.5.- Ejecutar un contenedor apagado

Ver todos los contenedores y verifica el ID del contenedor que se quiere ejecutar

docker ps -a

Iniciar contenedor apagado

docker start IDContenedor

Acceder a contenedor que está ejecutandose en background

docker attach IDContenedor

2.6.- Ejecutar un nuevo contenedor y guardar los cambios como nueva imagen

Ejecutar un nuevo contenedor

docker run -i -t docker.io/centos /bin/bash

Instalar paquetes básicos

yum -y install net-tools vim iproute

En otra consola ejecutar ps para ver los contenedores ejecutados y su ID

docker ps

Guardar la imagen con sus cambios en un nuevo contenedor

docker commit 62342ea9b173 tuxito/centos8

Ahora volver a la consola del contenedor y salir

exit

Verificar la imagen guardada

docker images

Iniciar el contener guardado

docker run -i -t tuxito/centos8 /bin/bash

Verificar los cambios guardados ejecutando comandos que no estaban en la imagen original

ifconfig
route -n

En otra consola ejecutar ps para ver los contenedores ejecutados y su ID

docker ps

2.7.- Ver información de un contenedor

En otra consola ejecutar ps para ver los contenedores ejecutados y su ID

docker ps
docker inspect cc26dee81ff7

2.8.- Detener un contenedor por su ID

docker stop cb8f352245a5
docker ps

Detener un contenedor a la fuerza

docker kill cb8f352245a5

Verificar ejecución de contenedores

docker ps

Ver la lista de contenedores detenidos y en ejecución

docker ps -a

2.9.- Borrar un contenedor

Detener primero el contenedor

docker kill cb8f352245a5

Borrar el contenedor

docker rm cb8f352245a5

2.10.- Borrar una imagen

Se deberían borrar primero todos los contendores de la imagen Primero detener todos los contenedores de la imagen luego: Borra otodos los contenedores dependientes de la imagen

Buscar el id de la imagen

docker images

Borrar la imagen por su ID

docker rmi cb8f352245a5   (borrar la imagen docker.io/centos)

Ver lista de imágenes

docker images

2.11.- Borrar todos los contenedores detenidos

docker ps -a | awk '{print $1}' | grep -v CONTAINER | xargs docker rm

2.12.- Automatización de despliegue de imágenes con Dockerfiles

Un procedimiento común para desplegar las imágenes es hacer uso de Dockerfiles que son archivos con un lenguaje de script que permite automatizar el despliegue de servicios (instalación, configuración)

Para centos 7 existe el proyecto https://github.com/CentOS/CentOS-Dockerfiles

que son una serie de Dockerfiles para desplegar múltiples servicios

Para descargar estos Dockerfiles instalamos git en el host anfitrión

yum -y install git

Luego descargamos los Dockerfiles

git clone https://github.com/CentOS/CentOS-Dockerfiles

Veremos los archivos Dockerfiles en la carpeta

ls -l CentOS-Dockerfiles

Editar un archivo Dockerfile

Vamos a editar el Dockerfile de httpd y modificamos el FROM

vim CentOS-Dockerfiles/httpd/centos7/Dockerfile
FROM tuxito/centos8

Deployar una nueva imagen con el Dockerfile (ejemplo apache)

cd CentOS-Dockerfiles/httpd/centos7
docker build --rm=true -t tuxito/httpd .

Visualizar las imágenes generadas

docker images

2.13.- Ejecutar un container en background en un puerto específico de la máquina real

Previamente detenemos el servicio de apache del host anfitrión para que no haga conflicto con el contenedor de apache

systemctl stop httpd
systemctl disable httpd

Con la imagen deployada tuxito/httpd vamos a ejecutarlo como demonio en el puerto 80 de la máquina local, con la opcion restart=always el contenedor se ejecutará automáticamente cada vez que se reinicia docker y con la opción -l le damos un nombre al conetenedor para no estar buscando el ID

docker run --restart=always --name apache1 -d -p 80:80 -t tuxito/httpd /run-httpd.sh

Ejemplo Opcional Se puede usar un puerto distinto en la máquina real

docker run -d -p 8080:80 --name apache2 -t tuxito/httpd /run-httpd.sh

Natear con Endian el puerto 80 desde la Ip pública a la IP del VPS CentOS

Acceder con el navegador al VPS

Apagar los contenedores después

docker ps
docker stop apache1
docker stop apache2

Reiniciar docker

systemctl restart docker

Verificar los contenedores

docker ps
docker ps -a

2.14.- Gestión de Storage

Cuando se ejecuta un contenedor podríamos querer separar los volúmenes donde se guardan los datos, docker permite asignar un directorio en el cual el contenedor podrá alojar los datos y ser independiente de los contenedores.

Ej: vamos a desplegar el servidor web con el directorio /var/www/html asignado desde la máquina real

En la máquina real ejecutamos Creando un directorio para la data de los containers

mkdir /data
mkdir /data/html
vim /data/html/index.html
<h1>Hola Mundo</h1>

Contextos de SELINUX

Si SELINUX esta en modo enforce es necesario brindarle el contexto web al nuevo directorio de la máquina real para que pueda ser accedido en el contenedor

yum -y install policycoreutils policycoreutils-python
semanage fcontext -a -t httpd_sys_content_t "/data/html(/.*)?"
restorecon -FRvv /data/html

Ejecutando con el Storage asignado

Vamos ahora a ejecutar el contenedor con el directorio de la máquina VPS /data/html apuntado al directorio /var/www/html del contenedor

docker run -d -p 80:80 -v /data/html:/var/www/html -t tuxito/httpd /run-httpd.sh

Visualizar ahora en el navegador de nuestra laptop http://149.56.218.X

Detener el contenedor

docker ps
docker stop IDContainer

2.15.- Gestionando Memoria y Procesador

Ejemplo: Limitando la memoria a 1024M y el uso de 2 CPUs como máximo

docker run -d -p 80:80 -m="1024m" --cpu-shares=2 -v /data/html:/var/www/html -t tuxito/httpd /run-httpd.sh

Práctica: Deployar MariaDB en clase con almacenamiento para /var/lib/mysql, 2048 de memoria y 4 cores

2.16.- Exportar e Importar una imagen de docker

Exportar una imagen

docker save tuxito/httpd > /tmp/tuxito-httpd.tar

Importar la imagen de docker

docker load < /ruta/a/tuxito-httpd.tar
```*
ó
```bash
docker import /ruta/a/tuxito-httpd.tar
 

Course Reviews

Copyright 2020 © Aula Útil. Todos los derechos reservados.
X