歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 使用 Docker/LXC 迅速啟動一個桌面系統

使用 Docker/LXC 迅速啟動一個桌面系統

日期:2017/2/28 14:28:48   编辑:Linux教程

Docker 是 dotCloud 目前是開源引擎,旨在提供一種應用程序的自動化部署解決方案,簡單的說就是,在 Linux 系統上迅速創建一個容器(類似虛擬機)並在容器上部署和運行應用程序,並通過配置文件可以輕松實現應用程序的自動化安裝、部署和升級,非常方便。因為使用了容器,所以可以很方便的把生產環境和開發環境分開,互不影響,這是 docker 最普遍的一個玩法。更多的玩法還有大規模 web 應用、數據庫部署、持續部署、集群、測試環境、面向服務的雲計算、虛擬桌面 VDI 等等。

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

上面說了 Docker 有很多玩法,下面介紹的玩法是:在服務器上用 docker 創建桌面系統,然後在客戶端上通過 ssh 遠程連接桌面,可以看作是平民化的 VDI 解決方案。

Docker的搭建Gitlab CI 全過程詳解 http://www.linuxidc.com/Linux/2013-12/93537.htm

Docker 和一個正常的虛擬機有何區別? http://www.linuxidc.com/Linux/2013-12/93740.htm

在 Docker 中使用 MySQL http://www.linuxidc.com/Linux/2014-01/95354.htm

Docker 將改變所有事情 http://www.linuxidc.com/Linux/2013-12/93998.htm

Docker安裝應用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm

安裝 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 [email protected] -p 49153 ./docker-desktop
[email protected]'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 的詳細介紹:請點這裡
Docker 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved