Docker是啥?看完这篇理解并使用Docker
发布网友
发布时间:2024-09-03 19:32
我来回答
共1个回答
热心网友
时间:2024-10-13 15:13
Docker是什么?输入“Docker”后,翻译显示为“码头工人”,没错!码头工人搬运的是集装箱,那么Docker操作的也是集装箱。这个集装箱静态而言就是一个应用镜像文件,动态而言,就是一个容器。
Docker从狭义上讲是一个进程,广义上讲是一个虚拟容器,其实是应用容器。Docker进程与普通进程没有区别,它只是一个普通的应用进程,用于操作镜像文件。因此,Docker进程+构建的应用镜像文件等于Docker容器。本文所有讲到的Docker都是指Docker容器。
接下来,我们首先明确几个Docker重要的基本概念:镜像、容器、仓库。镜像(Docker images)类似于VM虚拟机中的快照,但比快照轻量化。镜像可以理解为文件夹,我们可以通过ID或易识别的名字+tag来确认唯一的目标镜像。ImagesID是一个64位字符,但通常使用前12位就足够区分了。
容器(Docker containers)可以从镜像中创建,就像从快照中创建虚拟机,但更轻量,启动更快。应用在容器中运行。打个比方,你首先下载了一个Ubuntu的镜像,然后安装mysql和Django应用及其依赖,完成对Ubuntu镜像的修改,生成了一个个人觉得非常完美的应用镜像!然后把这个镜像分享给大家使用,大家通过这个镜像就生成一个容器。容器启动后就会运行Django服务。
容器是一个独立的封闭的集装箱,但需要对外提供服务。因此,Docker允许公开容器的特定端口,在启动Docker时,我们可以将容器的特定端口映射到宿主机上的任意端口。如果几个服务都需要80端口,那么容器的对外端口是80,但映射到宿主机上就是任意端口,就不会产生冲突,因此不需要通过代理来解决冲突。
仓库(Docker registries)用于存放镜像,有公有和私有之分。公有仓库Docker hub提供了许多镜像文件,可以直接拉取运行。你也可以上传自己的镜像到Docker hub。同时,你也可以自己搭建私有仓库用于团队项目管理。
结合前面介绍的基本概念,我们可以将Docker的几个概念大致串起来,了解它们是如何运作的,也就是Docker的生命周期。主要是三步走:1、开发构建镜像并将镜像push到Docker仓库;2、测试或运维从Docker仓库拷贝一份镜像到本地;3、通过镜像文件开启Docker容器并提供服务。
为何要用Docker?它能干些什么?这要从目前软件行业的痛点来讲起。软件更新发布及部署低效,过程繁琐且需要人工介入;环境一致性难以保证;不同环境之间迁移成本太高。有了Docker可以很大程度解决这些问题。
Docker提供了一种开发环境的管理办法,与测试人员保证了环境的同步,于运维人员提供了可移植的标准化部署流程。所以,Docker能干些什么?总结如下:构建容易分发简单;隔离应用解除依赖;快速部署测完就销。
Docker是个进程级的轻量化虚拟机,与传统的虚拟机VM有啥区别呢?Docker这个虚拟机超级轻量级,仅仅是一个进程而已。与传统的虚拟机VM有着巨大的差别。区别看下图:
从Docker依赖的底层技术来看,Docker原生态不能直接在Windows平台上运行,只支持Linux系统,因为Docker依赖Linux kernel三项最基本的技术:namespaces充当隔离的第一级,是对Docker容器进行隔离;Cgroups是容器对使用的宿主机资源进行核算并限制的关键功能;union FS主要是对镜像(image)这一块作支持,采用copy-on-write技术,让大家可以共用某一层,对于某些差异层的话就可以在差异的内存存储。
Libcontainer是一个库,是对上面这三项技术做一个封装。Docker engine用来控制容器container的运行,以及镜像文件的拉取。
Docker安装通过脚本的方式安装Docker,非常简单。1、获取最新的Docker安装包;2、启动Docker后台服务;3、验证Docker安装成功;4、获取镜像。
Docker的使用主要从“增删查”几方面来说说。查看本地已有的镜像,运行一个镜像,即启动一个容器;拉取指定的镜像文件;查看所有的容器;查看镜像/容器的具体信息;进入容器;删除容器。
如何用Docker完成持续集成、自动交付、自动部署?Docker没有持续集成、自动交付、自动部署的功能,但它们都是依赖Docker的。Docker是这些流程实现的基础。
总结:Docker具有超轻量化,但不建议一台机器上部署太多的应用,同时部署时一定要差异化部署,即将大量计算、内存需求大、IO操作频繁的对系统资源需求不一致的部署到同一台宿主机上。