本文讲的是在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?噢,完全没有必要啊。
镜像可以通过挂载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
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中运行桌面应用