您的位置:首页 > 运维架构 > Docker

使用 Docker/LXC 迅速启动一个桌面系统

2015-03-31 00:13 489 查看
原文出处:
vpsee

Docker是 dotCloud 的一个开源引擎,旨在提供一种应用程序的自动化部署解决方案,简单的说就是,在 Linux 系统上迅速创建一个容器(类似虚拟机)并在容器上部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装、部署和升级,非常方便。因为使用了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是 docker 最普遍的一个玩法。更多的玩法还有大规模
web 应用、数据库部署、持续部署、集群、测试环境、面向服务的云计算、虚拟桌面 VDI 等等。

Docker 使用 Go 语言编写,用 cgroup 实现资源隔离,容器技术采用 LXC. LXC 已经足够成熟,被多个主流 PaaS 服务商采用(比如 dotCloud),国内的一些互联网公司也在用(比如腾讯)。虽然都是企图解决自动化部署方面的问题,Docker 的解决方式有别于我们常提到的 Puppet/Chef,他们虽然走的是不同的路,但也可以拿来一起用。

上面说了 Docker 有很多玩法,下面介绍的玩法是:在服务器上用 docker 创建桌面系统,然后在客户端上通过 ssh 远程连接桌面,可以看作是平民化的 VDI 解决方案。

安装 Docker/LXC

如果 Linux kernel 是 3.8 以前的内核,或者内核缺少 aufs 模块需要安装额外的扩展模块:

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

1

$sudo
apt-getinstall
linux-image-extra-`uname-r`

安装 lxc-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

1
2
3
4

$sudo
apt-getinstall
software-properties-common

$ sudoadd-apt-repositoryppa:dotcloud/lxc-docker
$sudo
apt-getupdate

$ sudoapt-getinstall
lxc-docker

运行一个简单系统

运行 docker 就会自动下载一个 ubuntu 镜像(第一次运行才需要下载),并在一个 container(容器)里运行一个 ubuntu 系统(类似虚拟机)和 shell:

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

1

$docker
run-i-tubuntu
/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

1
2

$ps
aux|
grepdocker

root 28103 0.0 0.0 21164 1116? S 10:52 0:00lxc-start-na581df505cb9ea07e93de28d76fc9b4e1ee48b981ce994740efdaa65d0d307a3-f/var/lib/docker/containers/a581df505cb9ea07e93de28d76fc9b4e1ee48b981ce994740efdaa65d0d307a3/config.lxc--
/sbin/init-g172.16.42.1
-eHOME=/-ePATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin-eDEBIAN_FRONTEND=noninteractive--
/bin/bash/src/startup.sh

运行一个 Hello world

启动一个 ubuntu 系统然后打印 hello world,囧,一个 ubuntu 系统的存在就是为了打印一个 hello world,世界变了,反了,操作系统和应用程序的地位颠倒了~

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

1
2

$docker
run-i-tubuntu
echo helloworld

hello world

运行一个 “桌面” 系统

来看看如何启动一个 “桌面” 系统,按照 docker-desktop 项目给的方法这里的 Dockerfile开始
build 一个简单的 “桌面系统”:

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

1
2
3
4
5

$docker
build-tvpsee/docker-desktopgit://github.com/rogaha/docker-desktop.git

Step 1:
FROMubuntu:12.10
--->b750fe79269d

...
Successfullybuilt
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)

1
2
3
4
5
6
7
8
9
10
11
12

$docker
images

REPOSITORY TAG ID CREATED SIZE
ubuntu 12.04
8dbd9e392a96 3months
ago 131.5MB
(virtual131.5
MB)

ubuntu
12.10
b750fe79269d 3months
ago 24.65kB
(virtual180.1
MB)
ubuntu latest 8dbd9e392a96 3months
ago 131.5MB
(virtual131.5
MB)

ubuntu precise 8dbd9e392a96 3months
ago 131.5MB
(virtual131.5
MB)
ubuntu quantal
b750fe79269d 3months
ago 24.65kB
(virtual180.1
MB)

base latest b750fe79269d 3months
ago 24.65kB
(virtual180.1
MB)
base ubuntu-12.10 b750fe79269d 3months
ago 24.65kB
(virtual180.1
MB)

base ubuntu-quantal b750fe79269d 3months
ago 24.65kB
(virtual180.1
MB)
base ubuntu-quantl b750fe79269d 3months
ago 24.65kB
(virtual180.1
MB)

vpsee/docker-desktop latest 7774f89504e5 18minutes
ago 12.29kB
(virtual1.576
GB)

启动这个刚 build 好的 “桌面系统” 吧,注意 a581df505cb9 是这个容器的 ID:

$ docker run -d vpsee/docker-desktop
a581df505cb9

1
2

$docker
run-dvpsee/docker-desktop

a581df505cb9

这个系统有自己的内部 IP 地址,外界不能直接访问,所以要想从外界 ssh 登陆的话,需要把它的 ssh 服务端口(22)和 host 上某个端口通过 docker port 命令做个映射,这样访问 host 上的 49153 端口就是访问某个 container 里面的 22 端口了:

$ docker port a581df505cb9 22
49153

1
2

$docker
port a581df505cb922

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

1
2
3

$docker
ps

ID IMAGE COMMAND CREATED STATUS PORTS
a581df505cb9 vpsee/docker-desktop:latest /bin/bash/src/start 24
minutesago Up24
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:

1
2

$ssh
-YC-cblowfish
docker@192.168.2.45-p49153
./docker-desktop

docker@192.168.2.45'spassword:

注意上面的 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

$docker
logs a581df505cb9

User:docker
Password:ieFi2iu1Phie
Addinguser
`docker' to group `sudo'...

Adding user dockerto
groupsudo
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 上可以直接访问。登陆后界面如下:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐