快速理解docker

Docker是一个开源的容器引擎,也是当前大火的微服务的一种实现方案。docker能够将一个应用程序或者说app的全部运行环境打包进一个容器中。而容器是可以根据镜像批量生产的。也就是说,通过docker,开发者只需要将需要的应用以及依赖包全部按照docker规范编写dockerfile文件,就能制作出一个专属镜像,通过这个镜像,不管是在windows,还是linux上,都可义实例化一个完全一样的容器出来,这样,就能实现一次构建,到处运行。从而省略了不同机器上繁复的环境配置以及相关应用和平台不兼容的情况的发生。下面介绍一些docker相关概念。

Docker:  翻译过来为码头工人。码头工人主要是打包,批送集装箱。


Dockerfile: 装箱清单,在生产一个集装箱时,我们必须按照装箱清单往集装箱中填充货物。这里的概念也一样,Dockerfile主要就是记录了你想要构建的容器   所需 的全部环境和资源。比如java程序需要java环境,有的甚至还需要tomcat, 而有的则需要python环境,等等


Image:  镜像。镜像根据Dockerfile制作,可以把镜像理解为集装箱中的模板或者java中的类的概念,镜像就是一个标准模板,通过镜像,可以实例化出无数个 完全一样的集装箱(也就是容器)。镜像既可以在本地存储,也可以推送到远程仓库,一个镜像仓库还可以有不同的版本。这点和git仓库的概念非似。


Container: 容器(也就是集装箱)。 容器由Image实例化得到。集装箱就是我们最总运行应用程序的地方。集装箱的概念我们知道,就是将货物按照一定的标准  打包进一个按照一定规格构造的货物容器中。通过集装箱,我们可以直接将货物从发货人的仓库送到收货人的仓库,而不需要先在发货人仓库打包 -> 发货 -> 更换车或船时从将货物从箱中取出换装 ->等等 。在软件开发中,这意味着如果不使用Docker容器的概念,我们想要将在我们本机上 运行良好的程序打包到其他机器时,我们必须确保其他机器上有当前程序运行所需要的全部环境。如果没有,我们还需要在其他机器上配置安装。现在有了docker, 我们再也不需要了,因为一个应用程序和它所需要的所有环境都被打包进一个容器中。我们所需要做的就是在其他机器上安装 Docker, ,然后拉取镜 像,运行容器,原先在你的机器上运行良好的应用程序在这台机器上也能运行良好,而这整个过程只要简单的几个命令,减少了繁复的环境配置。这就是应用程序标准化打包进容器所带来的好处,实现了Docker官方所提出的build,ship,and run any app anywhere.



所有的容器都根据镜像实例化而来,而镜像也是分层的。第一层是基础镜像。基础镜像一般是只有一套简单的linux发行版,一般基础镜像都很小,因为里面不包括linux内核,实际上,docker容器在运行时,使用的还是宿主机的内核,这也是Docker和虚拟机不同的一点。所以这两者之间也不是什么替代关系,而是互补关系。Docker提供更轻量级的虚拟环境,但资源隔离性较差,一个4g内存的宿主机可以开启4-6个docker容器而没有压力,而虚拟机虽然提供了更好的资源隔离,也更安全,但这带来的代价也是资源消耗过大,4g内存的宿主机开两个虚拟机就开始非常卡顿。


以上只是用通俗的语言来介绍docker,接下来会有一系列的博客介绍一些docker的其他技术细节。



猜你喜欢

转载自blog.csdn.net/summermangozz/article/details/77411799
今日推荐