为了什么?各种各样的想法不断出现,我立即想尝试其中的一些想法,但是工作站并不总是可用的,因此我为即将发生的所有事情设置了IDE。结果,设备开始变得混乱,并且变得难以维护和更新它们。为了解决这个问题,我决定将这样的“笔记本”放置在云中,并且将每天进行更新并删除所有累积的垃圾。要工作,请远程连接。
结果,他毫不怀疑地为解决大量任务提供了一个非常方便的工具:一个笔记本,一个测试站点,以查看手机未显示的内容,一个安全的沙箱以及为只能与GUI和许多其他程序一起使用的程序运行脚本。等。在本文中,我想分享创建此类容器的方法。要创建这样的容器,必须编写Dockerfile。在本文中,我将描述其创建的整个过程。谁不想创建自己,但想要尝试并尝试,那么在文章底部将有指向现成图像的链接。操作系统
任何Linux都可以。就个人而言,我更喜欢漂亮的OpenSuse,但将其内存消耗与CentOS进行比较后,我决定选择后者。实际上,容器消耗的内存越少,您可以在其托管上节省更多。让我们开始创建一个dockerfile:FROM centos:7
远程访问
为了连接到容器,您必须配置VNC远程访问服务器。为此,必须理解两个因素:- 系统没有监视器。因此,它必须被模拟。为此有一个特殊的x0vncserver服务器。
- VNC服务器不应资源充足。毕竟,您必须为此付费。并且信号传输的滞后应最小化,否则会引起不适。
为了解决这两个问题,我为服务器选择了TigerVNC服务器,为客户端选择了TightVNC。TigerVNC Server包含在任何Linux中,重量轻,速度快,并且通过x0vncserver无需监视器即可支持工作。TightVNC客户端提供了如此快速的图片传输,感觉好像它不是远程连接,而是计算机上运行的程序。扩展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/*
安装程序后,我们清除缓存以减轻图像的重量。桌面
我真的很喜欢Breeze主题的KDE,但是KDE是一个非常贪吃的桌面。侏儒及其衍生物更为。Xfce,Ice不太漂亮。幸运的是,有一个解决方案-具有Kde-Plasma主题的LXQT桌面。安装桌面: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/*
多一点,您可以运行。用户创建
在容器中,必须由某些用户来工作。为此,请创建它并设置密码,并为root用户设置密码:... Dockerfile
ENV HOME=/home/headless
RUN /bin/dbus-uuidgen --ensure && \
useradd headless && \
echo "centos" | passwd --stdin root && \
echo "centos" | passwd --stdin headless
在这里,无头是我们创建并与之合作的用户,“ centos”是由用户和root指定的密码。最好在容器启动时从外部参数传递它,但是即使采用这种形式,容器也不会受到攻击,因为 VNC中的连接将通过参数中的密码进行密码保护。配置vnc服务器启动
首先,您需要一个辅助脚本来配置我们的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
必须将其放在Dockefile旁边,稍后将其包含在容器中,程序将从其启动。在此文件中,您必须指定计划使用的分辨率,例如,我设置了1820x960。如果指定的值小于客户端窗口的大小,则服务器可能会由于内存不足而崩溃。如果指定更多,则将需要缩放图片,并且桌面的元素将变得太小。同样在此脚本中,将从将在容器启动参数中传递的变量中设置密码。仍然需要将此文件复制到容器并添加启动参数:... 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"]
就这样,您可以运行。如果在编译Dockerfile混淆,那么它的完整版可以在发现我的仓库,并在成品容器泊坞窗枢纽。要启动完成的容器,必须运行以下命令:docker run -it --rm -e password='YOUR_VNC_PASSWORD' -p5901:5901 labeg/centos-lxqt-vnc
并使用TightVNC客户端进行连接。
连接后,必须输入先前指定的用户密码。还建议您立即进行更改以提高安全性。要启用上面的屏幕截图中的精美设计,请转到开始>首选项>外观> LXQt主题,然后选择Kde-plasma主题。工作程序
现在,您可以使用工作程序创建第二个图像。为此,只需获取上面创建的映像,并用用于安装软件包的脚本对其进行补充: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
该脚本为Linux下的Typescript和C#开发安装工具。这是NodeJS,带有必要扩展的VS Code和Monodevelop(又名Visual Studio for Mac)。它的开始与上一张图像一样简单:docker run -it --rm -e password='YOUR_VNC_PASSWORD' -p5901:5901 labeg/devpc
现在,您可以在几秒钟内部署一个干净的工作环境。
储存库和完成的图像
如果您需要现成的存储库和映像,或者想要改善现有存储库和映像,例如,通过启动参数,设置用户密码,屏幕分辨率或在崩溃后重新启动VNC服务器,那么欢迎使用我的存储库。Gihub Dockerhub桌面的基本映像。
具有Typescript和C#Gihub Dockerhub工具的图像。