Ir al contenido principal

Compartiendo directorios con contenedores LXD

Supongamos que estamos desarrollando una aplicación web y, para realizar las pruebas, utilizamos un servidor Apache 2 dentro de un contenedor LXD con Ubuntu Server. La idea de utilizar un contenedor en este contexto es para evitar tener que instalar todo el software y los frameworks que requiera nuestra aplicación en nuestra propia estación de trabajo. De este modo, si trabajamos en varios proyectos diferentes podemos tener cada proyecto en su propio contenedor y evitar los problemas derivados con los diferentes frameworks que estemos utilizando.

Para programar utilizamos algún editor de textos como Atom, Visual Studio Code o Sublime Text y, por ello, necesitamos editar constantemente los ficheros que se encuentran en el directorio /var/www/html de nuestro contenedor.  Para subir y bajar ficheros entre el contenedor y la máquina anfitriona podemos utilizar diferentes soluciones, por ejemplo, con la suite de comandos lxc file o bien conectarnos por FTP, FTPS, sFTP, ... Estas soluciones tienen el inconveniente de que cada vez que se añade, edita o borra un fichero del proyecto hay que subirlo al contenedor. 

La solución que andamos buscando consiste en compartir un directorio local con el contenedor, es decir, establecer una correspondencia entre nuestro directorio local que contiene el proyecto y el directorio /var/www/html del contenedor, de modo que podamos trabajar en nuestra estación de trabajo y que los cambios queden reflejados  automáticamente dentro del contenedor.

Configuración

Creamos el directorio local donde vamos a desarrollar nuestro proyecto, en este caso lo hacemos dentro del directorio proyecto de nuestro usuario personal:

$ mkdir proyecto/appweb

A continuación, verificamos nuestro UID. Si trabajamos en Ubuntu y no tenemos más usuarios, lo más normal es que sea 1000. De todos modos lo podemos comprobar con el siguiente comando:

$ id -u josrrp
1000

Donde josrrp es mi nombre de usuario, el lector tendrá que reemplazarlo por el suyo propio. Ahora paramos el contenedor, en mi caso se llama webserver y ya tiene el software necesario instalado: 

$ lxc stop webserver

Con el siguiente comando creamos la correspondencia entre el directorio local  y el directorio /var/www/html del contenedor:

$  lxc config device add webserver www disk \
source=/home/josrrp/proyecto/appweb \
path=/var/www/html
Device www added to webserver

Y por último, con este otro comando establecemos la correspondencia tanto del UID como del GID de nuestro sistema operativo anfitrión, 1000, con el UID y el GID del sistema operativo huésped del contenedor, 33. Este valor es el que tiene asignado el usuario y grupo www-data que utiliza el servidor web.

$ lxc config set webserver raw.idmap "both 1000 33"

Ahora ya podremos iniciar de nuevo nuestro contenedor y trabajar sin problemas, con nuestro IDE favorito, directamente en el directorio que hemos compartido.



Comentarios

Entradas populares de este blog

Instalando Moodle con Docker

En este blog ya hemos hablado en varios artículos sobre la tecnología de contenedores, pero hasta ahora nos habíamos centrado en LXD . En este artículo vamos a explicar cómo podemos instalar Moodle en menos de un minuto (dependiendo de la velocidad de descarga que se tenga, se puede alargar un poco más) usando contenedores. Acerca de Moodle No voy a explicar que es Moodle ni como instalarlo desde cero, para eso existe en Internet multitud de tutoriales. Lo que sí quiero comentar es que para instalar Moodle hace falta un servidor web con PHP . Además requiere que PHP tenga instalado una serie de componentes adicionales. Por otro lado, necesitamos tener instalado en el servidor un sistema de gestión de bases de datos relacional, ya que Moodle almacena la información en él. Normalmente se utiliza MySQL , MariaDB o PostgreSQL . También debemos crear una base de datos específica para Moodle con su respectivo usuario. Durante la instalación Moodle creará las tablas necesari

Analizando el protocolo HTTP

El objetivo de este artículo es el de explicar de forma práctica el funcionamiento del protocolo HTTP y entender el intercambio de datos que se realiza entre los servidores y los clientes web. Por otro lado, cubre la necesidad de tener un texto en español que sirva de referencia a mis alumnos de Servicios en Red  a la hora de realizar la práctica de clase  HTTP-1 . La idea es ver de forma práctica el funcionamiento interno del protocolo HTTP . Para ello, vamos a utilizar un par de herramientas de la línea de comandos de Linux ( telnet y netcat ), con las que vamos a simular el comportamiento tanto del navegador como del servidor web. HTTP es un protocolo de la capa de aplicación, y como muchos otros protocolos de esta capa, está basado en texto. De hecho, los comandos que envía el navegador al servidor y sus respuestas se pueden leer perfectamente en inglés. Por defecto, HTTP utiliza el puerto 80 TCP y HTTPS  el puerto 443 TCP. Los ejemplos que vamos a ilustrar serán

ZFS, Primera parte

Cuando el año pasado instalé LXD y lo configuré por primera vez, me encontré que podía utilizar, de hecho se recomienda, el sistema de ficheros ZFS para albergar los contenedores. Posteriormente, cuando instalé Proxmox en el servidor de mi departamento, me encontré de nuevo con  ZFS . Anteriormente no le había prestado mucha atención a  ZF S , normalmente utilizo EXT4 o XFS , pero estaba claro que había una estrecha relación entre  ZFS  y los sistemas de virtualización. ZFS  es un sistema de ficheros desarrollado por Sun Microsystems  (creadores también del lenguaje de programación Java ), posteriormente la empresa fue adquirida por Oracle , actuales propietarios. OpenZFS  es la variante libre y posee una licencia de tipo  CDDL , que aunque es software libre, es incompatible con GPL . Por este motivo, el kernel de Linux no lo incorpora de serie. Sin embargo, los usuarios pueden instalarlo sin problemas ya que se encuentra en los repositorios de la mayoría de las distribucione