Docker理解

近期一直在研究Docker,感悟颇深,和大家分享一下Docker 在云计算中的应用和Docker的原理。
Docker 用法https://yeasy.gitbooks.io/docker_practice/content/

  • Docker 是什么?有哪些用途?
    • https://yeasy.gitbooks.io/docker_practice/content/introduction/what.html我的理解就是Docker提供简化版linux系统,它和宿主机使用同一内核 我们可以用 uname -a 去查看。 也就是说内核空间和宿主机相同,但是用户空间和宿主机不同,大家可以进入docker bash 看一下 里面也提供了类似Linux 根文件系统的结构,也有依赖库,一些可执行文件。我的理解就是Docker image 提供的容器就是一个根文件系统,类似chroot 方式进入这个文件系统,但是docker它提供了更强大的网络,分层机制。至于Docker 的用途很多,用于云计算,和web部署都十分方便,只需要提供一个自己做好的docker image就行了,其实就是一个根文件系统。docker run -it --rm test bash
      bash-4.3# ls
      bin etc lib mnt root sbin sys usr
      dev home media proc run srv tmp var
  • Docker镜像与容器
    Docker镜像是指从Docker hub上pull下来的image,当你run这个image的时候就形成了一个容器,容器是镜像的产生物,我们可以将容器的改动commit到镜像,否则容器内的改动不会影响镜像,也可以通过Dockerfile实现。

  • Pull下来的docker 镜像放哪里了?
    一般都放在/var/lib/docker/aufs/mnt里面,pull下来后就被解压,它是分层存储的,每次的commit都在不同的层。

  • Docker 性能怎么样?
    我试过11万连接的Websocket server 和 nginx server 都没有什么问题,docker也可以限制内存和cpu的使用量。

  • Docker 性能限制问题
    对于内核参数sysctl 配置,进入容器后发现根本就改不了,因为它挂载在一个只读分区上,方法就是run的时候加上–sysctl 和 –ulimit 参数或者就是加上–privileged 特权进入修改。主要限制就是文件描述符 --ulimit nofile=500000:500000 即可解决,但是实际情况就是即使你设置再大 连接数量就只能是65535个,这里还有一个十分重要的内核参数 net.ipv4.netfilter.ip_conntrack_max = 65536 这个默认是65536 这个意思说内核对连接进行跟踪,内核会建立相关结构去保存这些连接状态,把这个值改大一些就能解决65535限制。https://github.com/docker/docker/issues/29875
    可通过运行时加–sysctl实现,但是它的改动也会造成宿主机也跟着被改,所以直接改宿主机也可以实现。

 

posted on 2017-01-06 12:54  沐浴凌风  阅读(160)  评论(0编辑  收藏  举报

导航