Como Executar Aplicativos Baseados em GUI no Docker

O Docker é comumente usado para aplicativos do lado do servidor e de linha de comando. No entanto, com a configuração correta, você também pode executar aplicativos baseados em GUI dentro de contêineres. Esses contêineres podem incluir bibliotecas GUI e ferramentas de exibição, que permitem que os aplicativos sejam executados em um ambiente seguro e isolado. Essa abordagem simplifica o desenvolvimento, teste e implantação de aplicativos GUI em diferentes máquinas ou ambientes de SO. Este guia irá orientá-lo sobre como executar aplicativos GUI dentro de contêineres Docker com uma configuração mínima.
Compreendendo Docker e Contêineres GUI Docker
O Docker permite que você empacote um aplicativo junto com tudo o que ele precisa, como código, bibliotecas e configurações, em uma unidade autônoma chamada contêiner. Esses contêineres compartilham o kernel do sistema host, tornando-os leves, rápidos para iniciar e eficientes em comparação com máquinas virtuais completas.
Os contêineres GUI são configurações Docker que incluem aplicativos gráficos, como Firefox, Gedit ou outras ferramentas de desktop, permitindo que suas janelas apareçam na sua tela real. Ao contrário dos contêineres padrão, esses requerem configuração adicional para se conectar ao sistema de exibição do host, permitindo a renderização e interação adequadas com os elementos GUI.
Por que Executar Aplicativos GUI no Docker?
Aqui estão as principais razões pelas quais executar aplicativos GUI no Docker pode ser benéfico:
- Quando você executa um aplicativo GUI no Docker, tudo o que ele precisa, como bibliotecas e configurações, está empacotado dentro do contêiner. Isso mantém seu sistema principal livre de desordem ou conflitos.
- Usar Docker significa que seu aplicativo funcionará da mesma forma em qualquer máquina. Seja você desenvolvendo, testando ou compartilhando com outros, o ambiente permanece consistente.
- Os contêineres facilitam o teste de um novo aplicativo ou a depuração de algo. Você pode executar, pausar ou removê-los sem afetar sua máquina host.
- O Docker permite que você execute aplicativos GUI Linux em sistemas não Linux. Ele faz isso usando ferramentas de compartilhamento de exibição como XQuartz ou VcXsrv, portanto, não há necessidade de uma máquina virtual.
- Ao contrário das VMs tradicionais, os contêineres Docker usam menos recursos do sistema. Eles iniciam mais rápido e funcionam mais suavemente, mesmo para aplicativos baseados em GUI.
Executar Aplicativos GUI no Docker
Para executar aplicativos GUI no Docker, você deve primeiro garantir que o Docker esteja instalado em seu sistema Linux. Você pode verificar isso executando o seguinte comando:
docker--versionSe este comando retornar um número de versão, significa que o Docker está instalado e funcionando. Caso contrário, você provavelmente verá um erro de “comando não encontrado”.
Uma vez que o Docker esteja configurado corretamente, você pode passar para os próximos passos.
Ativar o Serviço Docker
Agora, inicie o serviço Docker usando o seguinte comando:
sudo systemctl start dockerPara verificar se o serviço Docker está funcionando corretamente, execute:
sudo systemctl status dockerA saída confirma que o serviço Docker está ativo e funcionando sem problemas:

Configurar Pasta do Projeto e Dockerfile
Vamos criar um diretório chamado “dockerGUI”, onde armazenaremos todos os arquivos relacionados ao Docker para executar aplicativos GUI:
mkdir dockerGUIAgora navegue até este diretório para garantir que todos os arquivos subsequentes que criarmos ou modificarmos serão mantidos na pasta dockerGUI:
cd dockerGUICrie um novo arquivo chamado dockerGUIFile para definir a configuração da imagem Docker:
nano dockerGUIFileAgora, cole as seguintes linhas de código no dockerGUIFile:
FROM jess/firefox
ENV DISPLAY=:0
CMD ["firefox"]O código acima informa ao Docker para usar uma imagem pré-construída do Firefox e define o ambiente de exibição para que a GUI possa aparecer no sistema host. Além disso, garante que o Firefox seja iniciado automaticamente quando o contêiner for executado.
Nota: Para tentar um aplicativo diferente, basta alterar a imagem e o comando no seu Dockerfile. Por exemplo, para executar o Gedit, você pode usar a imagem oficial do Ubuntu e instalar o aplicativo durante a construção assim:
FROM ubuntu
RUN apt-get update&&apt-get install-y gedit
ENV DISPLAY=:0
CMD ["gedit"]Construir a Imagem Docker
Agora que a configuração do Docker está definida no dockerGUIFile, vamos construir a imagem Docker usando o seguinte comando:
sudodocker build -t myfirefox:1-f dockerGUIFile .Este comando constrói uma imagem Docker a partir do dockerGUIFile, nomeia-a de myfirefox com a tag 1 e usa o diretório atual como contexto:

Iniciar Contêiner Docker com Suporte a GUI Habilitado
Agora, habilite o suporte a GUI para contêineres Docker executando o seguinte comando:
xhost +local:dockerA saída confirma que clientes locais (como contêineres Docker) executando em meu sistema agora estão autorizados a se conectar ao meu servidor X:
Agora, execute o contêiner usando o seguinte comando para iniciar o Firefox com suporte a GUI em seu sistema host:
docker run -it--rm-eDISPLAY=$DISPLAY-v/tmp/.X11-unix:/tmp/.X11-unix myfirefox:1Como resultado, este comando conecta o contêiner à sua exibição, o que permite que o Firefox se abra na sua tela como um aplicativo nativo:

Nota: Usar a opção --rm faz com que o Docker exclua automaticamente o contêiner após o fechamento do aplicativo, mantendo seu sistema limpo e evitando que ele apareça em docker ps -s.
Desconectar o Docker do Servidor X
Uma vez que você tenha terminado de usar o aplicativo GUI, é recomendável fechar o acesso ao servidor X por razões de segurança:
xhost -local:dockerConsiderações Finais
Executar aplicativos baseados em GUI no Docker é uma ótima maneira de estender o que os contêineres podem fazer além da linha de comando. Com a configuração correta, você pode iniciar aplicativos de desktop a partir de um contêiner como se estivessem instalados em seu sistema. É uma abordagem simples, mas poderosa para teste, desenvolvimento ou exploração de ferramentas Linux em um ambiente limpo. Comece a construir seus próprios contêineres prontos para GUI e aproveite ao máximo o que o Docker oferece em sua área de trabalho Linux.