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.
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 \
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
Publicar un comentario