Docker学习(一)
docker学习
<img src="" alt="docker_logo" />http://www.swjsj.com/wp-content/uploads/2014/12/QQ截图20141222230535.jpg
参照百度百科的内容
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包括系统。
优势
由于其基于LXC的轻量级虚拟化的特点,docker相比KVM之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的PaaS(如dokku), 构建自动化测试和持续集成环境,以及一切可以横向扩展的应用(尤其是需要快速启停来应对峰谷的web应用)。
1. 构建标准化的运行环境,现有的方案大多是在一个baseOS上运行一套puppet/chef,或者一个image文件,其缺点是前者需要base OS许多前提条件,后者几乎不可以修改(因为copy on write 的文件格式在运行时rootfs是read only的)。并且后者文件体积大,环境管理和版本控制本身也是一个问题。
2. PaaS环境是不言而喻的,其设计之初和dotcloud的案例都是将其作为PaaS产品的环境基础
3. 因为其标准化构建方法(buildfile)和良好的REST API,自动测试和持续集成/部署能够很好的集成进来
4. 因为LXC轻量级的特点,其启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,能够在单机环境下与KVM之类的虚拟化方案相比能够更加快速和占用更少资源
劣势
- Docker并不是全能的,设计之初也不是KVM之类虚拟化手段的替代品,简单总结几点:
- Docker是基于Linux 64bit的,无法在windows/unix或32bit的linux环境下使用
- LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的
- 隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库
- 网络管理相对简单,主要是基于namespace隔离
- cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(* 所以dotcloud主要是按内存收费)
- docker对disk的管理比较有限
- container随着用户进程的停止而销毁,container中的log等用户数据不便收集
针对1-2,有windows base应用的需求的基本可以pass了; 3-5主要是看用户的需求,到底是需要一个container还是一个VM, 同时也决定了docker作为 IaaS 不太可行。
针对6,7虽然是docker本身不支持的功能,但是可以通过其他手段解决(disk quota, mount –bind)。总之,选用container还是vm, 就是在隔离性和资源复用性上做权衡
另外即便docker 0.7能够支持非AUFS的文件系统,但是由于其功能还不稳定,商业应用或许会存在问题,而AUFS的稳定版需要kernel 3.8, 所以如果想复制dotcloud的成功案例,可能需要考虑升级kernel或者换用ubuntu的server版本(后者提供deb更新)。这也是为什么开源界更倾向于支持ubuntu的原因(kernel版本)
优缺点都有, 现在最新版本(docker.com)已经到Docker 1.0.1 版本了, 已经很稳定了, 做为开发环境来说,真的是很方便了, 对于用来调试,学习各个不同linux操作来说,真的堪称是神器都不为过,再也不用担心把linux系统直接整得启动不了了。
正如百度百科里面介绍的主要应用地方如 Sandbox,PaaS,Open Solution
安装
参照官方文档上面的安装方法,选择对应系统安装方法,支持的系统列表还挺多的。因为我自己的台式机上用的是ubuntu 14.04,所以我选择<a href="">ubuntuhttps://docs.docker.com/installation/ubuntulinux/.如下图
<img src="" alt="安装ubuntu文档" />http://www.swjsj.com/wp-content/uploads/2014/12/QQ图片20141222224811.png
低版本的安装方法复杂一点,如果能升级到最新的版本,就用最新的版本吧
安装方法简单
$ sudo apt-get update
$ sudo apt-get install docker.io
安装完成后,执行执行下面的语句,就能进入ubuntu容器交付界面了,直接就是root用户
$ sudo docker run -i -t ubuntu /bin/bash
Docker and UFW
docker需要开启防火墙的forwarding为ACCEPT,如果你的防火墙没有开启, 就不理这个了
如我的执行重启放火墙返回的信息,就是未开启防火墙
sily@sily-desktop:~$ sudo ufw reload
[sudo] password for sily:
未启用防火墙(跳过重新载入)
sily@sily-desktop:~$
或者按照这个方法,查看状态
sily@sily-desktop:~$ sudo ufw status
状态:不活动
sily@sily-desktop:~$ ^C
如果开启了防火墙,就按照下面设置
$ sudo nano /etc/default/ufw
# Change:
# DEFAULT_FORWARD_POLICY=\"DROP\"
# to
DEFAULT_FORWARD_POLICY=\"ACCEPT\"
重启防火墙
$ sudo ufw reload
开启默认端口如果想让别的机器访问的话
$ sudo ufw allow 2375/tcp
也可以使用iptables来查看防火墙的状态
sily@sily-desktop:~$ sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT tcp – 0.0.0.0/0 172.17.0.50 tcp dpt:22
ACCEPT all – 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT all – 0.0.0.0/0 0.0.0.0/0
ACCEPT all – 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
其实主要看 Chain FORWARD (policy ACCEPT) 这个,默认接受所有的端口,就行了哦