原文链接地址:中级篇docker 架构和底层技术(12) http://idig8.com/2018/07/29/docker-zhongji-12/
前 11 节主要是介绍 docker 的安装, 如果跟这我来学我相信大家已经有了一个 docker 的安装环境, 本次是看下 docker 的架构和底层的技术, 其实随着各位老铁的学习我相信对于 docker 架构和底层技术会越来越深入的了解, 特别是底层技术, 后面会边用边给大家介绍底层的 linux 的技术.
Docker 平台
Docker 提供了一个平台, 打包, 运行的 app 的平台
把 application 和底层的 infrastructure(基础建设)隔离开来
Docker Engine
最核心的是 Docker Daemon 我们称之为 Docker 守护进程, 也就是 Server 端, Server 端可以部署在远程, 也可以部署在本地, 因为 Server 端与客户端 (Docker Client) 是通过 Rest API 进行通信.
REST 做过 web 开发都了解, 它的效率杠杠的.
docker CLI 实现容器和镜像的管理, 为用户提供统一的操作界面, 这个 客户端提供一个只读的镜像, 然后通过镜像可以创建一个或者多个容器.(container), 这些容器可以只是一个 RFS(Root File System), 也可以是一个包含了用户应用的 RFS. 容器在 docker Client 中只是一个进程, 两个进程是互不可见的. 用户不能与 server 直接交互, 但可以通过与容器这个桥梁来交互, 由于是操作系统级别的虚拟技术, 中间的损耗几乎可以不计.
其实 docker 就是个 C/S 的架构, 有 client 和 server 的.
Docker 守护进程(dockerd)
REST API server
CLI 接口
Docker 的组织架构
Docker 的底层技术支持
容器 = cgroup+namespace+rootfs + 容器引擎(用户态工具 LXC)
- Cgroup(资源控制)
- Namespace(访问隔离)
- rootfs(文件系统隔离)
容器引擎(生命周期控制)
PS: 这里面很多底层的技术, 说实话, 还是感觉不需要那么急着了解这些底层 linux 的技术, 随着咱们慢慢对 docker 深入认识, 里面的技术细节也会展开深入的的说.
Docker 瞎扯淡
有初学者还在问, docker 都出了这么多课程了, 能否通俗易懂的说下, 我就在 baidu 找了一些内容分享出来, 文章也是转载的, 写的互联网.
首先你有一个 100 平方的房子 (服务器), 已知你(PHP 应用) 需要吃喝拉撒睡觉, 所以整个房子划分了卧室, 厨房, 卫生间等, 然后供你一个人享用, 但其实挺浪费的, 你一个人并不需要 100 平方这么大, 可能需要 20 平方 (服务器占用 20%) 就好了.
后来又来了个别人 (Java 应用) 也被安排到了这个房子里生活, 他也需要吃喝拉撒睡, 所以你们挤在了一个床上, 用一个卫生间 (比如 http 服务器). 如果你改了你的习惯(例如 http 服务配置项) 同样会影响别人的生活.
后来又来了人 (Node 应用), 这时候房东发现房子不够大了, 所以搬家(迁移, 升级服务器) 到另一个 150 平的房子, 但是搬家成本好高. 由于户型不同 (系统版本, 环境等) 需要装修好久, 此外还要把住户 (应用代码) 搬过来, 还需要把住户自定义的习惯都带过来简直麻烦死了.
这时候, 房东了解到了一个叫 Docker 的产品.
Docker 是一个可自由伸缩的集装箱房屋:
这个集装箱房屋虽小但是五脏俱全, 而且可以满足一切用户需求, 并支持高度自定义, 比如 Node 这位住户不需要厨房, 那么他的集装箱房子就小一点, 当然房租 (服务器消耗) 也便宜一些.
房东用了 Docker 这个产品之后, 发现租房这个事情变简单了:
房东不需要划分卫生间, 厨房, 卧室并进行装修了, 一切由用户自己定制集装箱. 房东只需要把集装箱放到房间里即可.
住户也不需要打架了, 以前一起付房租(消耗服务器资源), 现在按照自己集装箱大小付费. 而且你可以在你集装箱里面随便折腾, 爱怎么改配置就怎么改, 也不会影响到别人.
集装箱对于空间的使用, 更加直观, 房东可以更轻松了解到当前房间的空间使用率等, 以便升级房间.
房东搬新家的时候也开心了, 只要把一面墙炸开, 把里面一个个集装箱直接移过去新房子就好了, 啥也不需要配置, 都在集装箱里面呢.
扯完了:
你就是房东, 做运维的. 房间是服务器, 空间大小表示服务器硬件配置.
住户就是你的业务, 应用, 提供服务的.
伸缩集装箱房屋, 就是 Docker 容器, 里面是完全分离, 独立, 自由的环境和业务代码. 你可以在里面装一个 Ubuntu(消耗大)或者简版的, 可以跑业务代码的环境(消耗低).
Docker 抹平系统差异, 相当于把你多个房间都砸成长方形方便存放集装箱. 这样你可以快速把独立容器丢到各个配置了 Docker 的不同系统, 硬件配置的服务器上面.
因此也可以得到很高的伸缩性, 可以瞬间部署很多服务器很多容器, 然后负载均衡来提供大促服务等.
当然 Docker 概念, 功能不只是我上面说的这些, 这些只是我认为比较核心关键的.
开始新的征程
源码的路径: https://github.com/limingios/docker.git
目录结构:
- vagrant plugin install vagrant-vbguest
- vagrant reload --provision
- vagrant up
复制代码
创建完毕
- # 进入虚拟机
- vagrant ssh
- sudo docker version
复制代码
来源: https://juejin.im/post/5b7eb22be51d4538a67a8be4