En este artículo, explicaré cómo instalar y usar una aplicación gráfica en Docker. De esta forma, puede ejecutar aplicaciones que no están actualizadas en los repositorios de Pardus, pero que necesita, sin necesidad de instalar una distribución separada.
En este artículo, ejecutaremos una aplicación krita en la imagen de prueba de Debian utilizando Docker como ejemplo.
Preparación
Método 1: Puede instalar la ventana acoplable de la siguiente manera. La ventana acoplable que instale de esta manera solo funcionará con el usuario root o el usuario agregado al grupo de la ventana acoplable.
apt actualizar apt instalar docker.io
Método 2: Puede instalar la ventana acoplable sin raíz de la siguiente manera. Docker instalado de esta manera funciona sin root, pero con privilegios limitados.
Instalemos primero los paquetes necesarios.
apt install curl dbus-usuario-sesión
Luego, establezcamos la configuración de subuid y subgid ejecutando los siguientes dos comandos con root.
modusuario --add-subgids 1002000000-1002999999 modusuario --add-subids 1002000000-1002999999
Luego, instalemos la ventana acoplable sin raíz en nuestro propio usuario usando el siguiente comando.
curl -fsSL https://get.docker.com/rootless | intento
Los comandos de Docker se han agregado en el directorio bin en nuestro directorio de inicio. Agreguemos lo siguiente a bashrc para obtenerlos en PATH.
exportar RUTA=~/bin/:$RUTA
Configurar la autorización de uso de Docker
Se requieren privilegios de raíz para usar la ventana acoplable sin raíz. Por lo tanto, puede otorgar autorización de docker al usuario haciendo lo siguiente.
# Después de este proceso, es posible que debamos cerrar sesión e iniciar sesión. usermod -aG usuario docker
No: Si otorga privilegios de ventana acoplable al usuario, le está otorgando el equivalente a los privilegios de raíz. Esto puede causar problemas de seguridad. Por lo tanto, no se recomienda este procedimiento.
Para más información: https://docs.docker.com/engine/security/#docker-daemon-attack-surface
Recomiendo usar la ventana acoplable sin raíz en su lugar.
Descargando la imagen
Para ejecutar nuestra aplicación, necesitamos descargar la imagen de la distribución que desea.
docker pull debian: prueba
Configuración de permisos para video y audio
Necesitamos usar los siguientes comandos para que nuestra aplicación que se ejecuta en Docker realice correctamente las solicitudes de creación de ventanas y controle el sonido de la aplicación correctamente. Estos procesos hay que repetirlos cada vez que reiniciamos nuestro ordenador.
# xhost +local para aceptar solicitudes de ventanas locales: # pactl load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 para abrir un servidor de sonido pulseaudio (solo acepta solicitudes locales)
Creación de contenedores
Vamos a crear un contenedor a partir de nuestra imagen acoplable descargada. Aquí pasaremos la variable ambiental DISPLAY y otorgaremos autorización completa de acceso a la red y al hardware. También vincularemos los directorios de inicio entre sí. De esta forma, no habrá problemas en el uso de nuestro hardware y conexión a la red, y podremos ver y editar nuestros archivos fácilmente.
docker run \ -it \ -e DISPLAY=$DISPLAY \ -e PULSE_SERVER=127.0.0.1\ -v /dev/dri:/dev/dri \ --net host \ -v /home:/home \ --name gui_application \ debian: prueba
Aquí están las explicaciones de los parámetros:
- -it para abrir shell interactivo
- -e DISPLAY=$DISPLAY para pasar la variable ambiental
- -e PULSE_SERVER=127.0.0.1 para el servidor de sonido pulseaudio
- –net host para acceso a conexión de red totalmente autorizado
- -v /dev/dri: /dev/dri para acceder a la tarjeta de video
- -v /home:/home para hacer común el directorio de inicio
- –name para especificar el nombre del contenedor gui_application
Después de crear el contenedor, se iniciará un nuevo shell con el usuario raíz dentro del contenedor.
Instalando la aplicación
Después de ingresar al contenedor, podemos instalar nuestra aplicación.
apt actualizar apt instalar krita
Para que nuestra aplicación use el directorio de inicio común y funcione con privilegios similares, creemos un usuario con el mismo nombre que nuestro nombre de usuario. El UID de este usuario debe ser el mismo que el de nuestro usuario.
Puede cambiar adduser usuario # uid en /etc/passwd. id usuario -> uid=1000(usuario) gid=1000(usuario) grupos=1000(usuario) # Necesitamos agregar nuestro usuario al grupo de audio y video. (para tarjeta de sonido y video) usermod -aG audio user usermod -aG video user
Si el directorio /dev/dri en el contenedor no pertenece al grupo de video, arreglemos sus permisos.
cambiar vídeo -R /dev/dri
Lanzamiento de la aplicación
Primero, cambiemos a nuestro usuario con el comando su y luego ejecutemos el comando de nuestra aplicación.
su usuario krita
Cuando salimos del contenedor o reiniciamos el sistema, podemos encontrar el valor de ID de contenedor de la imagen que nombramos en la salida de docker ps -a y comenzarlo de nuevo como inicio de docker y luego adjuntar docker para iniciar sesión nuevamente. Si ya no lo necesitamos, podemos eliminar el contenedor con el comando docker rm.
docker ps -a -> CONTENEDOR ID IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRES -> 8b8862d05e24 debian:testing "bash" Hace 2 horas Salido (137) Hace 5 minutos gui_application docker start 8b8862d05e24 -> 8b8862d05e24 docker added 8b8862d05e24
Agregar al menú de la aplicación
Para agregar nuestra aplicación al menú de aplicaciones, preparemos un script de la siguiente manera y guárdelo en /home/user/.local/bin/docker-krita
#!/bin/bash xhost +local: pactl load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 docker start gui_application docker exec gui_application chgrp -R video /dev/dri docker exec gui_application su $USUARIO -c crítica $@
Preparemos nuestro iniciador de aplicaciones de la siguiente manera y guárdelo en /home/user/.local/share/applications/docker-krita.desktop.
[Entrada de escritorio] Nombre=Krita-docker Comentario=krita en Docker GenericName=Krita Exec=/home/user/.local/bin/docker-krita %F Icon=krita Terminal=false StartupNotify=true Type=Application Categories=Utility; GTK;
Enlaces útiles
https://sulincix.gitlab.io/sayfalar/html/docker-kullanimi.html