本篇内容介绍了“Docker能干什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
打开翻译君输入Docker 结果显示码头工人,没错!码头工人搬运的是集装箱,那么今天要讲的Docker其操作的也是集装箱,这个集装箱就静态而言就是一个应用镜像文件,就动态而言,就是一个容器。蒙了吧?好吧,上图解释。
Docker从狭义上来讲就是一个进程,从广义上来讲是一个虚拟容器,其实更专业的叫法是应用容器( Application Container ),Docker进程和普通的进程没有任何区别,它就是一个普通的应用进程。不过是用来操作镜像文件的。所以Docker进程+构建的应用镜像文件就等于Docker容器。本文所有讲的Docker都是指Docker容器哦。
再继续下文之前我们首先要明确几个docker重要的基本概念吧,镜像,容器,仓库。
镜像Docker images,就类似于VM虚拟机里面的快照,但是可比快照轻量化多了。快照不懂?那可以把images直接理解成一个文件夹。我们可以通过ID或者易识别的名字+tag来确认唯一的目标镜像。ImagesID是一个64位的字符,但是一般我们都是使用前面12位就足够区别了。
容器Docker containers,你可以从镜像中创建容器,这如同从快照中创建虚拟机,不过更轻量,启动更快,秒启。应用是在容器中运行的,打个比方,你首先下载了一个Ubuntu的镜像,然后又安装mysql和Django应用及其依赖,来完成对它Ubutun镜像的修改,一个个人觉得非常完美应用镜像生成了!就把这个镜像分享给大家使用,大家通过这个镜像就生成一个容器。容器启动之后就会运行Django服务了。
仓库Docker registeries,docker仓库和存放集装箱的仓库是一样的,不过docker使用来存放镜像的。仓库存在公有和私有之分,公有仓库docker hub提供了非常多的镜像文件,这些镜像直接拉取下来就可以运行了,你也可以上传自己的镜像到docker hub上面。同时也可以自己搭建私有仓库用于团队项目管理。
结合前面介绍的基本概念,我们可以将docker的几个概念使用大致串起来,他们之间是如何运作的,也就是Docker的生命周期。看下图,主要是三步走。
我们来看一下二者的区别,因为 VM 的 Hypervisor 需要实现对硬件的虚拟化,并且还要搭载自己的操作系统,其中虚拟机操作系统占用内存是比较大的,一个操作系统有好几个G,自然在启动速度和资源利用率以及性能上有非常大的开销,如果在本地,或者个人电脑,那么影响还不是那么大,但是在云端就是一个非常大的资源浪费。
咱们很多时候做事情的时候不会考虑与事情本身无关的问题,比如造飞机的不会考虑飞机是否要潜水,对于我们目前很多移动互联网的应用来说,很少会涉及到对操作系统的部分,其实我们主要关心的是应用的本身,而VM虚拟机的上层是运行的运行时库和应用,整个虚拟机的空间是非常的庞大,但是容器化技术Docker技术的出现后,省去了操作系统这一层,多个容器之间相互隔离且共用了宿主操作系统和运行时库。
所以Docker 应用容器相对于 VM 有以下几个优点:
启动速度快,容器启动本质就是一个开启一个进程而已,因此都是秒启,而 VM 通常要更久。
资源利用率高,一台普通 PC 可以跑成百上千个容器,你跑十个 VM 试试。
性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这一部分占据了额外的资源。
所以很多移动互联网的应用或者云计算的后端节点都可以用docker来替换物理机器或者虚拟机。比如腾讯地图的很多后台服务基本上都迁移docker部署了。
前面说了那么多,始终还是雾里看花。下面就详细介绍一下技术架构,底层又是用的啥技术来实现上述那么多优点的?
Docker技术架构图:
通过脚本的方式安装docker,非常简单。
nicktang@nicktang-virtual-machine:~$ wget -qO- https://get.docker.com/ | sh
能够看见版本号,说明docker的安装成功。简单吧!至此就差一个镜像了。自己制作还是从公共仓库拉取就随你啦。
root@nicktang-virtual-machine:/data # sudo service docker stop #关闭守护进程
Docker的使用,我们主要从【增删查】几方面来说说怎么使用docker,为什么没有【改】呢,因为在我看来docker容器一旦出现问题了,根本没有修复的必要,直接把容器停止并删除,再启动,这样来得快。所以我们只需要掌握几个基本命令即可,具体如下。
【查】查看本地已有的镜像 Docker images
再用docker images查看的时候本地就增加了centos镜像。
第一个字段就是已经启动的容器ID,第二个字段就是这个容器是根据哪个镜像生成的。但是上面这个命令只是临时启动一下容器,上面图中的status 是exited(0),表示容器是退出状态。如果想容器在后台运行,所以我们需要启动守护式容器才可以,只要在启动命令中添加一个 -d参数,即docker run -d centos就可以了。
【查】查看镜像/容器的具体信息 docker inspect镜像ID(镜像名)/容器ID(容器名) docker inspect centos
这个命令是返回一个镜像或者容器详细信息的json串。其中包括ID,ip,版本,容器的主程序等非常多的信息,根据这些信息我们可以进行二次开发。在这个命令的基础之上增加一个-f参数我们可以指定获取自己需要的信息,比如获取redis容器的IP地址,内存信息,CPU使用情况。docker inspect -f '{{.NetworkSettings.IPAddress}}' [ID /Name]
查看容器目录结构,发现和物理机器的目录结构完全一致,这就是为什么有的人称docker容器也称之为虚拟机的原因啦。Exit可以退出容器终端。
这年头见面不聊点自动化什么的,持续什么的,都不好意思。所以,咱们也要了解一下持续集成,自动交付,自动部署。但是上面说了这么多,没发现Docker有那三样功能啊,是的,Docker是没有这个功能,但是你在完成上述三样自动化的步骤都是依赖Docker的。Docker是这些流程实现的基础,就如同软件开发,软件代码才是根本,开发工具是辅助。所有搭建一个完整的自动化流程还需要github+jenkins+ registry三样帮助。
持续集成和自动部署的原理如下图所示:
RD推送代码到git 仓库或者svn等代码服务器上面,git服务器就会通过hook通知jenkins。
jenkine 克隆git代码到本地,并通过dockerFile文件进行编译 。
打包生成一个新版本的镜像并推送到仓库 ,删除当前容器 ,通过新版本镜像重新运行。
而在整个过程中 RD只需要敲入三个命令Git add * ;Git commit –m “”;Git push即可完成持续集成、自动交付、自动部署。后面通过案例实际演示这个过程的神奇!
Docker还可以很方便的自动扩容哦,一般的自动扩容的两种方式,一种就是docker容量扩大,另一种就是docker节点数扩充。第一种就修改配置文件即可,第二种通过简单的拷贝,运行就完成了节点的扩容。
“Docker能干什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。