Docker 是 dotCloud 目前是开源引擎,旨在提供一种应用程序的自动化部署解决方案,简单的说就是,在 Linux 系统上迅速创建一个容器(类似虚拟机)并在容器上部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装、部署和升级,非常方便。因为使用了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是 docker 最普遍的一个玩法。更多的玩法还有大规模 web 应用、数据库部署、持续部署、集群、测试环境、面向服务的云计算、虚拟桌面 VDI 等等。
Docker 使用 Go 语言编写,用 cgroup 实现资源隔离,容器技术采用 LXC. LXC 已经足够成熟,被多个主流 PaaS 服务商采用(比如 dotCloud),国内的一些互联网公司也在用(比如腾讯)。虽然都是企图解决自动化部署方面的问题,Docker 的解决方式有别于我们常提到的 Puppet/Chef,他们虽然走的是不同的路,但也可以拿来一起用。
上面说了 Docker 有很多玩法,下面介绍的玩法是:在服务器上用 docker 创建桌面系统,然后在客户端上通过 ssh 远程连接桌面,可以看作是平民化的 VDI 解决方案。
Docker安装应用(CentOS 6.5_x64)
安装 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 7774f89504e5build 完后就可以用 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