使用 Docker/LXC 迅速启动一个桌面系统
来源:互联网 发布:单片机显示大字代码 编辑:程序博客网 时间:2024/06/02 10:05
Docker 使用 Go 语言编写,用 cgroup 实现资源隔离,容器技术采用 LXC. LXC 已经足够成熟,被多个主流 PaaS 服务商采用(比如 dotCloud),国内的一些互联网公司也在用(比如腾讯)。虽然都是企图解决自动化部署方面的问题,Docker 的解决方式有别于我们常提到的 Puppet/Chef,他们虽然走的是不同的路,但也可以拿来一起用。
上面说了 Docker 有很多玩法,下面介绍的玩法是:在服务器上用 docker 创建桌面系统,然后在客户端上通过 ssh 远程连接桌面,可以看作是平民化的 VDI 解决方案。
安装 Docker/LXC
如果 Linux kernel 是 3.8 以前的内核,或者内核缺少 aufs 模块需要安装额外的扩展模块:
1
$
sudo
apt-get
install
linux-image-extra-`
uname
-r`
安装 lxc-docker:
1
$
sudo
apt-get
install
software-properties-common
2
$
sudo
add-apt-repository ppa:dotcloud/lxc-docker
3
$
sudo
apt-get update
4
$
sudo
apt-get
install
lxc-docker
运行一个简单系统
运行 docker 就会自动下载一个 ubuntu 镜像(第一次运行才需要下载),并在一个 container(容器)里运行一个 ubuntu 系统(类似虚拟机)和 shell:
1
$ docker run -i -t ubuntu /bin/
bash
在 host 上 ps 一下发现 docker 使用 lxc-start 工具和 /var/lib/docker/containers/…/config.lxc 里的参数启动1个 lxc 容器并运行 /bin/bash 程序:
1
$
ps
aux |
grep
docker
2
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,世界变了,反了,操作系统和应用程序的地位颠倒了~
1
$ docker run -i -t ubuntu
echo
hello world
2
hello world
运行一个 “桌面” 系统
来看看如何启动一个 “桌面” 系统,按照 docker-desktop 项目给的方法和这里的 Dockerfile开始 build 一个简单的 “桌面系统”:
1
$ docker build -t vpsee/docker-desktopgit://github.com/rogaha/docker-desktop.git
2
Step 1 : FROM ubuntu:12.10
3
---> b750fe79269d
4
...
5
Successfully built 7774f89504e5
build 完后就可以用 docker images 命令看到:
01
$ docker images
02
REPOSITORY TAG ID CREATED SIZE
03
ubuntu 12.04 8dbd9e392a96 3 months ago 131.5 MB (virtual 131.5 MB)
04
ubuntu 12.10 b750fe79269d 3 months ago 24.65 kB (virtual 180.1 MB)
05
ubuntu latest 8dbd9e392a96 3 months ago 131.5 MB (virtual 131.5 MB)
06
ubuntu precise 8dbd9e392a96 3 months ago 131.5 MB (virtual 131.5 MB)
07
ubuntu quantal b750fe79269d 3 months ago 24.65 kB (virtual 180.1 MB)
08
base latest b750fe79269d 3 months ago 24.65 kB (virtual 180.1 MB)
09
base ubuntu-12.10 b750fe79269d 3 months ago 24.65 kB (virtual 180.1 MB)
10
base ubuntu-quantal b750fe79269d 3 months ago 24.65 kB (virtual 180.1 MB)
11
base ubuntu-quantl b750fe79269d 3 months ago 24.65 kB (virtual 180.1 MB)
12
vpsee/docker-desktop latest 7774f89504e5 18 minutes ago 12.29 kB (virtual 1.576 GB)
启动这个刚 build 好的 “桌面系统” 吧,注意 a581df505cb9 是这个容器的 ID:
1
$ docker run -d vpsee/docker-desktop
2
a581df505cb9
这个系统有自己的内部 IP 地址,外界不能直接访问,所以要想从外界 ssh 登陆的话,需要把它的 ssh 服务端口(22)和 host 上某个端口通过 docker port 命令做个映射,这样访问 host 上的 49153 端口就是访问某个 container 里面的 22 端口了:
1
$ docker port a581df505cb9 22
2
49153
查看一下当前运行的容器:
1
$ docker
ps
2
ID IMAGE COMMAND CREATED STATUS PORTS
3
a581df505cb9 vpsee/docker-desktop:latest /bin/
bash
/src/start 24 minutes ago Up 24 minutes 49153->22
然后我们可以在 Mac/Linux 客户端上通过 ssh 访问这个 “桌面” 了:
1
$
ssh
-YC -c blowfish docker@192.168.2.45 -p 49153 ./docker-desktop
2
docker@192.168.2.45's password:
注意上面的 password 是随机生成的(每次创建新系统密码都会变),那密码是什么呢?通过 docker logs 可以找到:
01
$ docker logs a581df505cb9
02
User: docker Password: ieFi2iu1Phie
03
Adding user `docker
' to group `sudo'
...
04
Adding user docker to group
sudo
05
Done.
06
.bashrc
07
.config/
08
.config/rox.sourceforge.net/
09
.config/rox.sourceforge.net/ROX-Filer/
10
.config/rox.sourceforge.net/ROX-Filer/pb_Default
11
.config/rox.sourceforge.net/ROX-Filer/globicons
12
.config/rox.sourceforge.net/ROX-Filer/panels
13
.config/rox.sourceforge.net/ROX-Filer/menus2
14
.config/rox.sourceforge.net/ROX-Filer/Options
15
spring-desktop-wallpaper-1920x1200-0911085.jpg
16
docker-desktop
从 Mac 上访问远端桌面的话需要有 X 环境(下载 XQuartz 安装即可);从 Linux 上可以直接访问。登陆后界面如下:
文章出处:http://www.vpsee.com/2013/07/use-docker-and-lxc-to-build-a-desktop/
- 使用 Docker/LXC 迅速启动一个桌面系统
- 使用 Docker/LXC 迅速启动一个桌面系统
- 使用 Docker/LXC 迅速启动一个桌面系统
- 迅速返回系统桌面
- docker run --lxc-conf 配置项使用
- ubuntu 16.04 安装docker-ce并配置加速器,让docker运行一个桌面系统
- LXC vs Docker
- docker 的LXC技术
- Docker、LXC、虚拟机异同
- docker, lxc, docker-compose, juju
- Docker: Ubuntu使用VNC运行基于Docker容器里的桌面系统
- LXC和Docker的关系
- docker lxc cgroup namespace入门
- Docker 介绍: 相关技术(LXC)
- docker lxc cgroup namespace简述
- Running Docker Swarm inside LXC
- Docker与LXC的区别
- docker lxc cgroup namespace入门
- 第64条:for-each循环优于for循环
- 软件下载地址
- MySQL的数据库引擎的类型
- 使用Intent Bundle在Activity间传递数据
- phpredis 可以用来存储php的session
- 使用 Docker/LXC 迅速启动一个桌面系统
- java冒泡排序
- string的笔试!
- 机房收费系统——UML图
- 手动创建ORACLE数据库
- linux下搭建ipv6的pppoe server端
- java选择排序
- oracle自带脚本说明(rdbms,ctx,sqlplus,javavm)
- oracle全文检索的配置