5 分钟带你看懂 Docker

 

导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成、自动交付、自动部署,并且实现开发环境、测试环境、运维环境三方环境的真正同步。本文从Docker定义,作用,技术架构,安装和使用等全方位带你看懂Docker。

 

 

什么是Docker?
5 分钟带你看懂 Docker


打开翻译君输入Docker 结果显示码头工人,没错!码头工人搬运的是集装箱,那么今天要讲的Docker其操作的也是集装箱,这个集装箱就静态而言就是一个应用镜像文件,就动态而言,就是一个容器。蒙了吧?好吧,上图解释。

5 分钟带你看懂 Docker

Docker从狭义上来讲就是一个进程,从广义上来讲是一个虚拟容器,其实更专业的叫法是应用容器( Application Container ),Docker进程和普通的进程没有任何区别,它就是一个普通的应用进程。不过是用来操作镜像文件的。所以Docker进程+构建的应用镜像文件就等于Docker容器。本文所有讲的Docker都是指Docker容器哦。

再继续下文之前我们首先要明确几个docker重要的基本概念吧,镜像,容器,仓库。

镜像Docker images,就类似于VM虚拟机里面的快照,但是可比快照轻量化多了。快照不懂?那可以把images直接理解成一个文件夹。我们可以通过ID或者易识别的名字+tag来确认唯一的目标镜像。ImagesID是一个64位的字符,但是一般我们都是使用前面12位就足够区别了。

5 分钟带你看懂 Docker

如图中左边红框中redis: lates和右边的红框中5f515359c7f8都唯一表示为同一个镜像。所以我们一般的镜像可以命名为类似centos:latest、centos:centos7.1.1503等等。

镜像是分层的,有基础镜像,仅仅包含操作系统,比如centos镜像;有中间件镜像,比如redis等数据库镜像;最后是应用镜像,就是指具体的应用服务了,应用镜像可以非常丰富,随时可以发布,这三者之间依次叠加。

所以当我们在使用 Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形成一个新镜像层。如下图,基础镜像就是centos镜像,中间件镜像就是两个红色圈,应用镜像就是紫色圈。其中redis+centos这样叠加组合的中间件镜像就可以供A服务或者B服务使用,这样叠加组合更加灵活。仍和一种镜像都可以从Docker hub公共仓库中拉取。

5 分钟带你看懂 Docker

容器Docker containers,你可以从镜像中创建容器,这如同从快照中创建虚拟机,不过更轻量,启动更快,秒启。应用是在容器中运行的,打个比方,你首先下载了一个Ubuntu的镜像,然后又安装mysql和Django应用及其依赖,来完成对它Ubutun镜像的修改,一个个人觉得非常完美应用镜像生成了!就把这个镜像分享给大家使用,大家通过这个镜像就生成一个容器。容器启动之后就会运行Django服务了。

5 分钟带你看懂 Docker

上面也说到了,容器就是一个个独立的封闭的集装箱,但是也需要对外提供服务的,所以Docker允许公开容器的特定端口,在启动Docker的时候,我们就可以将容器的特定端口映射到宿主机上面的任意一个端口,所以,如果几个服务都需要80端口,那么容器的对外端口是80,但是映射到宿主机上面就是任意端口,就不会产生冲突,所以就不需要通过代理来解决冲突。容器对外端口与宿主机的端口映射可以通过下面的命令来完成。

启动docker容器

docker run -d -p 2222:22 --name 容器名 镜像名

-d 守护容器,就是后台运行,退出命令窗口容器也不会停止

-it 交互式容器 退出命令窗口容器就停止运行了

-p 宿主机端口和容器端口映射

8081:80 宿主机端口:容器公开的端口

5 分钟带你看懂 Docker

仓库Docker registeries,docker仓库和存放集装箱的仓库是一样的,不过docker使用来存放镜像的。仓库存在公有和私有之分,公有仓库docker hub提供了非常多的镜像文件,这些镜像直接拉取下来就可以运行了,你也可以上传自己的镜像到docker hub上面。同时也可以自己搭建私有仓库用于团队项目管理。

结合前面介绍的基本概念,我们可以将docker的几个概念使用大致串起来,他们之间是如何运作的,也就是Docker的生命周期。看下图,主要是三步走。

5 分钟带你看懂 Docker

1、 开发构建镜像并将镜像push到Docker仓库
2、 测试或者运维从Docker仓库拷贝一份镜像到本地
3、 通过镜像文件开启Docker容器并提供服务

Docker的用途
5 分钟带你看懂 Docker


 

为啥要用Docker?这要从目前软件行业的痛点来讲起

 

1、软件更新发布及部署低效,过程繁琐且需要人工介入

2、环境一致性难以保证

3、不同环境之间迁移成本太高

 

有了Docker可以很大程度解决上面的问题。

首先,Docker的使用简单至极,从开发的角度来看就是三步走:构建,运输,运行。其中关键步骤就是构建环节,即打包镜像文件。但是从测试和运维的角度来看,那就只有两步:复制,运行。有了这个镜像,那么想复制到哪运行都可以,完全和平台无关了。同时Docker这种容器技术隔离出了独立的运行空间,不会和其他应用争用系统资源了以及还不需要考虑应用之间相互影响,想想就开心。

其次,因为在构建镜像的时候就处理完了服务程序对于系统的所有依赖,所以在你使用的时候,你可以忽略掉原本程序的依赖以及开发语言。对测试和运维而言,更多专注于自己的业务内容上。

最后,Docker于开发者而言提供了一种开发环境的管理办法,与测试人员而言保证了环境的同步,于运维人员提供了可移植的标准化部署流程。

所以, Docker 能干啥,总结如下:

  • 构建容易分发简单

  • 隔离应用解除依赖

  • 快速部署测完就销

Docker是个进程级的轻量化虚拟机,和传统虚拟机有啥区别呢?

Docker这个虚拟机超级轻量级,仅仅是一个进程而已。与传统的虚拟机比如VM有着巨大的差别,区别看下图:

5 分钟带你看懂 Docker

我们来看一下二者的区别,因为 VM 的 Hypervisor 需要实现对硬件的虚拟化,并且还要搭载自己的操作系统,其中虚拟机操作系统占用内存是比较大的,一个操作系统有好几个G,自然在启动速度和资源利用率以及性能上有非常大的开销,如果在本地,或者个人电脑,那么影响还不是那么大,但是在云端就是一个非常大的资源浪费。

咱们很多时候做事情的时候不会考虑与事情本身无关的问题,比如造飞机的不会考虑飞机是否要潜水,对于我们目前很多移动互联网的应用来说,很少会涉及到对操作系统的部分,其实我们主要关心的是应用的本身,而VM虚拟机的上层是运行的运行时库和应用,整个虚拟机的空间是非常的庞大,但是容器化技术Docker技术的出现后,省去了操作系统这一层,多个容器之间相互隔离且共用了宿主操作系统和运行时库

所以Docker 应用容器相对于 VM 有以下几个优点:

  • 启动速度快,容器启动本质就是一个开启一个进程而已,因此都是秒启,而 VM 通常要更久。

  • 资源利用率高,一台普通 PC 可以跑成百上千个容器,你跑十个 VM 试试。

  • 性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这一部分占据了额外的资源。

所以很多移动互联网的应用或者云计算的后端节点都可以用docker来替换物理机器或者虚拟机。比如腾讯地图的很多后台服务基本上都迁移docker部署了。

 

Docker内部架构与技术
5 分钟带你看懂 Docker


前面说了那么多,始终还是雾里看花。下面就详细介绍一下技术架构,底层又是用的啥技术来实现上述那么多优点的?

Docker技术架构图:

5 分钟带你看懂 Docker

5 分钟带你看懂 Docker

5 分钟带你看懂 Docker

5 分钟带你看懂 Docker

5 分钟带你看懂 Docker

5 分钟带你看懂 Docker

5 分钟带你看懂 Docker

5 分钟带你看懂 Docker

来源:京东云

 

原文链接:5 分钟带你看懂 Docker,转载请注明来源!

 分享到:






给TA打赏
共{{data.count}}人
人已打赏
运维

解决 Linux cp 命令加了 -f 后依然提示覆盖的问题

2023-11-15 15:11:29

运维

Linux 上定时检测 MySQL 服务是否宕机,并自动重启服务

2023-11-15 15:24:08

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索