Docker简介

我们通过四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简介

Docker结合Jenkins构建持续集成环境大致如下图:

Docker简介

Docker在上面这个图的作用是项目镜像构建和快速部署,打通测试环境与生产环境,高度保持多个环境之间一致性。

场景四:微服务

微服务是近几年来IT圈内谈论比较多的一个名词,意义也很简单:尽可能细粒度拆分业务程序架构,由多个独立服务组成业务系统。

Docker的容器设计原则:一个容器一个服务,容器之间相互隔离,不妨试想一下,如果容器作为这些独立服务的部署单元,是不是有点恰到好处呢?

场景五:弹性伸缩

说到弹性伸缩,通常是集群模式下存在。像AWS AutoScaling,可以自定义资源阈值,SLB自动添加EC2云主机,应对业务访问量突发情况。

当适用Docker技术以后,这种弹性伸缩的单元就是云主机之上的容器了。

容器集群化管理已经有成熟的解决方案,比如:官方的Swarm,谷歌的K8S

由于Docker容器快速启动特性,可以很快速的启动几十个、上百个容器来提供更多并发和资源利用率(如果宿主机资源不够,还需要加主机到集群中)。

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

Why

为什么使用docker?

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

kvm虚拟机

Docker简介

docker容器

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里(只是推荐,并非一定要这样 )

Original: https://www.cnblogs.com/hf8051/p/11433736.html
Author: goodup
Title: Docker简介

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/534841/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球