快速搭建网站的好处,传媒公司怎么注册,久久seo综合查询,做网站的属于什么专业Docker 容器学习笔记
容器的由来
早先#xff0c;虚拟机通过操作系统实现相互隔离#xff0c;保证应用程序在运行时相互独立#xff0c;避免相互干扰。但是操作系统又笨又重#xff0c;耗费资源严重#xff1a; 容器技术只隔离应用程序的运行时环境但容器之间共享同一个…Docker 容器学习笔记
容器的由来
早先虚拟机通过操作系统实现相互隔离保证应用程序在运行时相互独立避免相互干扰。但是操作系统又笨又重耗费资源严重 容器技术只隔离应用程序的运行时环境但容器之间共享同一个操作系统这里的运行时环境指的是程序运行依赖的各种库以及配置。 容器更加轻量级且占用资源更少与操作系统动辄几G的内存占用相比容器占用的空间少得多只需要若干M的空间因此可以在同等规格的硬件上大量部署容器这是虚拟机无法比拟的且容器启动速度快其的打包服务栈提供了更加高效的方式So cool。
容器是一种通用技术Docker只是其中一种实现。
什么是Docker
一个用Go语言实现的开源项目方便用户创建和使用容器Docker将程序以及程序所有的依赖都打包到Docker container这样程序在任何环境都有一致的表现程序运行的依赖也就是容器就好比集装箱容器所处的操作系统就好比货船或港口程序的表现之和集装箱有关系容器与货船或者港口操作系统没关系。
因此我们看到Docker可以屏蔽环境差异也就是说只要程序打包到docker中无论运行在什么环境下程序的行为都是一致的不会再有“在我的环境上可以运行可以实现build once, run everywhere。
此外Docker另一个好处是快速部署是当前互联网公司最常见的应用场景一方面原因是容器的启动速度快另一方面的原因是只要确保一个容器中的程序正确运行那么无论在生产环境部署多少都能正常运行。
如何使用Docker
Docker中的重要概念
dockerfileimagecontainer
实际上可以简单的把image理解为可执行程序container就是运行起来的进程。
写程序需要源代码“写”image就需要dockerfiledockerfile就是image的源代码Docker就是“编译器”。
因此程序员只需要在Dockerfile中指定那些程序、依赖哪些配置之后dockerfile交给“编译器”Docker进行“编译”即docker build命令生成可执行程序就是image之后就可以运行image了即docker run命令image运行起来之后就是docker container。
Docker是如何工作的
实际上docker使用了常见的CS架构也就是client-server模式docker client负责处理用户输入的各种命令比如docker build、docker run真正工作的其实是server即docker daemon值得注意的是docker client和docker daemon可以运行在同一台机器上。
可以用一下命令解释docker的工作流程
docker build
当写完dockerfile交给docker“编译”时使用这个命令那么client在接收到请求后转发给docker daemon接着docker daemon根据dockerfile创建出“可执行程序”image。 docker run
有了“可执行文件”image就可以运行程序了接下来使用命令docker rundocker daemon接收到该命令后找到具体的image然后加载到内存开始执行image执行起来就是所谓的container。 docker pull
其实docker build和docker run是两个最核心的命令会用连个命令基本上docker就可以用起来了剩下的都是一些补充。
那么docker pull是干嘛的
我们之前说过docker中image的概念就类似于“可执行程序”我们可以从哪里下载到别人写好的应用程序呢很简单那就是APP Store即应用商店。与之类似既然image也是一种“可执行程序”那么有没有Docker Image Store呢答案是肯定的这就是Docker Hubdocker官方的“应用商店”你可以在这里下载到别人编写好的image这样你就不用自己编写dockerfile了。
docker registry 可以用来存放各种image公共的可以供任何人下载image的仓库就是docker Hub。那么该怎么从Docker Hub中下载image呢就是这里的docker pull命令了。
因此这个命令的实现也很简单那就是用户通过docker client发送命令docker daemon接收到命令后向docker registry发送image下载请求下载后存放在本地这样我们就可以使用image了。 最后可以了解一下docker的底层实现。
docker的底层实现
docker基于Linux内核提供这样几项功能实现的
NameSpace
Linux中的PID、IPC、网络等资源师全局的而NameSpace机制是一种资源隔离方案在该机制下这些资源不再是全局的而是属于某个特定的NameSpace各个NameSpace下的资源互不干扰使得每个NameSpace看上去就像一个独立的操作系统但是只有NameSpace是不够的。
Control groups
虽然有了NameSpace技术可以实现资源隔离但进程还是可以不受控的访问系统资源比如CPU、内存、磁盘、网络等为了控制容器中进程对资源的访问Docker采用control groups技术(也就是cgroup)有了cgroup就可以控制容器中进程对系统资源的消耗了比如你可以限制某个容器使用内存的上限、可以在哪些CPU上运行等等。
有了这两项技术容器看起来就真的像是独立的操作系统了。
总结
docker是目前非常流行的技术很多公司都在生产环境中使用但是docker依赖的底层技术实际上很早就已经出现了现在以docker的形式重新焕发活力并且能很好的解决面临的问题。 内容参考自什么是Docker看这一篇干货文章就够了