Estación de trabajo en un contenedor acoplable

¿Para qué? Siempre me vienen a la mente todo tipo de ideas y algunas de ellas quiero probarlas de inmediato, pero la estación de trabajo no siempre está a la mano, así que configuré el IDE para todo lo que se me ocurre. Como resultado, los dispositivos comenzaron a estar desordenados, y se hizo difícil mantenerlos y actualizarlos.

Para resolver este problema, decidí colocar un "cuaderno" en la nube, que se actualizaría diariamente y eliminaría toda la basura acumulada. Y para trabajar, conéctese de forma remota.

imagen

Como resultado, sin sospecharlo, creó una herramienta muy conveniente para resolver una gran cantidad de tareas: una computadora portátil, un sitio de prueba, para ver lo que el teléfono no muestra, una caja de arena segura y ejecutar scripts para programas que funcionan solo en la GUI y muchos otros. etc. Y en el artículo quiero compartir el método de creación de dichos contenedores.

Para crear dicho contenedor, debe escribir su Dockerfile. Y en el artículo describiré todo el proceso de su creación. Quien no quiere crearse a sí mismo, pero quiere tomarlo e intentarlo, entonces al final del artículo habrá enlaces a imágenes listas para usar.

sistema operativo


Cualquier Linux lo hará. Personalmente, prefiero el hermoso OpenSuse, pero al comparar su consumo de memoria con CentOS decidí elegir el último. De hecho, cuanto menos memoria consume un contenedor, más puede ahorrar en su alojamiento.

Comencemos a crear un dockerfile:

FROM centos:7

Acceso remoto


Para conectarse al contenedor, debe configurar el servidor de acceso remoto VNC. Se deben entender dos factores para esto:

  1. El sistema no tiene monitor. Por lo tanto, tendrá que ser emulado. Hay un servidor especial x0vncserver para esto.
  2. El servidor VNC no debe ser ingenioso. Después de todo, tienes que pagar por ellos. Y los retrasos en la transmisión de la señal deben ser mínimos, de lo contrario, causarán molestias.

Para resolver ambos problemas, elegí TigerVNC Server para el servidor y TightVNC para el cliente. TigerVNC Server se incluye en la entrega de cualquier Linux, ligero, rápido, y también admite el trabajo sin monitor a través de x0vncserver. El cliente TightVNC proporciona una transferencia de imágenes tan rápida que parece que no es una conexión remota, sino un programa que se ejecuta en una computadora.

Extienda Dockerfile:

FROM centos:7

RUN yum install -y epel-release dnf \
        && \
        dnf install -y \
            tigervnc-server \
        && \
        yum clean all && dnf clean all \
        && \
        rm -rf /var/cache/yum/* && rm -rf /var/cache/dnf/*

Después de instalar los programas, limpiamos el caché para aligerar el peso de la imagen.

Escritorio


Realmente me encanta KDE con el tema Breeze, pero KDE es un escritorio muy glotón. Gnome y sus derivados eran aún más glotones. Xfce, el hielo no es demasiado hermoso. Afortunadamente, hay una solución: el escritorio LXQT con el tema Kde-Plasma.

Instala el escritorio:

FROM centos:7

RUN yum install -y epel-release dnf \
        && \
        dnf install -y \
            tigervnc-server \
            openbox obconf-qt \
            lxqt-about lxqt-common lxqt-config lxqt-globalkeys lxqt-notificationd \
            lxqt-openssh-askpass lxqt-panel lxqt-policykit lxqt-qtplugin lxqt-runner \
            lxqt-session pcmanfm-qt \
            dejavu-sans-mono-fonts \
            xterm nano htop expect sudo \
        && \
        yum clean all && dnf clean all \
        && \
        rm -rf /var/cache/yum/* && rm -rf /var/cache/dnf/*

Un poco más y puedes correr.

Creación de usuario


En el contenedor es necesario trabajar desde algún usuario. Para hacer esto, créelo y establezca una contraseña, así como establezca una contraseña para el usuario raíz:

... Dockerfile

ENV HOME=/home/headless

RUN /bin/dbus-uuidgen --ensure && \
        useradd headless && \
        echo "centos" | passwd --stdin root && \
        echo "centos" | passwd --stdin headless

Aquí sin cabeza está el usuario que creamos y de quien trabajaremos, "centos" es la contraseña especificada por el usuario y el usuario root. Es mejor pasarlo de parámetros externos cuando se inicia el contenedor, pero incluso de esta forma el contenedor no será vulnerable, porque la conexión estará protegida por contraseña en VNC a través de la contraseña en los argumentos.

Configurar el inicio del servidor vnc


Para comenzar, necesita un script auxiliar que configurará nuestro servidor VNC:

#!/usr/bin/expec

spawn /usr/bin/vncserver :1 -fg -geometry 1820x960
expect "Password:"
send "$env(password)\r"
expect "Verify:"
send "$env(password)\r"
expect "Would you like to enter a view-only password (y/n)?"
send "n\r"

set timeout -1
expect eof

Debe colocarse al lado del Dockefile, luego se incluirá en el contenedor y el programa comenzará desde él. En este archivo, debe especificar la resolución en la que planea trabajar, por ejemplo, tengo configurado 1820x960. Si especifica menos del tamaño de la ventana del cliente, el servidor puede bloquearse debido a la falta de memoria. Si especifica más, entonces la imagen deberá ser escalada y los elementos del escritorio serán demasiado pequeños. También en este script, se establecerá una contraseña a partir de las variables que se pasarán en los parámetros de inicio del contenedor.

Queda por copiar este archivo en el contenedor y agregar los parámetros para su lanzamiento:

... Dockerfile

COPY ./startup.sh ${HOME}
RUN mkdir -p ${HOME}/.vnc \
        && \
        echo '#!/bin/sh' > ${HOME}/.vnc/xstartup && \
        echo 'exec startlxqt' >> ${HOME}/.vnc/xstartup && \
        chmod 775 ${HOME}/.vnc/xstartup \
        && \
        chown headless:headless -R ${HOME}


WORKDIR ${HOME}
USER headless
ENTRYPOINT ["expect", "./startup.sh"]

Eso es todo, puedes correr. Si no está seguro de compilar el Dockerfile, su versión completa se puede encontrar en mi repositorio y el contenedor terminado en el Docker Hub .

Para iniciar el contenedor terminado, debe ejecutar el comando:

docker run -it --rm -e password='YOUR_VNC_PASSWORD' -p5901:5901 labeg/centos-lxqt-vnc

Y conéctese usando el cliente TightVNC.

imagen

Después de conectarse, debe ingresar la contraseña de usuario especificada anteriormente. También se recomienda que lo cambie de inmediato para mayor seguridad.

Para habilitar un diseño hermoso como en la captura de pantalla anterior, vaya a Inicio> Preferencias> Apariencia> Tema LXQt y seleccione el tema Kde-plasma.

Programas de trabajo


Ahora puede crear una segunda imagen con programas de trabajo. Para hacer esto, simplemente tome la imagen creada anteriormente y complétela con scripts para instalar paquetes:

FROM labeg/centos-lxqt-vnc:latest

USER root

# dotnet vscode monodevelop nodejs git2
RUN rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm \
        && \
        rpm --import https://packages.microsoft.com/keys/microsoft.asc && \
        sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo' \
        && \
        rpm --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF" && \
        su -c 'curl https://download.mono-project.com/repo/centos7-vs.repo | tee /etc/yum.repos.d/mono-centos7-vs.repo' \
        && \
        yum install -y https://centos7.iuscommunity.org/ius-release.rpm \
        && \
        curl -sL https://rpm.nodesource.com/setup_13.x | bash - \
        && \
        dnf install -y geany git2u git2u-gui code monodevelop firefox dotnet-sdk-3.1 nodejs gnome-terminal gnome-system-monitor \
        && \
        npm install -g gulp typescript npm-check-updates \
        && \
        chown headless:headless -R ${HOME}

USER headless

RUN code --install-extension ms-vscode.vscode-typescript-tslint-plugin && \
    code --install-extension dbaeumer.vscode-eslint && \
    code --install-extension mrmlnc.vscode-scss && \
    code --install-extension visualstudioexptteam.vscodeintellicode && \
    code --install-extension ms-dotnettools.csharp && \
    code --install-extension joelday.docthis && \
    code --install-extension mrmlnc.vscode-remark && \
    code --install-extension eamodio.gitlens

El script instala herramientas para el desarrollo de Script Mecanográfico y C # en Linux. Este es NodeJS, VS Code con las extensiones necesarias y Monodevelop (también conocido como Visual Studio para Mac).

Comienza tan simple como la imagen anterior:

docker run -it --rm -e password='YOUR_VNC_PASSWORD' -p5901:5901 labeg/devpc

Ahora, en segundos, puede implementar un entorno de trabajo limpio.

imagen

Repositorios e imágenes terminadas


Si necesita repositorios e imágenes listos para usar, o si desea mejorar los existentes, por ejemplo, a través de los parámetros de inicio, configure la contraseña del usuario, la resolución de la pantalla o reinicie el servidor VNC después de que falle, entonces bienvenido a mis repositorios.

Imagen básica con el escritorio Gihub Dockerhub .

Imagen con herramientas de mecanografiado y C # Gihub Dockerhub .

All Articles