【超详细】通俗易懂地理解并使⽤Docker(上)
⽂章⽬录
Docker是啥
打开翻译君输⼊Docker结果显⽰码头⼯⼈,没错!码头⼯⼈搬运的是集装箱,那么今天要讲的Docker其操作的也是集装箱,这个集装箱就静态⽽⾔就是⼀个应⽤镜像⽂件,就动态⽽⾔,就是⼀个容器。蒙了吧?好吧,上图解释。
Docker从狭义上来讲就是⼀个进程,从⼴义上来讲是⼀个虚拟容器,其实更专业的叫法是应⽤容器( Application Container
),Docker进程和普通的进程没有任何区别,它就是⼀个普通的应⽤进程。不过是⽤来操作镜像⽂件的。所以Docker进程+构建的应⽤镜像⽂件就等于Docker容器。本⽂所有讲的Docker都是指Docker容器哦。
再继续下⽂之前我们⾸先要明确⼏个docker重要的基本概念:镜像,容器,仓库。
镜像Docker images,就类似于VM虚拟机⾥⾯的快照,但是可⽐快照轻量化多了。快照不懂?那可以把images直接理解成⼀个⽂件夹。我们可以通过ID或者易识别的名字+tag来确认唯⼀的⽬标镜像。ImagesID是⼀个64位的字符,但是⼀般我们都是使⽤前⾯12位就⾜够区别了。
如下图中左边红框中redis: lates和右边的红框中5f515359c7f8都唯⼀表⽰为同⼀个镜像。所以我们⼀般的镜像可以命名为类似centos:latest、centos:centos7.1.1503等等。
镜像是分层的,有基础镜像,仅仅包含操作系统,⽐如centos镜像;有中间件镜像,⽐如redis等数据库镜像;最后是应⽤镜像,就是指具体的应⽤服务了,应⽤镜像可以⾮常丰富,随时可以发布,这三者之间依次叠加。
所以当我们在使⽤ Docker构建镜像的时候,每⼀个命令都会在前⼀个命令的基础上形成⼀个新镜像层。如下图,基础镜像就是centos镜像,中间件镜像就是两个红⾊圈,应⽤镜像就是紫⾊圈。其中redi
s+centos这样叠加组合的中间件镜像就可以供A服务或者B服务使⽤,这样叠加组合更加灵活。仍和⼀种镜像都可以从Docker hub公共仓库中拉取。
容器Docker containers,你可以从镜像中创建容器,这如同从快照中创建虚拟机,不过更轻量,启动更快,秒启。应⽤是在容器中运⾏的,打个⽐⽅,你⾸先下载了⼀个Ubuntu的镜像,然后⼜安装mysql和Django应⽤及其依赖,来完成对它Ubutun镜像的修改,⼀个个⼈觉得⾮常完美应⽤镜像⽣成
了!就把这个镜像分享给⼤家使⽤,⼤家通过这个镜像就⽣成⼀个容器。容器启动之后就会运⾏Django服务了。
上⾯也说到了,容器就是⼀个个独⽴的封闭的集装箱,但是也需要对外提供服务的,所以Docker允许公开容器的特定端⼝,在启动Docker 的时候,我们就可以将容器的特定端⼝映射到宿主机上⾯的任意⼀个端⼝,所以,如果⼏个服务都需要80端⼝,那么容器的对外端⼝是80,但是映射到宿主机上⾯就是任意端⼝,就不会产⽣冲突,所以就不需要通过代理来解决冲突。容器对外端⼝与宿主机的端⼝映射可以通过下⾯的命令来完成。
启动docker容器
docker run -d -p 2222:22--name 容器名镜像名
-
d 守护容器,就是后台运⾏,退出命令窗⼝容器也不会停⽌
-it 交互式容器退出命令窗⼝容器就停⽌运⾏了
-p宿主机端⼝和容器端⼝映射
8081:80宿主机端⼝:容器公开的端⼝
仓库Docker registeries,docker仓库和存放集装箱的仓库是⼀样的,不过docker使⽤来存放镜像的。仓库存在公有和私有之分,公有仓库docker hub提供了⾮常多的镜像⽂件,这些镜像直接拉取下来就可以运⾏了,你也可以上传⾃⼰的镜像到docker hub上⾯。同时也可以⾃⼰搭建私有仓库⽤于团队项⽬管理。
结合前⾯介绍的基本概念,我们可以将docker的⼏个概念使⽤⼤致串起来,他们之间是如何运作的,也就是Docker的⽣命周期。
看下图,主要是三步⾛。
1:开发构建镜像并将镜像push到Docker仓库;
2:测试或者运维从Docker仓库拷贝⼀份镜像到本地;
3:通过镜像⽂件开启Docker容器并提供服务。
Docker能⼲些啥
为啥要⽤Docker?这要从⽬前软件⾏业的痛点来讲起 1、软件更新发布及部署低效,过程繁琐且需要⼈⼯介⼊,2、环境⼀致性难以保
证,3、不同环境之间迁移成本太⾼。有了Docker可以很⼤程度解决上⾯的问题。
⾸先,Docker的使⽤简单⾄极,从开发的⾓度来看就是三步⾛:构建,运输,运⾏。其中关键步骤就是构建环节,即打包镜像⽂件。但是从测试和运维的⾓度来看,那就只有两步:复制,运⾏。有了这个镜像,那么想复制到哪运⾏都可以,完全和平台⽆关了。同时Docker这种容器技术隔离出了独⽴的运⾏空间,不会和其他应⽤争⽤系统资源了以及还不需要考虑应⽤之间相互影响,想想就开⼼。
其次,因为在构建镜像的时候就处理完了服务程序对于系统的所有依赖,所以在你使⽤的时候,你可以忽略掉原本程序的依赖以及开发语⾔。对测试和运维⽽⾔,更多专注于⾃⼰的业务内容上。
docker打包镜像
最后,Docker于开发者⽽⾔提供了⼀种开发环境的管理办法,与测试⼈员⽽⾔保证了环境的同步,于运维⼈员提供了可移植的标准化部署流程。
所以, Docker 能⼲啥,总结如下:
1:构建容易分发简单;
2:隔离应⽤解除依赖;
3:快速部署测完就销。
Docker是个进程级的轻量化虚拟机,和传统虚拟机有啥区别呢?Docker这个虚拟机超级轻量级,仅仅是⼀个进程⽽已。与传统的虚拟机⽐如VM有着巨⼤的差别,区别看下图:
我们来看⼀下⼆者的区别,因为 VM 的 Hypervisor 需要实现对硬件的虚拟化,并且还要搭载⾃⼰的操作系统,其中虚拟机操作系统占⽤内存是⽐较⼤的,⼀个操作系统有好⼏个G,⾃然在启动速度和资源利⽤率以及性能上有⾮常⼤的开销,如果在本地,或者个⼈电脑,那么影响还不是那么⼤,但是在云端就是⼀个⾮常⼤的资源浪费。
咱们很多时候做事情的时候不会考虑与事情本⾝⽆关的问题,⽐如造飞机的不会考虑飞机是否要潜⽔,对于我们⽬前很多移动互联⽹的应⽤来说,很少会涉及到对操作系统的部分,其实我们主要关⼼的是应⽤的本⾝,⽽VM虚拟机的上层是运⾏的运⾏时库和应⽤,整个虚拟机的空间是⾮常的庞⼤,但是容器化技术Docker技术的出现后,省去了操作系统这⼀层,多个容器之间相互隔离且共⽤了宿主操作系统和运⾏时库。
所以Docker 应⽤容器相对于 VM 有以下⼏个优点:
1:启动速度快,容器启动本质就是⼀个开启⼀个进程⽽已,因此都是秒启,⽽ VM 通常要更久;
2:资源利⽤率⾼,⼀台普通 PC 可以跑成百上千个容器,你跑⼗个 VM 试试;
3:性能开销⼩, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这⼀部分占据了额外的资源。
所以很多移动互联⽹的应⽤或者云计算的后端节点都可以⽤docker来替换物理机器或者虚拟机。⽐如
腾讯地图的很多后台服务基本上都迁移docker部署了。
鉴于篇幅和时间限制,暂时先总结这么多,在理解、使⽤Docker(下)中将总结如何安装以及使⽤Docker。
学如逆⽔⾏⾈,不进则退

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。