这是怎么回事?

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 并按照初始配置步骤操作:

[Setup1](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)

[Setup2](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)

[Setup3](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)

[Setup4](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 窗口:

[firefox docker](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 化了什么!

~干杯

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐