博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker简介
阅读量:5306 次
发布时间:2019-06-14

本文共 2483 字,大约阅读时间需要 8 分钟。

我们通过四W(what,when, why, how)原则去学习一下docker

What

什么是docker?

docker是一种虚拟化技术,太过专业的术语这里不聊,反而容易乱。可以将其比作类似vmware的虚拟软件,一个docker容器里面可以包含一套完整的软件运行环境。

 

When

什么时候需要使用docker技术,或者说docker技术的应用场景有哪些?

场景一:节省项目环境部署时间

1.单项目打包

每次部署项目到测试、生产等环境,都要部署一大堆依赖的软件、工具,而且部署期间出现问题几率很大,不经意就花费了很长时间。
Docker主要理念就是环境打包部署,可在任意Docker Engine运行。前期我们只需要将每个项目环境打包到镜像,push到镜像仓库,当有需要部署这个项目时,直接pull镜像启动容器,这个项目就可以访问了!一次构建多次部署,一劳永逸。

2.整套项目打包

公司有一项这样的业务:有一个产品可以整套部署到客户那里,以往都是派一名实施工程师到客户那部署。如果用了Docker,我们可以前期将这套项目封装打包起来,实现一键部署,分分钟钟搞定,就不需要再派人过去了。比如官方的Docker Compose编排工具。

3.新开源技术试用

有时,我们想调研一些开源项目,我们可以直接从公共镜像仓库pull项目官方做好镜像启动容器即可。

场景二:环境一致性

开发工程师在Windows系统上开发项目,测试、生产环境操作系统都是Linux系统,这就产生了环境不一致的情况:项目在开发电脑本地运行没问题,到了测试或生产环境就运行不起来,解决这问题最好方式就是这三处环境保持一致。软件版本、操作系统、物理机、云主机......试想下,能做到吗?
Docker将项目环境打包成镜像,可以在任何Docker Engine上浪。此时Docker就是我们这些项目的基石,Docker可移植性,保持运行状态一致性,可想而知,是否更容易解决问题呢?

场景三:持续集成

一个项目版本快速迭代的测试场景,需要一个合理的CI(持续集成)/CD(持续部署)环境支撑。CI/CD是一个周期性自动化项目测试流程,包括构建、部署、测试、发布等工作,很少需要人工干预。
项目测试流程大致如下图:
Docker结合Jenkins构建持续集成环境大致如下图:
 
Docker在上面这个图的作用是项目镜像构建和快速部署,打通测试环境与生产环境,高度保持多个环境之间一致性。

场景四:微服务

微服务是近几年来IT圈内谈论比较多的一个名词,意义也很简单:尽可能细粒度拆分业务程序架构,由多个独立服务组成业务系统。
Docker的容器设计原则:一个容器一个服务,容器之间相互隔离,不妨试想一下,如果容器作为这些独立服务的部署单元,是不是有点恰到好处呢?

场景五:弹性伸缩

说到弹性伸缩,通常是集群模式下存在。像AWS AutoScaling,可以自定义资源阈值,SLB自动添加EC2云主机,应对业务访问量突发情况。
当适用Docker技术以后,这种弹性伸缩的单元就是云主机之上的容器了。
容器集群化管理已经有成熟的解决方案,比如:官方的Swarm,谷歌的K8S
由于Docker容器快速启动特性,可以很快速的启动几十个、上百个容器来提供更多并发和资源利用率(如果宿主机资源不够,还需要加主机到集群中)。

总结:简化部署流程,提高生产力!

 

Why

为什么使用docker?

我们来比较一下虚拟机和docker容器的架构

kvm虚拟机

 docker容器

 

 通过上面两图的比较,可以发行架构上有两个区别:

1、引擎不一样,一个是hypervisor引擎,一个是docker daemon引擎

2、虚拟机在hypervisor之上,需要一个guest os(客户端操作系统);而docker没有

 

docker容器与虚拟机的比较

既然架构上有区别了,那么具体在性能等一些方面,肯定会有所不同,这也是我们why使用docker的原因。

时间上:docker秒级启动,kvm虚拟机分钟级别(多了一层guest os,肯定会拖延启动的时间)

空间上:docker资源占用小,部署起来比虚拟机更快速(docker镜像通常以M为单位,而虚拟机通常以G为单位)

性能上:docker共享宿主机内核,系统级虚拟化,占用资源少,容器性能接近物理机;虚拟机需要hypervisor支持来虚拟化一些设备,而且有完整的GuestOs,虚拟化开销大,故而性能没有容器的好

安全上:docker只是进程级的隔离(每个容器是一个进程,进程之间是共享宿主机器内核的),所以 隔离性 和  稳定性 不如虚拟机

使用上:docker容器可运行在主流的任何linux发行版上(因为容器共享宿主机内核,不用考虑pu是否支持虚拟化技术);而kvm是基于硬件的完全虚拟化,需要硬件的支持,如果cpu不支持虚拟化技术的话,虚拟机就无法正确安装

 

 

How

怎么使用docker,这是最费脑子的环节了,需要记忆的东西比较多,拆分开来一一介绍,这里只做一些基本概念的介绍

基本概念 

仓库(Registry)

集中存放镜像文件的场所。
仓库分:公有仓库 和私有仓库。
仓库服务器上可以放多个仓库,每个仓库可以包含多个镜像。

镜像(Image)

可以理解成一个压缩包
是一个只读的模板。如:一个镜像可以包含一个完整的操作系统环境,里面仅仅安装了python环境。
镜像可以用来创建Docker容器,一个镜像可以创建很多容器。

容器(Container)

Docker利用容器来运行应用。
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。
每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的Linux环境和运行在其中的应用程序
记住一个原则:容器只做运算,不做存储,就算连程序的代码也不要放到docker里(只是推荐,并非一定要这样
 

转载于:https://www.cnblogs.com/hf8051/p/11433736.html

你可能感兴趣的文章
在WPF程序中使用摄像头兼谈如何使用AForge.NET控件(转)
查看>>
Linux修改用户shell
查看>>
[译]我是怎么构建Node.js程序的
查看>>
suse 源的添加与删除,以及源地址
查看>>
56个 PHP 开发常用代码片段(上)
查看>>
maven安装与项目移植
查看>>
大数据告诉你互联网到底有多大?完全超出你想象!
查看>>
C语言输入日期计算是该年的第几天
查看>>
Caliburn v2 变更-模块化
查看>>
Python之路,Day3 - Python基础3
查看>>
实验 4 在分支循环结构中调用自定义函数
查看>>
Java学习笔记-3.类与对象
查看>>
力扣——车的可用捕货量
查看>>
Redis参数
查看>>
当多个客户请求一个servlet时,引擎为每个客户启动一个线程,那么servlet类的成员变量被所有的线程共享?...
查看>>
jquery更改输入框type为密码框password
查看>>
Usb设备驱动0:从usb设备被发现开始
查看>>
如何有效表达自己的想法
查看>>
ORA-02050故障诊断一例
查看>>
mysql sql灵活运用
查看>>