Para quê? Todos os tipos de idéias sempre vêm a mim e algumas delas eu quero experimentar imediatamente, mas a estação de trabalho nem sempre está disponível, então configurei o IDE para tudo o que está disponível. Como resultado, os dispositivos começaram a ficar desordenados e ficou difícil mantê-los e atualizá-los.Para resolver esse problema, decidi colocar um "bloco de anotações" na nuvem, que seria atualizado diariamente e excluiria todo o lixo acumulado. E para trabalhar, conecte-se a ele remotamente.
Como resultado, sem suspeitar disso, ele criou uma ferramenta muito conveniente para resolver um grande número de tarefas: um notebook, um site de teste, para ver o que o telefone não mostra, uma sandbox segura e executar scripts para programas que funcionam apenas na GUI e em muitas outras. etc. E no artigo, quero compartilhar o método de criação de tais contêineres.Para criar um contêiner, você deve gravar seu Dockerfile. E no artigo vou descrever todo o processo de sua criação. Quem não quer se criar, mas quer tirar e tentar, então, na parte inferior do artigo, haverá links para imagens prontas.sistema operacional
Qualquer Linux fará. Pessoalmente, prefiro o belo OpenSuse, mas, comparando seu consumo de memória com o CentOS, decidi escolher o último. De fato, quanto menos memória um contêiner consome, mais você pode economizar em sua hospedagem.Vamos começar a criar um arquivo docker:FROM centos:7
Acesso remoto
Para conectar-se ao contêiner, é necessário configurar o servidor de acesso remoto do VNC. Dois fatores devem ser entendidos para isso:- O sistema não possui um monitor. Portanto, terá que ser emulado. Existe um servidor x0vncserver especial para isso.
- O servidor VNC não deve ter recursos. Afinal, você tem que pagar por eles. E os atrasos na transmissão do sinal devem ser mínimos, caso contrário causam desconforto.
Para resolver os dois problemas, escolhi o TigerVNC Server para o servidor e o TightVNC para o cliente. O TigerVNC Server está incluído na entrega de qualquer Linux, leve, rápido e também suporta trabalho sem monitor através do x0vncserver. O cliente TightVNC fornece uma transferência tão rápida de fotos que parece que não é uma conexão remota, mas um programa em execução em um computador.Estenda o 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/*
Após a instalação dos programas, limpamos o cache para diminuir o peso da imagem.Área de Trabalho
Eu realmente amo o KDE com o tema Breeze, mas o KDE é uma área de trabalho muito gulosa. O gnomo e seus derivados eram ainda mais gulosos. Xfce, o gelo não é muito bonito. Felizmente, existe uma solução - a área de trabalho LXQT com o tema Kde-Plasma.Instale a área de trabalho: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/*
Um pouco mais e você pode correr.Criação de Usuário
No contêiner, é necessário trabalhar com algum usuário. Para fazer isso, crie-o e defina uma senha, bem como defina uma senha para o usuário root:... Dockerfile
ENV HOME=/home/headless
RUN /bin/dbus-uuidgen --ensure && \
useradd headless && \
echo "centos" | passwd --stdin root && \
echo "centos" | passwd --stdin headless
Aqui, sem cabeça, é o usuário que criamos e de quem trabalharemos, "centos" é a senha especificada pelo usuário e raiz. É melhor transmiti-lo de parâmetros externos quando o contêiner é iniciado, mas mesmo assim, o contêiner não estará vulnerável, porque a conexão será protegida por senha no VNC através da senha nos argumentos.Configurar inicialização do servidor vnc
Para começar, você precisa de um script auxiliar que configure o nosso servidor VNC:
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
Ele deve ser colocado próximo ao Dockefile, posteriormente será incluído no contêiner e o programa será iniciado a partir dele. Neste arquivo, você deve especificar a resolução na qual planeja trabalhar, por exemplo, tenho 1820x960 definido. Se você especificar menos do que o tamanho da janela do cliente, o servidor poderá falhar devido à falta de memória. Se você especificar mais, a imagem precisará ser dimensionada e os elementos da área de trabalho ficarão muito pequenos. Também neste script, uma senha será definida a partir das variáveis que serão passadas nos parâmetros de inicialização do contêiner.Resta copiar este arquivo para o contêiner e adicionar os parâmetros para seu lançamento:... 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"]
Isso é tudo, você pode correr. Se você estiver confuso ao compilar o Dockerfile, sua versão completa poderá ser encontrada no meu repositório e no contêiner concluído no hub do docker .Para iniciar o contêiner acabado, você deve executar o comando:docker run -it --rm -e password='YOUR_VNC_PASSWORD' -p5901:5901 labeg/centos-lxqt-vnc
E conecte-se usando o cliente TightVNC.
Após a conexão, você deve inserir a senha do usuário especificada anteriormente. Também é recomendável que você o troque imediatamente para maior segurança.Para ativar um design bonito, como na captura de tela acima, vá para Iniciar> Preferências> Aparência> Tema LXQt e selecione o tema Kde-plasma.Programas de trabalho
Agora você pode criar uma segunda imagem com programas de trabalho. Para fazer isso, basta pegar a imagem criada acima e complementá-la com scripts para instalar pacotes:FROM labeg/centos-lxqt-vnc:latest
USER root
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
O script instala ferramentas para o desenvolvimento de TypeScript e C # no Linux. Este é o NodeJS, VS Code com as extensões necessárias e o Monodevelop (também conhecido como Visual Studio para Mac).Começa tão simples quanto a imagem anterior:docker run -it --rm -e password='YOUR_VNC_PASSWORD' -p5901:5901 labeg/devpc
Agora, em segundos, você pode implantar um ambiente de trabalho limpo.
Repositórios e imagens finalizadas
Se você precisar de repositórios e imagens prontos, ou se desejar melhorar os já existentes, por exemplo, através dos parâmetros de inicialização, defina a senha do usuário, a resolução da tela ou reinicie o servidor VNC após a falha, bem-vindo aos meus repositórios.Imagem básica com a área de trabalho Gihub Dockerhub .Imagem com as ferramentas Typescript e C # Gihub Dockerhub .