Construcción de un Entorno Aislado de Escritorio de Slack con Docker
¡Hola! En este artículo, vamos a explorar cómo construir un entorno de ejecución aislado y portable para la aplicación de escritorio de Slack utilizando contenedores Docker.
¿Por qué Aislar Slack?
Slack es una herramienta súper popular para la colaboración y comunicación de equipos. Es genial para mantener a todos informados, pero a veces puede ejecutarse en segundo plano durante mucho tiempo. Esto a veces puede llevar a conflictos con otras aplicaciones en tu sistema. Por otro lado, las actualizaciones de Slack, complementos, archivos de configuración, etc., también pueden "contaminar" el entorno del sistema anfitrión. ¡Esto puede ser un poco problemático!
Ejecutar Slack en un contenedor Docker puede aislarlo efectivamente, logrando así:
- Evitar la contención de recursos con otras aplicaciones
- Prevenir la contaminación del entorno del sistema
- Lograr un entorno de ejecución portable y consistente
- Facilitar la copia de seguridad y restauración de configuraciones
Dockerfile
Construiremos la imagen del contenedor Slack basándonos en el sistema Debian 11 (Bullseye) ligero. Los siguientes son los pasos clave:
-
Instalar paquetes de software básicos: apt-transport-https, ca-certificates, curl, gnupg, etc., para preparar la adición de repositorios e instalación.
-
Configurar el entorno de idioma: Establecer el locale por defecto a en_US.UTF-8.
-
Agregar el repositorio de Slack: Obtener la clave del repositorio de fuentes oficiales de Slack y escribir la dirección de la fuente en sources.list.
-
Instalar Slack: Usando el comando apt, instalar el paquete slack-desktop y sus dependencias de ejecución basado en la fuente configurada.
-
Establecer el punto de entrada: Configurar /usr/lib/slack/slack como el comando de ejecución por defecto para el contenedor.
El script completo de Dockerfile es el siguiente:
FROM debian:bullseye-slim
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
RUN apt-get update && apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
locales \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
RUN echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \
&& locale-gen en_US.utf8 \
&& /usr/sbin/update-locale LANG=en_US.UTF-8
# Agregar el repositorio de slack debian
RUN curl -sSL https://packagecloud.io/slacktechnologies/slack/gpgkey | apt-key add -
RUN echo "deb https://packagecloud.io/slacktechnologies/slack/debian/ jessie main" > /etc/apt/sources.list.d/slacktechnologies_slack.list
RUN apt-get update && apt-get -y install \
libasound2 \
libgtk-3-0 \
libx11-xcb1 \
libxkbfile1 \
slack-desktop \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["/usr/lib/slack/slack"]
Ejecutando el Contenedor de Slack
Para ejecutar la imagen construida, puedes usar el siguiente comando:
docker run --rm -it \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix$DISPLAY \
--device /dev/snd \
--device /dev/dri \
--device /dev/video0 \
--group-add audio \
--group-add video \
-v "${HOME}/.slack:/root/.config/Slack" \
--ipc="host" \
--name slack \
jess/slack
Este comando realiza las siguientes asignaciones y configuraciones:
- Mapear la información de zona horaria del anfitrión al contenedor
- Compartir el socket Unix X11 del anfitrión, permitiendo al contenedor ejecutar aplicaciones GUI
- Establecer la variable de entorno DISPLAY del contenedor para conectarse al servidor X del anfitrión
- Exponer audio, video y otros dispositivos al contenedor
- Mapear el directorio .slack del usuario actual al contenedor para almacenamiento de configuración y caché
- Ejecutar el contenedor en el espacio de nombres IPC del anfitrión, permitiendo el uso del servidor X
De esta manera, puedes ejecutar de manera segura la aplicación de escritorio de Slack en un contenedor aislado y personalizable.
Resumen
Docker es una gran forma de desacoplar aplicaciones a nivel de escritorio como Slack del sistema anfitrión. Con construcciones automáticas basadas en Dockerfiles, puedes estar seguro de que Slack se ejecutará en un entorno consistente y portable, sin importar cómo luzca tu entorno local.