使用 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 解决方案。
$ sudo apt-get install 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
$ 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
$ docker run -i -t ubuntu echo hello world
hello world
build 一个简单的 “桌面系统”:
$ 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 上可以直接访问。登陆后界面如下:
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` |
$ 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 |
$
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 |
$ 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) |
$ docker run -d vpsee/docker-desktop
a581df505cb9
1 2 | $docker run-dvpsee/docker-desktop a581df505cb9 |
$ 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 |
$ 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: |
$ 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 |
相关文章推荐
- 使用 Docker/LXC 迅速启动一个桌面系统
- 使用 Docker/LXC 迅速启动一个桌面系统
- 使用 Docker/LXC 迅速启动一个桌面系统
- 使用 Docker/LXC 迅速启动一个桌面系统
- 在系统启动时至少有一个服务或驱动程序产生错误。详细信息,请使用事件查看器查看事件日志
- 通过Mesos、Docker和Go,使用300行代码创建一个分布式系统
- 在系统启动时至少有一个服务或驱动程序产生错误。详细信息,请使用时间查看器查看事件日志
- Wireshark "The NPF driver isn’t running…"(可见的驱动本质上是一个系统服务,使用net start 启动)
- Docker: Ubuntu使用VNC运行基于Docker容器里的桌面系统
- 使用API实现的一个增加系统桌面,并且可以任意切换的小程序.
- 大数据:通过Mesos、Docker和Go,使用300行代码创建一个分布式系统
- 使用 Docker Toolbox 实现自动启动一个容器,发布本机上的Web目录
- 在系统启动时至少有一个服务或驱动程序产生错误,详细信息,请使用事件查看器查看事件日志
- 使用Xmanger登陆aix系统桌面时报桌面服务DT未启动问题
- 通过 Mesos、Docker 和 Go,使用 300 行代码创建一个分布式系统
- 通过 Mesos、Docker 和 Go,使用 300 行代码创建一个分布式系统
- ubuntu 16.04 安装docker-ce并配置加速器,让docker运行一个桌面系统
- 使用wildfly-10.1.0遇到一个问题:启动时提示“系统找不到指定的文件”
- 使用influxdb+cadvisor+grafana的docker镜像搭建一个实时监控系统的环境
- 通过Mesos、Docker和Go,使用300行代码创建一个分布式系统