在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?噢,完全没有必要啊。

镜像可以通过挂载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

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官方文档感兴趣的朋友可以联系译者哟。

0 个评论

要回复文章请先登录注册