Hello Docker

2015.08.25

慕陶童鞋在厂内做了一个关于docker的分享,有幸帮他制作一个ppt,趁机好好偷学一下~

什么是 Docker

“Docker is an open-source engine that automates the deployment of any application as a lightweight, portable, self-sufficient container that will run virtually anywhere.”

官方原话,我们可以理解为,Docker是一个开源的虚拟化工具,他可以把应用打包在一个容器里面进行运行,然后你可以在任何地点,任何时间运行这个容器,而不用去考虑这个应用需要什么环境需要什么配置。就好比,docker就像货轮,而集装箱就是一个一个不同的容器。

docker

Docker 解决了什么?

通俗的说,docker 解决了虚拟机能解决的问题,同时突破了虚拟机的瓶颈,但是和传统的虚拟化不同的地方,docker 并不需要去配环境,他的一个容器就是一个app,你可以把node装进去,你可以把nginx装进去,然后拖着这个集装箱到处走。总结一句话就是,更加轻量的虚拟化,节省了虚拟机的性能损耗

Docker 与 VM 对比

docker vs vm

就比如上面的图,Docker与传统的vm模式相比,最大的区别是它并不包含操作系统内核,普通的虚拟机,将操作系统运行在虚拟的硬件平台,然后再提供一个完整的运行环境给应用软件使用,这里面环环相扣,如果运行环境出错,哪最终应用软件也不能运行,而Docker则直接在宿主平台上加载运行应用程序,它们拥有非常高的独立性,应用与应用之间相互独立,互不影响,而且不受运行环境影响。

docker

Docker 实际案例

如果还是不太理解,那我们说一个案例,比如我们拿到一台服务器,你只拥有最原始的干净的系统,甚至这个系统连git 都没有安装,那么我如何把一个网站部署在上面呢?

首先,你要安装你网站能运行起来的环境,比如我的网站是Nodejs写的,那么,我就要在我的服务器上安装node 环境,然后你才可以跑起来,跑起来域名端口怎么办?哪我还要再装一个Nginx,这样我可以做一个本地的端口映射,从80端口,访问我设置应用跑在服务区上的端口,比如著名的ghost博客用的是2368这个端口,安装node环境或许比较容易,哪假如我要按照某些奇奇怪怪的应用,需要编译呢?这个时候你的系统就会变的乱七八糟,有时候你还不能同时运行两个同类的产品,比如nginx 和 apache,所以这个时候docker 出现了,你可以把你的现有的环境,打包成一个容器,这样你可以带着这个容器到处跑,你再也不用忍受在多台服务器上安装相同环境,带来漫长等待。而且docker上有很多镜像了,你只需要装了docker 下载这个镜像跑起来就可以了

尝试体验 Docker

首先我拿到了一台干净的服务器,服务器版本为CentOS 6.5,找到docker对应的服务器版本安装办法

  • 安装Docker
sudo yum install docker-io

注:CentOS-6有可能系统有一个包和docker重名,如果遇到了先卸载 ,“sudo yum -y remove docker”

  • 启动Docker
sudo service docker start
  • 安装一个镜像,比如 ikev2-vpn-server
docker pull gaomd/ikev2-vpn-server
  • 运行这个应用
docker run -d --name ikev2-vpn-server --privileged -p 500:500/udp -p 4500:4500/udp gaomd/ikev2-vpn-server

搞定,只需要四步即可完成相对比较难搞的ikev2的安装,

如果你要使用ikev2,只需要再往docker 容器里面传入相对应的参数,比如我想制作ios8的配置文件,给iPhone 用户使用,哪么我只需要传入

docker run -i -t --rm --volumes-from ikev2-vpn-server -e "HOST=vpn1.example.com" gaomd/ikev2-vpn-server generate-mobileconfig > ikev2-vpn.mobileconfig

注意:vpn1.example.com替换成你自己对应的ip或者域名

然后你把这个配置文件下载,就可以愉快的玩耍了,但是在实际测试中发现,docker 的安装也需要一定的条件,在openvz的虚拟机上尝试了好几次都无法安装,可见docker 对原宿主也是要一定的要求的,比如一些低版本的内核就无法安装。

Docker 大显身手

用到Docker的地方不单单就是为了装这些东西,他的用处还有很多,比如集成测试~,还比如快速部署,更比如PaaS服务,相信未来Docker会越走越好,而且越来越多的人去使用~