共计 3391 个字符,预计需要花费 9 分钟才能阅读完成。
Docker 与 GUI 应用
Docker 是开源的容器技术,容器是比虚拟机更轻量的虚拟化技术,优势是隔离软件的运行环境并且最小化其额外的开销。隔离运行环境的好处之一就是可以轻易创建干净的开发环境,而在我第一次 Docker 分享中,大家最关心的问题就是“Docker 可以运行 GUI 应用吗”。
Docker 作为虚拟化技术,并没有改变进程的运行方式和图像显示协议,因此 Docker 是可以运行 GUI 应用的。就像在裸机中要运行图形界面,我们有必要了解下 Linux 的 X Window 协议。在 Linux 中,一个 GUI 应用的显示都经过 X Window 这个 C / S 模型,简单概括就是 X Server 在后台运行,接受 X Client 的请求,并将显示的结果通过特定安全的协议返回。
运行 Docker GUI 应用的原理与之类似,下面将一步步带领大家创建基于 Docker 的图形化程序。
Dockerized OpenOffice
Dockerized-openoffice 就是运行在容器内的 GUI 应用,执行命令 docker run -d -p 6080:6080 tobegit3hub/dockerized-openoffice
然后在浏览器打开 http://127.0.0.1:6080/vnc.html 就可以看到图形界面的 OpenOffice 应用。
其实玄机就在 Dockerfile 中,代码中有安装 apt-get install -y lxde x11vnc xvfb
这一步,就是安装我们前面提到的 X Server,这样通过特定的 VNC 客户端就可以访问这个 GUI 应用了。这里我们选择 noVNC 客户端来连接我们的 Dockerized 应用,导入 noVNC 源码,启动服务器,打开 6080 端口,这样我们 docker run
以后就可以通过浏览器来访问 GUI 应用了。
FROM Ubuntu:14.04
MAINTAINER DoroWu<fcwu.tw@gmail.com>
ENV DEBIAN_FRONTEND noninteractive
ENV HOME /root
# setup our Ubuntu sources (ADD breaks caching)
RUN echo "deb http://tw.archive.ubuntu.com/ubuntu/ trusty main\n\
deb http://tw.archive.ubuntu.com/ubuntu/ trusty multiverse\n\
deb http://tw.archive.ubuntu.com/ubuntu/ trusty universe\n\
deb http://tw.archive.ubuntu.com/ubuntu/ trusty restricted\n\
deb http://ppa.launchpad.net/chris-lea/node.js/ubuntu trusty main\n\
">/etc/apt/sources.list
# no Upstart or DBus
# https://github.com/dotcloud/docker/issues/1724#issuecomment-26294856
RUN apt-mark hold initscripts udev plymouth mountall
RUN dpkg-divert --local--rename --add /sbin/initctl && ln -sf /bin/true/sbin/initctl
RUN apt-get update \
&& apt-get install -y --force-yes --no-install-recommends supervisor \
openssh-server pwgen sudo vim-tiny \
net-tools \
lxde x11vnc xvfb \
gtk2-engines-murrine ttf-ubuntu-font-family \
nodejs \
libreoffice firefox \
&& apt-get autoclean \
&& apt-get autoremove \
&& rm -rf /var/lib/apt/lists/*
ADD noVNC /noVNC/
ADD startup.sh /
ADD supervisord.conf /
EXPOSE 6080
EXPOSE 5900
EXPOSE 22
WORKDIR /
# Remove LibOffice
RUN apt-get remove -y --purge libreoffice* libexttextcat-data* && sudo apt-get -y autoremove
# Install wget
RUN apt-get update -y && \
apt-get install -y wget
# Install OpenOffice
RUN wget http://sourceforge.net/projects/openofficeorg.mirror/files/4.0.0/binaries/en-US/Apache_OpenOffice_4.0.0_Linux_x86-64_install-deb_en-US.tar.gz
RUN tar -xvf Apache_OpenOffice*.tar.gz
RUN dpkg -i en-US/DEBS/*.deb
RUN dpkg -i en-US/DEBS/desktop-integration/*.deb
ENTRYPOINT ["/startup.sh"]
实际上这里我们把整个 Linux 桌面管理器都装了,因此运行 Firefox 等一切应用都是可能的。
参考链接
- https://github.com/fcwu/docker-ubuntu-vnc-desktop
使用 VNC 和 noVNC 搭建 Ubuntu 环境的实例,无论是源码还是使用的技术都值得参考。
- http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/
在 Docker 运行 NetBeans 等开发环境,虽然使用价值不大但 Docker 就真的做到了。
- http://stackoverflow.com/questions/16296753/can-you-run-gui-apps-in-a-docker-container
运行 Firefox 而不需要安装 Firefox,整个 Dockerfile 也相当简单。
- https://blog.docker.com/2013/07/docker-desktop-your-desktop-over-ssh-running-inside-of-a-docker-container/
Docker 官方文档介绍通过 SSH 运行桌面系统,使用的是 Xpra。
CentOS 6/ 7 系列安装 Docker http://www.linuxidc.com/Linux/2014-07/104768.htm
Docker 的搭建 Gitlab CI 全过程详解 http://www.linuxidc.com/Linux/2013-12/93537.htm
Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm
在 Docker 中使用 MySQL http://www.linuxidc.com/Linux/2014-01/95354.htm
在 Ubuntu Trusty 14.04 (LTS) (64-bit)安装 Docker http://www.linuxidc.com/Linux/2014-10/108184.htm
Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm
Ubuntu 14.04 安装 Docker http://www.linuxidc.com/linux/2014-08/105656.htm
阿里云 CentOS 6.5 模板��安装 Docker http://www.linuxidc.com/Linux/2014-11/109107.htm
Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-04/116520.htm