在 Docker 中运行 OpenOffice

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

在 Docker 中运行 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 Doro Wu <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。
在 Docker 中运行 OpenOffice

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/41039.html

(0)
上一篇 2021年8月4日
下一篇 2021年8月4日

相关推荐

发表回复

登录后才能评论