在 Docker 中运行 OpenOffice

简介:

在 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

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应用了。


  
  
  1. FROM ubuntu:14.04
  2. MAINTAINER Doro Wu <fcwu.tw@gmail.com>
  3. ENV DEBIAN_FRONTEND noninteractive
  4. ENV HOME /root
  5. # setup our Ubuntu sources (ADD breaks caching)
  6. RUN echo "deb http://tw.archive.ubuntu.com/ubuntu/ trusty main\n\
  7. deb http://tw.archive.ubuntu.com/ubuntu/ trusty multiverse\n\
  8. deb http://tw.archive.ubuntu.com/ubuntu/ trusty universe\n\
  9. deb http://tw.archive.ubuntu.com/ubuntu/ trusty restricted\n\
  10. deb http://ppa.launchpad.net/chris-lea/node.js/ubuntu trusty main\n\
  11. "> /etc/apt/sources.list
  12. # no Upstart or DBus
  13. # https://github.com/dotcloud/docker/issues/1724#issuecomment-26294856
  14. RUN apt-mark hold initscripts udev plymouth mountall
  15. RUN dpkg-divert --local --rename --add /sbin/initctl && ln -sf /bin/true /sbin/initctl
  16. RUN apt-get update \
  17. && apt-get install -y --force-yes --no-install-recommends supervisor \
  18. openssh-server pwgen sudo vim-tiny \
  19. net-tools \
  20. lxde x11vnc xvfb \
  21. gtk2-engines-murrine ttf-ubuntu-font-family \
  22. nodejs \
  23. libreoffice firefox \
  24. && apt-get autoclean \
  25. && apt-get autoremove \
  26. && rm -rf /var/lib/apt/lists/*
  27. ADD noVNC /noVNC/
  28. ADD startup.sh /
  29. ADD supervisord.conf /
  30. EXPOSE 6080
  31. EXPOSE 5900
  32. EXPOSE 22
  33. WORKDIR /
  34. # Remove LibOffice
  35. RUN apt-get remove -y --purge libreoffice* libexttextcat-data* && sudo apt-get -y autoremove
  36. # Install wget
  37. RUN apt-get update -y && \
  38. apt-get install -y wget
  39. # Install OpenOffice
  40. 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
  41. RUN tar -xvf Apache_OpenOffice*.tar.gz
  42. RUN dpkg -i en-US/DEBS/*.deb
  43. RUN dpkg -i en-US/DEBS/desktop-integration/*.deb
  44. ENTRYPOINT ["/startup.sh"]

实际上这里我们把整个Linux桌面管理器都装了,因此运行Firefox等一切应用都是可能的。

原文发布时间:2015-04-21

本文来自云栖合作伙伴“linux中国”

目录
相关文章
|
16天前
|
安全 Docker 容器
|
10天前
|
安全 Linux Shell
docker运行centos提示Operation not permitted
通过上述步骤,可以有效排查和解决在Docker中运行CentOS容器时遇到的"Operation not permitted"错误。这些措施涵盖了从权限配置、安全策略到容器运行参数的各个方面,确保在不同环境和使用场景下都能顺利运行容器。如果你需要进一步优化和管理你的Docker环境
14 3
|
1月前
|
Shell Docker 容器
LangChain-10(2) 加餐 编写Agent获取本地Docker运行情况 无技术含量只是思路
LangChain-10(2) 加餐 编写Agent获取本地Docker运行情况 无技术含量只是思路
17 4
LangChain-10(2) 加餐 编写Agent获取本地Docker运行情况 无技术含量只是思路
|
25天前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
175 3
|
1月前
|
安全 Docker 容器
Docker中运行容器时Operation not permitted报错问题解决
【10月更文挑战第2天】Docker中运行容器时Operation not permitted报错问题解决
239 3
|
1月前
|
前端开发 应用服务中间件 nginx
docker运行nginx镜像
这篇文章详细说明了如何在Docker中部署并运行Nginx服务,包括拉取镜像、配置文件的挂载以及容器的启动配置。
160 0
docker运行nginx镜像
|
1月前
|
缓存 NoSQL Redis
docker运行redis镜像
这篇文章介绍了如何使用Docker运行Redis镜像,并提供了启动和配置Redis容器的具体命令和步骤。
91 0
|
1月前
|
NoSQL Redis Docker
Docker获取镜像和运行镜像
这篇文章介绍了如何使用Docker获取镜像以及运行镜像的具体步骤和命令。
169 0
|
1月前
|
应用服务中间件 Shell nginx
Docker容器运行
Docker容器运行
25 0
|
3月前
|
JSON JavaScript 开发者
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
【8月更文挑战第7天】Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程