在Docker中运行桌面应用

本文讲的是在Docker中运行桌面应用,【编者的话】本文作者Jessie Frazelle,本文重要介绍了很多基于文本的或者基于GUI的Docker应用。如果你想对原作者的更多Dockerfile或者镜像感兴趣的话,可以留意本文末尾的链接。

不知道你是否熟悉Docker,它是一个流行的开源容器引擎。

许多人使用Docker来部署应用到生产环境或者在容器环境里构建他们的应用。这可以节省开发者和运维工程师彼此头疼的问题,但是我喜欢以一种非典型的方式来使用Docker。

在我的电脑里,我使用Docker运行所有的桌面应用。

你可能会问为什么我要在容器中运行这些应用,好吧,让我来解释下吧!我一直以来都是一个OS X用户,关于OS X最重要的事情就是OS X的应用沙盒(OS X App Sandbox)。

应用沙盒是OS X提供的一个权限控制技术,控制在内核级别。它有两个作用:
应用沙盒使你了解到你的应用是怎样与系统交互的,系统只需要授权你的应用所需要的权限即可。
应用沙盒为避免用户数据被盗窃、腐败或者删除提供了最后一道防线,如果一个攻击者在你的应用或者框架中成功取得安全漏洞,它会予以反击。
——Apple About App Sandbox

我借助苹果的沙盒机制来向大家解释我的初衷,当然并不是完全贴切。

我讨厌在我的机器上装应用,然后搞的那些文件随处存放。我想要删除一个应用程序,并且删除所有相关的文件。Docker可以帮到我,我甚至都可以控制应用的CPU和内存使用情况。是的,CPU/内存刚好够用的Chrome现在已经可以工作了。

“什么!”,你说。(不信的话,)让我展示给你看吧!

以下是我最喜欢的容器应用。下边写的每一个命令实际取自于我的bash别名。因此,我可以有相同的用户体验,当我现在运行某个命令时。

TUI(基于文本的应用)

让我们从简单的文本应用开始吧。

1. Irssi

Dockerfile,最好的IRC客户端。

$ docker run -it \ 
    -v /etc/localtime:/etc/localtime \ 
    -v $HOME/.irssi:/home/user/.irssi \ # mounts irssi config in container
    --read-only \ # cool new feature in 1.5
    --name irssi \ 
    irssi

2. Mutt

Dockerfile,邮件客户端。

$ docker run -it \ 
    -v /etc/localtime:/etc/localtime \ 
    -e GMAIL -e GMAIL_NAME \ # pass env variables to config
    -e GMAIL_PASS -e GMAIL_FROM \ 
    -v $HOME/.gnupg:/home/user/.gnupg \ # so you can encrypt ;) 
    --name mutt \ 
    jess/mutt

3. Rainbowstream

Dockerfile,Twitter客户端。

$ docker run -it \ 
    -v /etc/localtime:/etc/localtime \ 
    -v $HOME/.rainbow_oauth:/root/.rainbow_oauth \ # mount config files
    -v $HOME/.rainbow_config.json:/root/.rainbow_config.json \ 
    --name rainbowstream \ 
    jess/rainbowstream

4. Lynx

Dockerfile,文本浏览器。

$ docker run -it \
--name lynx \ 
    jess/lynx

OK,这些基于文本的应用是很有趣的,但是我们需要添油加醋(使之更有味道)。

GUIs

以下镜像都使用带有SSH的X11-Forwarding,这就是为什么要在你的容器中安装SSH?噢,完全没有必要啊。

镜像可以通过挂载X11socket到容器中。下面的命令都运行在Linux上,如果是Mac用户,我有一个特别的惊喜送给你,你可以基于X11做更多有趣的事情。这里有详细介绍。

注意,我目前都使用了-v /dev/snd:/dev/snd --privileged参数,但是如果在1.6中我提交的关于--device /dev/snd的patch会被采纳,那你就可以将参数替换为--device /dev/snd,它将自动添加正确权限到容器中。

5. Chrome

Dockerfile,很多人都了解Chrome是什么,但是我的镜像自带flash和谷歌聊天插件,因此你可以做你想做的事情了。

$ docker run -it \ 
    --net host \ # may as well YOLO
    --cpuset 0 \ # control the cpu
    --memory 512mb \ # max memory it can use
    -v /tmp/.X11-unix:/tmp/.X11-unix \ # mount the X11 socket
    -e DISPLAY=unix$DISPLAY \ # pass the display
    -v $HOME/Downloads:/root/Downloads \ # optional, but nice
    -v $HOME/.config/google-chrome/:/data \ # if you want to save state
    -v /dev/snd:/dev/snd --privileged \ # so we have sound
    --name chrome \ 
    jess/chrome

6. Spotify

Dockerfile,来这里听听90年代的音乐吧。

$ docker run -it \ 
    -v /tmp/.X11-unix:/tmp/.X11-unix \ # mount the X11 socket
    -e DISPLAY=unix$DISPLAY \ # pass the display
    -v /dev/snd:/dev/snd --privileged \ # sound
    --name spotify \ 
    jess/spotify

7. Gparted

Dockerfile,在容器中划分你的设备。大吃一惊吧!

$ docker run -it \ 
    -v /tmp/.X11-unix:/tmp/.X11-unix \ # mount the X11 socket
    -e DISPLAY=unix$DISPLAY \ # pass the display
    --device /dev/sda:/dev/sda \ # mount the device to partition
    --name gparted \ 
    jess/gparted

8. Skype

Dockerfile,另一个视频会议软件。

$ docker run -it \ 
    -v /tmp/.X11-unix:/tmp/.X11-unix \ # mount the X11 socket
    -e DISPLAY=unix$DISPLAY \ # pass the display
    -v /dev/snd:/dev/snd --privileged \ # sound
    --name skype \ 
    jess/skype

9. Tor Browser

Dockerfile,因为Tor,咄!

$ docker run -it \ 
    -v /tmp/.X11-unix:/tmp/.X11-unix \ # mount the X11 socket
    -e DISPLAY=unix$DISPLAY \ # pass the display
    -v /dev/snd:/dev/snd --privileged \ # sound
    --name tor-browser \ 
    jess/tor-browser

10. Cathode

Dockerfile,超级老的学习终端(school terminal)。

$ docker run -it \ 
    -v /tmp/.X11-unix:/tmp/.X11-unix \ # mount the X11 socket
    -e DISPLAY=unix$DISPLAY \ # pass the display
    --name cathode \ 
    jess/1995

现在,如此丰富的示例。但是,当然我还有更多的。所有我的Dockerfile都放在github.com/jfrazelle/dockerfiles,所有我的Docker镜像都可以在hub.docker.com/u/jess找到。一起快乐的使用Docker吧。

原文链接:Docker Containers on the Desktop(翻译:刘红 校对:李颖杰)

===========================
译者介绍
刘红,才毕业的本科小生,平时喜欢业余学习一些自己感兴趣的技术或者框架,目前正在学习Docker,也在着手翻译Docker官方文档,如果对翻译Docker官方文档感兴趣的朋友可以联系译者哟。

原文发布时间为: 2015-03-02

本文作者:刚百 

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:在Docker中运行桌面应用

时间: 2024-10-27 15:31:58

在Docker中运行桌面应用的相关文章

利用 Spring Boot 在 Docker 中运行 Hadoop

本文讲的是利用 Spring Boot 在 Docker 中运行 Hadoop,[编者的话]Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.本文介绍了如何利用Spring Boot在Docker中运行Hadoop任务. 简介 越来越多的应用都开始使用Hadoop框架.而开发者在使用过程中也遇到一些挑战,比如使用诸如Docker之类的容器开发和部署相关的技术栈开发的应用.我们将会在下面的例子中介绍如何克服这些挑战. 由于 S

在Docker中运行SQLServer ASP.NET应用

的文章在阿里云上运行ASP.NET Docker应用一文和大家探讨了如何在Docker中运行ASP.NET应用.本文是上一篇文章的续篇,讨论如何让应用访问SQLServer数据库. 创建SQLServer数据库 我们首先在阿里云上开通一个SQLServer服务器实例,创建用户user1. 创建一个名为Blog的数据库,并授权user1能够访问数据库.为数据库开通外网访问,获得数据库外网访问地址. 所有这些操作都能够在控制台完成,如果你想进入SQLServer的控制台,可以点击上图的登录数据库进入

尝鲜 | 在Docker中运行你的Mesos集群

本文讲的是尝鲜 | 在Docker中运行你的Mesos集群,[编者的话]本文介绍了在Docker中运行Apache Mesos,Mesos官方网站提供了安装包来直接运行它,但文中尝试使用Docker来运行Mesos,Mesosphere也提供了相应的镜像.在Docker中运行Mesos也有它的好处,读者可以尝试下. 很多人都已经开始在Apache Mesos中运行容器化的应用,我们也是这样.尽管我们尝试在容器中运行应用,但我们还是通过传统的安装包来在自己的主机上安装Mesos.尽管这是最简单和直

Apache拟在Docker中运行Hadoop

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;Apache在其Hadoop维基百科发布了一个页面,主要整理了Docker中运行Hadoop的好处,以及要完全在Docker中运行Hadoop所需要完成的工作.在Docker,或者说其它容器中运行Hadoop YARN有很多优势,具体如下: 软件依赖和配置的隔离:在Docker中运行的应用,其软件依赖和配置是与宿主机完全没有关系的,跟其其它行在Docker中的应用也没

在Docker中运行Dubbo应用

Dubbo是阿里开源的一个分布式服务框架,在国内粉丝很多.官网上的介绍是: DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点. Dubbo的文档很完整,网络上资源也很多,这里就不再重复了.本文做这样一个尝试,将一个Dubbo应用容器化,部署到阿里云的容器服务上. 极简Dubbo应用结构 在Dubbo世界里,服务调用

在Docker中运行Java:为了防止失败,你应该知道的

如果你尝试在容器中运行Java程序,或者专注于Docker,你可能会遇到一些关于JVM和堆大小的问题.本篇文章将介绍如何解决这些问题. 很多开发者会(或者应该)知道,当我们为运行在Linux容器(docker, rkt, runC, lxcfs, etc,)中的Java程序去设置JVM的GC.堆大小和运行时编译器的参数时并没有得到预想的效果.当我们通过"java -jar mypplication-fat.jar"的方式而不设置任何参数来运行一个Java应用时,JVM会根据自身的许多参

在 Docker 中运行一个 Python 的 Web 应用

几周前, Elastic Beanstalk声明在AWS云中配置和管理Docker容器.在本文中,我们通过一个简单的注册表单页面应用去理解Docker部署过程,该表单使用Elastic Beanstalk Python环境. 关于注册表单应用 几个月之前,我们就已经开发完这个应用并且发表在博客上.有4部分视频和一篇文章"Using DynamoDB and SNS with Elastic Beanstalk in any Supported AWS Region".今天,我们将在这部

在 Docker 中运行 MySQL:多主机网络下 Docker Swarm 模式的容器管理

本文将以多主机网络环境为基础,探讨如何利用内置编排工具 Docker Swarm 模式对各主机上的容器加以管理. Docker Engine – Swarm 模式 在多台主机之上运行 MySQL 容器拥有一定程度的复杂性,而具体水平则取决于您所选择的集群技术. 在尝试利用容器加多主机网络运行 MySQL 之前,我们首先需要理解镜像的起效原理.各资源的分配方式(包括磁盘.内存与 CPU).网络(覆盖网络驱动因素,默认情况下包括 flannel 与 weave 等)以及容错机制(容器如何实现重新定位

小白,docker中运行nodejs网页保报错,Object function Object() { [native code] } has no method

问题描述 TypeError:ObjectfunctionObject(){[nativecode]}hasnomethod'assign'atObject.build(/p3/node_modules/node-xlsx/lib/index.js:46:57)atrouter.post.start(/p3/routes/index.js:322:26)atLayer.handle[ashandle_request](/p3/node_modules/express/lib/router/lay