Ubuntu中使用Docker/LXC迅速啓動一個桌面系統

2013年07月18日 | 標籤: cloud, container, docker, lxc | 做者:vpsee linux

Docker 是 dotCloud 最近幾個月剛宣佈的開源引擎,旨在提供一種應用程序的自動化部署解決方案,簡單的說就是,在 Linux 系統上迅速建立一個容器(相似虛擬機)並在容器上部署和運行應用程序,並經過配置文件能夠輕鬆實現應用程序的自動化安裝、部署和升級,很是方便。由於使用 了容器,因此能夠很方便的把生產環境和開發環境分開,互不影響,這是 docker 最廣泛的一個玩法。更多的玩法還有大規模 web 應用、數據庫部署、持續部署、集羣、測試環境、面向服務的雲計算、虛擬桌面 VDI 等等。git

Docker 使用 Go 語言編寫,用 cgroup 實現資源隔離,容器技術採用 LXC. LXC 已經足夠成熟,被多個主流 PaaS 服務商採用(好比 dotCloud),國內的一些互聯網公司也在用(好比騰訊)。雖然都是企圖解決自動化部署方面的問題,Docker 的解決方式有別於咱們常提到的 Puppet/Chef,他們雖然走的是不一樣的路,但也能夠拿來一塊兒用。github

上面說了 Docker 有不少玩法,下面介紹的玩法是:在服務器上用 docker 建立桌面系統,而後在客戶端上經過 ssh 遠程鏈接桌面,能夠看做是平民化的 VDI 解決方案。web

安裝 Docker/LXC

若是 Linux kernel 是 3.8 之前的內核,或者內核缺乏 aufs 模塊須要安裝額外的擴展模塊:spring

$ sudo apt-get install linux-image-extra-`uname -r`

安裝 lxc-docker:docker

$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:dotcloud/lxc-docker
$ sudo apt-get update
$ sudo apt-get install lxc-docker

運行一個簡單系統

運行 docker 就會自動下載一個 ubuntu 鏡像(第一次運行才須要下載),並在一個 container(容器)裏運行一個 ubuntu 系統(相似虛擬機)和 shell:shell

$ docker run -i -t ubuntu /bin/bash

在 host 上 ps 一下發現 docker 使用 lxc-start 工具和 /var/lib/docker/containers/…/config.lxc 裏的參數啓動1個 lxc 容器並運行 /bin/bash 程序:數據庫

$ ps aux | grep docker
root     28103  0.0  0.0  21164  1116 ?        S    10:52   0:00 lxc-start -n a581df505cb9ea07e93de28d76fc9b4e1ee48b981ce994740efdaa65d0d307a3 -f /var/lib/docker/containers/a581df505cb9ea07e93de28d76fc9b4e1ee48b981ce994740efdaa65d0d307a3/config.lxc -- /sbin/init -g 172.16.42.1 -e HOME=/ -e PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -e DEBIAN_FRONTEND=noninteractive -- /bin/bash /src/startup.sh

運行一個 Hello world

啓動一個 ubuntu 系統而後打印 hello world,囧,一個 ubuntu 系統的存在就是爲了打印一個 hello world,世界變了,反了,操做系統和應用程序的地位顛倒了~ubuntu

$ docker run -i -t ubuntu echo hello world
hello world

運行一個 「桌面」 系統

來看看如何啓動一個 「桌面」 系統,按照 docker-desktop 項目給的方法這裏的 Dockerfile開始 build 一個簡單的 「桌面系統」:centos

$ docker build -t vpsee/docker-desktop git://github.com/rogaha/docker-desktop.git
Step 1 : FROM ubuntu:12.10
 ---> b750fe79269d
...
Successfully built 7774f89504e5

build 完後就能夠用 docker images 命令看到:

$ docker images
REPOSITORY             TAG                 ID                  CREATED             SIZE
ubuntu                 12.04               8dbd9e392a96        3 months ago        131.5 MB (virtual 131.5 MB)
ubuntu                 12.10               b750fe79269d        3 months ago        24.65 kB (virtual 180.1 MB)
ubuntu                 latest              8dbd9e392a96        3 months ago        131.5 MB (virtual 131.5 MB)
ubuntu                 precise             8dbd9e392a96        3 months ago        131.5 MB (virtual 131.5 MB)
ubuntu                 quantal             b750fe79269d        3 months ago        24.65 kB (virtual 180.1 MB)
base                   latest              b750fe79269d        3 months ago        24.65 kB (virtual 180.1 MB)
base                   ubuntu-12.10        b750fe79269d        3 months ago        24.65 kB (virtual 180.1 MB)
base                   ubuntu-quantal      b750fe79269d        3 months ago        24.65 kB (virtual 180.1 MB)
base                   ubuntu-quantl       b750fe79269d        3 months ago        24.65 kB (virtual 180.1 MB)
vpsee/docker-desktop   latest              7774f89504e5        18 minutes ago      12.29 kB (virtual 1.576 GB)

啓動這個剛 build 好的 「桌面系統」 吧,注意 a581df505cb9 是這個容器的 ID:

$ docker run -d vpsee/docker-desktop
a581df505cb9

這個系統有本身的內部 IP 地址,外界不能直接訪問,因此要想從外界 ssh 登錄的話,須要把它的 ssh 服務端口(22)和 host 上某個端口經過 docker port 命令作個映射,這樣訪問 host 上的 49153 端口就是訪問某個 container 裏面的 22 端口了:

$ docker port a581df505cb9 22
49153

查看一下當前運行的容器:

$ docker ps
ID                  IMAGE                         COMMAND                CREATED             STATUS              PORTS
a581df505cb9        vpsee/docker-desktop:latest   /bin/bash /src/start   24 minutes ago      Up 24 minutes       49153->22

而後咱們能夠在 Mac/Linux 客戶端上經過 ssh 訪問這個 「桌面」 了:

$ ssh -YC -c blowfish docker@192.168.2.45 -p 49153 ./docker-desktop
docker@192.168.2.45's password:

注意上面的 password 是隨機生成的(每次建立新系統密碼都會變),那密碼是什麼呢?經過 docker logs 能夠找到:

$ docker logs a581df505cb9
User: docker Password: ieFi2iu1Phie
Adding user `docker' to group `sudo' ...
Adding user docker to group sudo
Done.
.bashrc
.config/
.config/rox.sourceforge.net/
.config/rox.sourceforge.net/ROX-Filer/
.config/rox.sourceforge.net/ROX-Filer/pb_Default
.config/rox.sourceforge.net/ROX-Filer/globicons
.config/rox.sourceforge.net/ROX-Filer/panels
.config/rox.sourceforge.net/ROX-Filer/menus2
.config/rox.sourceforge.net/ROX-Filer/Options
spring-desktop-wallpaper-1920x1200-0911085.jpg
docker-desktop

從 Mac 上訪問遠端桌面的話須要有 X 環境(下載 XQuartz 安裝便可);從 Linux 上能夠直接訪問。登錄後界面以下:

相關文章
相關標籤/搜索