zoukankan      html  css  js  c++  java
  • 使用 Docker/LXC 迅速启动一个桌面系统

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

    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`
    

    安装 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 就会自动下载一个 ubuntu 镜像(第一次运行才需要下载),并在一个 container(容器)里运行一个 ubuntu 系统(类似虚拟机)和 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,世界变了,反了,操作系统和应用程序的地位颠倒了~

    $ docker run -i -t ubuntu echo hello world
    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
    

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

    docker desktop

  • 相关阅读:
    Druid 使用 Kafka 将数据载入到 Kafka
    Druid 使用 Kafka 数据加载教程——下载和启动 Kafka
    Druid 集群方式部署 —— 启动服务
    Druid 集群方式部署 —— 端口调整
    Druid 集群方式部署 —— 配置调整
    Druid 集群方式部署 —— 配置 Zookeeper 连接
    Druid 集群方式部署 —— 元数据和深度存储
    Druid 集群方式部署 —— 从独立服务器部署上合并到集群的硬件配置
    Druid 集群方式部署 —— 选择硬件
    Druid 独立服务器方式部署文档
  • 原文地址:https://www.cnblogs.com/timssd/p/4658628.html
Copyright © 2011-2022 走看看