在 windows 主机上的 linux docker 容器中运行 GUI 应用程序
这是怎么回事? Docker 有很多优点,其中之一就是能够使用隔离在 Docker 容器中的 GUI 应用程序。例如您的浏览器、文本编辑器或其他东西。 毫不夸张地说,这将使您能够在 Windows 主机上使用 linux / macOS 软件,而不会弄乱一些黑客行为。这也将防止你的机器在删除应用程序时有剩余的依赖项,因为它都被包裹在一个 docker 容器中。 为什么有人会尝试这样做? 我在家里的
这是怎么回事?
Docker 有很多优点,其中之一就是能够使用隔离在 Docker 容器中的 GUI 应用程序。例如您的浏览器、文本编辑器或其他东西。
毫不夸张地说,这将使您能够在 Windows 主机上使用 linux / macOS 软件,而不会弄乱一些黑客行为。这也将防止你的机器在删除应用程序时有剩余的依赖项,因为它都被包裹在一个 docker 容器中。
为什么有人会尝试这样做?
我在家里的私人电脑上使用 Arch Linux,在工作中使用 Windows 10。我希望能够在我的 Windows 机器上使用 Evolution 邮件客户端和其他方便的 linux 应用程序。
因此,有很多关于如何从 linux 主机与 linux 容器共享 X11-Session 的教程。但:
如何从windows主机共享显示?
安装VcXsrv并配置
首先,安装VcXsrv Windows X Server。我们也可以使用 Xming,但 windows 的包自 2013 年以来一直没有更新。最简单的方法是使用Chocolatey,这是我最喜欢的 windows 包管理器!
因此,启动一个 powershell 会话并运行:
choco install vcxsrv
进入全屏模式 退出全屏模式
然后从开始菜单运行 Xlaunch 并按照初始配置步骤操作:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--MCnNoPwj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws .com/i/g3roivsrapgy69mqkhpc.png)
[](https://res.cloudinary.com/practicaldev/image/fetch/s--9T2fJDCh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws .com/i/5l5fil0nongqswsc5qx5.png)
[](https://res.cloudinary.com/practicaldev/image/fetch/s--1fOShFRZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws .com/i/3eh1lry7125modpdj6a2.png)
[](https://res.cloudinary.com/practicaldev/image/fetch/s--GFylK6hC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws .com/i/48tl3o3pv99vbhk06188.png)
请确保在单击完成之前保存到配置文件!
将其保存到以下位置之一:
-
%appdata%\Xming
-
%userprofile%\桌面
-
%用户配置文件%
创建Dockerfile
举一个简单的例子,创建一个新文件夹并在其中放置一个 Dockerfile ,其中包含以下内容:
FROM ubuntu:14.04
RUN apt-get update && apt-get install -y firefox
CMD /usr/bin/firefox
进入全屏模式 退出全屏模式
构建并运行容器
对于高级 docker 用户,这里有快速命令:
docker build -t firefox .
set-variable -name DISPLAY -value YOUR-IP:0.0
docker run -ti --rm -e DISPLAY=$DISPLAY firefox
进入全屏模式 退出全屏模式
有一些解释:
现在构建新容器并将其标记为 firefox:
docker build -t firefox .
进入全屏模式 退出全屏模式
因为容器有自己的 localhost 接口,所以我们需要使用网络适配器的 IP 地址。
找出你的IP地址
ipconfig
进入全屏模式 退出全屏模式
设置环境变量(用你的替换 IP):
set-variable -name DISPLAY -value 10.11.128.118:0.0
进入全屏模式 退出全屏模式
运行容器:
docker run -ti --rm -e DISPLAY=$DISPLAY firefox
进入全屏模式 退出全屏模式
您现在应该看到一个 Firefox 窗口:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--d_jpgRzm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3。 amazonaws.com/i/zbbfl8ytpwmd9erj9hxh.png)
这将适用于大多数其他应用程序。
持续数据
要持久化数据(例如进化邮件),请使用通过 docker 卷安装的正确位置启动容器。
找出所有位置,您的应用程序存储您想要持久保存的数据并挂载它们:
docker run -v c:/docker/evolutionmail/home/user/.local/share/evolution:/root/.local/share/evolution -v c:/docker/evolutionmail/home/user/.config/evolution:/root/.config/evolution -ti --rm -e DISPLAY=$DISPLAY evolution
进入全屏模式 退出全屏模式
进化邮件的示例 Dockerfile
这是我的进化 Dockerfile,以防有人需要它:
FROM debian
# Setup enviroment variables
ENV DEBIAN_FRONTEND noninteractive
# Installing fuse filesystem is not possible in docker without elevated priviliges
# but we can fake installling it to allow packages we need to install for GNOME
RUN apt-get install libfuse2 -y && \
cd /tmp ; apt-get download fuse && \
cd /tmp ; dpkg-deb -x fuse_* . && \
cd /tmp ; dpkg-deb -e fuse_* && \
cd /tmp ; rm fuse_*.deb && \
cd /tmp ; echo -en '#!/bin/bash\nexit 0\n' > DEBIAN/postinst && \
cd /tmp ; dpkg-deb -b . /fuse.deb && \
cd /tmp ; dpkg -i /fuse.deb
# Upstart and DBus have issues inside docker.
RUN dpkg-divert --local --rename --add /sbin/initctl && ln -sf /bin/true /sbin/initctl
# Install GNOME
RUN apt-get update && apt-get install -y xorg gnome-core gnome-session-fallback
# Pull in the hack to fix keyboard shortcut bindings for GNOME 3
ADD https://raw.githubusercontent.com/CannyComputing/Dockerfile-Ubuntu-Gnome/master/gnome-keybindings.pl /usr/local/etc/gnome-keybindings.pl
RUN chmod +x /usr/local/etc/gnome-keybindings.pl
# Add the script to fix and customise GNOME for docker
ADD https://raw.githubusercontent.com/CannyComputing/Dockerfile-Ubuntu-Gnome/master/gnome-docker-fix-and-customise.sh /usr/local/etc/gnome-docker-fix-and-customise.sh
RUN chmod +x /usr/local/etc/gnome-docker-fix-and-customise.sh
RUN apt-get update -y && apt-get install -y dbus-x11 gnome-keyring evolution evolution-data-server seahorse sudo
RUN apt-get install -y libnotify-cil-dev
CMD ["evolution"]
进入全屏模式 退出全屏模式
我很想知道你在评论中 docker 化了什么!
~干杯
更多推荐
所有评论(0)