您的位置:首页 > 运维架构 > Docker

Docker理解

2017-01-06 12:53 141 查看
近期一直在研究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实现,但是它的改动也会造成宿主机也跟着被改,所以直接改宿主机也可以实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  云计算 应用