Imagen de Docker para ejecutar Visual Studio Code
Presentación
En el presente proyecto se desarrolla la construcción y el uso de una imagen de docker para ejecutar el Visual Studio Code, el objetivo es tener totas la aplicaciones instaladas en contenedores aislados de tal modo que sólo se habilitan cuando se usan y de ser necesario se puedan eliminar totalmente o trasladar a otro equipo
Construccion de la imagen docker
Para la construcción de la imagen usaremos un archivp Dockerfile y un archivo start.sh que se ven a continuación:
El siguiente es el archivo Dockerfile:
# Usar la imagen oficial de Python como base
FROM python:3.12-slim
# Definir el usuario y el grupo
ARG USER=operador
ARG UID=1000
ARG GID=1000
# Crear grupo y usuario sin privilegios
RUN groupadd --gid $GID $USER && \
useradd --uid $UID --gid $GID --create-home --shell /bin/bash $USER && \
usermod -aG dialout $USER # Agregar al grupo dialout
# Crear el directorio de trabajo y asignarle permisos
WORKDIR /app
RUN chown -R $USER:$USER /app
# Instalar dependencias
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
curl \
tk \
python3-tk \
xvfb \
openssh-server \
sudo \
gnupg2 \
&& curl -sSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft-archive-keyring.gpg \
&& echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list \
&& apt-get update \
&& apt-get install -y code \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Configurar SSH
RUN mkdir -p /var/run/sshd
RUN echo 'root:password' | chpasswd
RUN echo 'operador:password' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
# Permitir que el usuario operador ejecute sudo sin contraseña
RUN echo "$USER ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
# Exponer el puerto SSH
EXPOSE 22
# Configurar X11 Forwarding (para Visual Studio Code)
ENV DISPLAY=host.docker.internal:0
ENV XAUTHORITY=/home/$USER/.Xauthority
# Copiar el script start.sh y cambiar permisos (como root)
COPY start.sh /home/$USER/start.sh
RUN chown $USER:$USER /home/$USER/start.sh && \
chmod +x /home/$USER/start.sh
# Cambiar al usuario no root
USER $USER
# Comando de inicio
CMD ["/home/operador/start.sh"]
El siguiente es el archivo start.sh:
#!/bin/bash
# Iniciar el servidor SSH
sudo service ssh start
# Iniciar Visual Studio Code (usando X11 forwarding)
code --no-sandbox --user-data-dir=/home/operador/vscode-data
Ambos archivos dberan estar en la misma carpeta de modo que quedecon la siguiente estructura de archivos:
A continuación debemos abrir una terminal en la carpeta donde se encuentran los archivos y construimos la imagen ejecutando el siguiente comando (cabe aclarar que debemos tener el Docker instalado y configurado).
docker build -t img_vstudio .
Sobre la linea de comando anterior caben dos observaciones: el nombre de la imagen img_vstudio puede ser ese o el que ustedes deseen, pero si lo cambian recuerden de modificar las instruciones que usaremos a continuacion. Y en segundo lugar no olvidarse del punto al final de la linea que debe ir siempre y separado con un espacio despues del nombre.
Si todo ha salido bien veremos lo siguiente en la terminal:
Puesta en marcha contenedor docker
Antes de iniciar el contenedor debemos habilitarlo a acceder al servidor gráfico X11 con siguiente comando: ( de tener otro servidor grafico aegurarse que el contenedor tenga acceso al mismo)
xhost +local:docker
A continuacion debemos iniciar el contenedor y lanzar el Visual Studio Code, lo que haremos ejecutando el siguiente comando:
docker run -d --name cont_vstudio \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=$DISPLAY \
-v $HOME/.Xauthority:/home/operador/.Xauthority:ro \
-p 2222:22 \
img_vstudio
Aca tambien cabe considerar que el nombre colocado después de --name es el del contenedor y pueden modificarlo a su gusto, pero el del final img_vstudio debe ser necesariamente igual al que le hayan dado a la imagen en el paso anterior
Si todo ha salido bien veremos la ventana de ejecucion del Visual Studio Code donde podremos empezar a configurarlo a nuestro gusto.
Detención y puesta en marcha del contenedor Docker
Es una buena práctica detener el contenedor que lo haremos con el siguiente comando teniendo siempre en cuenta que debemos nombrar el contenedor por el nombre que le asignamos al crearlo, en nuestro caso la sintaxis es:
docker stop cont_vstudio
Cuando queramos volver a utilizarlo lo arrancaremos con el siguiente comando teniendo siempre en cuenta que debemos nombrar el contenedor por el nombre que le asignamos al crearlo y que la placa debe estar conectada al puerto /dev/ttyUSB0 o al que le hayamos asignado al poner en marcha el contenedor la primera vez, en nuestro caso la sintaxis es:
docker start cont_vstudio
Conexion al contenedor
Este contenedor cuenta con un servidor ssh que nos permite acceder a su contenido para poder subir al mismo archivos de programas o para bajarlos a nuestra computadora
Para acceder al servidor shh simmplemete usamos el siguiente comando desde una terminal:
ssh -v -p 2222 operador@localhost
A continuacion ingresamos cuando nos pide la clave ingresamos "password" que es la predefinida en el Dockerfile si queremos modificarla debemos cambiarla en el mismo y realizar tot el proceso de creacion de imagen de nuevo y veremos los siguiente en la terminal:
Ahi podemos subir y bajar archivos del contenedor con los camndos de la terminal, tambien es posible agregarlo al nautilus como un servidor para acceder a traves del mismo.
La imagen de este proyecto se puede descargar desde Docker Hub