在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

irssi.png

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

mutt.png

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

rainbowstream.png

4. Lynx
Dockerfile ,文本浏览器。
$ docker run -it \
--name lynx \ 
    jess/lynx

lynx2.png


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

GUIs

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

镜像可以通过挂载 X11 socket到容器中。下面的命令都运行在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

chrome.png

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

spotify.png

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

gparted.png

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

skype1.png

skype2.png

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

tor-browser.png

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

cathode.png

现在,如此丰富的示例。但是,当然我还有更多的。所有我的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中运行桌面应用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值