简介与概述
Docker是一个开源的应用应用容器引擎,基于Go语言,并遵从Apache2.0协议开源,
Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器中,也可以实现虚拟化。
Docker的主要目标就是“Build,Ship and run any app,anywhere”,也就是说通过对应用程序组件的封装,分发,部署,运行等生命周期的管理,使用户的app(也可以是一个web应用程序或者数据库应用)及其运行环境能够做到“一次封装,到处运行”。
Linux容器技术的出现解决了这个问题,而docker就是基于他的基础上发展过来的,将应用程序运行到docker上,而docker容器在任何操作系统上都是一致的,这就是实现了跨平台,跨服务器,只要一次配置之后,就可以在其他机器上运行,大大简化了操作
容器是完全的沙箱机制,相互之间不会有任何的接口(类似于手机上的app),更重要的是,容器的性能开销极低
Docker从17.03之后分为CE(Community Edition社区版)和EE(Enterprise Edition企业版),我们使用社区版就可以了
Docker实际上就是一个虚拟化的,轻量级的Linux服务器,可以解决我们在开发过程中的配置问题。
为什么要使用Docker
docker是基于虚拟化容器技术实现的,docker主要是解决我们在开发过程中的配置迁移问题
例如:
1,我们开发了一个JavaWEB项目,需要很多的环境配置,比如:tomcat,jdk环境,nginx,redis等环境信息
2,本地需要安装这些环境,tomcat,jdk,nginx,redis,并对其进行配置,在打war包给运维部署在linux服务器上,运维人员也需要在linux服务器上安装这些环境并做相关配置
3,但是有时候还是会出现各种问题:在本地环境运行没有问题,但是打包到Linux服务器上运行总是各种报错,大多数可能是一些版本冲突或者配置问题
4,这个时候用docker部署和安装软件的话就非常方便了,直接将SpringBoot项目制作成一个镜像文件,镜像文件中包含jdk版本,tomcat信息,直接部署linux即可,减少环境问题
看个例子:
如果在linux中安装mysql,请看相关教程:https://blog.csdn.net/qq_42097051/article/details/113726893
同时,mysql安装也很容易发生版本冲突的问题。再对比docker安装mysql
docker pull mysql:5.7
docker run --name mysql3308 -e MYSQL_ROOT_PASSWORD=root -p 3308:3306 mysql:5.7
这样就可以很好的解决运行环境配置问题,因为镜像文件底层封装好了
使用Docker的好处
1,简化配置,安装创建非常的方便
2,代码流水线管理(Code pipeline),传统的项目部署可能需要经过很多的环节,并且可能会产生依赖冲突,配置不一致,版本冲突等问题,docker给应用提供了一个从开发到线上均一致的环境,让代码的流水线变得简单不少
3,Devops开发与运维一体化减少成本
4,虚拟技术可以进行快速部署
5,可以支持弹性扩容
应用场景
1,Web应用的自动化打包与发布
2,自动化测试和持续集成,发布
3,在服务型环境中部署和调整数据库或者其他的后台应用
4,从头编译或者扩展现有的OpenShift或者Cloud Foundry平台来搭建自己的Pass环境
容器与虚拟机的区别
虚拟机:
在一台物理机上,利用虚拟化技术,虚拟出来多个操作系统,每个操作系统之间是相互隔离的
从下到上理解上图
- 最下面一层是物理机(Infrastructure),可以是一台服务器或者一个PC
- 电脑上需要安装操作系统(Host Operating System),比如我们安装了Win10的操作系统
- 在往上就是虚拟机软件(Hypervisor),比如Vmware Workstation,他的作用就是用来模拟计算机硬件
- 继续往上就是虚拟机模拟出来的操作系统(Guest OS)
- 在虚拟的操作系统中,安装所需要的软件,组件(Bins、Libs)。比如安装jdk,tomcat等
- 最后就是具体的应用了(App),例如部署到tomcat中
Docker
docker是开源的应用容器引擎
依然是从上往下看:
- 最下面两层,概念同上
- 继续往上,可以看做docker容器的管理器
- 依赖和应用都被打包成了Docker镜像,例如:jdk,tomcat,应用都被打包在了一起,运行在docker容器中,容器和容器间是隔离的
docker和虚拟机的区别:
- 从两者架构图上看,虚拟机是在硬件级别进行虚拟化,模拟硬件搭建操作系统,而docker是在操作系统层面进行虚拟化,复用操作系统,运行Docker容器
- Docker的速度很快,秒级,而虚拟机的速度通常以分钟计算
- Docker所用的资源更少,性能更高,同样一个物理机,Docker运行的镜像数量远多于虚拟机的数量
- 虚拟机实现了操作系统之间的隔离,Docker是进程之间的隔离,虚拟机的隔离级别更高,安全性方面也更强
- 虚拟机和Docker各有优势,不存在谁替代谁的问题,很多企业都采用物理机上做虚拟机,虚拟机上跑docker
特性 | 容器 | 虚拟机 |
启动速度 | 秒级 | 分钟级别 |
硬盘使用 | 一般为MB | 一般GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
隔离性 | 完全隔离 | 完全隔离 |