概述:
Docker是一个虚拟环境容器,可以将你的可执行文件、配置文件及一切其他你需要的文件一并打包到这个容器中,并发布和应用到任意平台。比如,你在本地用Python开发了一个网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。
Docker解决的主要问题
有过后台开发经验的同学,一定遇到过下面这些问题:
程序在开发环境跑得好好的,但是部署到生产环境,却状况频出;
假设某个程序要在客户的环境上进行部署,虽然在自己的环境上部署、验证成功,但始终担心客户的环境上缺少某些必要的库文件,或者某些文件的版本不符合要求;
那么,有了docker,这些问题都将不复存在。
什么是Docker
Docker是一个虚拟环境容器,可以将你的可执行文件、配置文件及一切其他你需要的文件一并打包到这个容器中,并发布和应用到任意平台。比如,你在本地用Python开发了一个网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。
如果不好理解,我们再拿集装箱打个比方。
集装箱解决了什么问题呢?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。
docker也是类似的理念。我们可以在一台机器上跑多个互相毫无关联的docker容器,每一个容器就相当于一个集装箱。
Docker里的几个基本概念
- 镜像
镜像可以理解为一堆静态的文件
- 容器
容器则是镜像run起来之后的一个实例。镜像之于容器就好比面向对象编程里的class之于object。
- 仓库
镜像需要地方保存,这个地方就是仓库
与传统虚拟化的区别
这里我们顺便讲一下传统虚拟化。
我们看到,传统虚拟化是站在硬件物理资源的基础上,虚拟出多个OS,然后在OS的基础上构建相对独立的程序运行环境,而Dokcer则是在OS的基础上进行虚拟,显然Dokcer轻量得多,因此其资源占用、性能消耗相比传统虚拟化都有很大优势。
虚拟化与docker的区别
docker设计小巧,部署迁移快速,运行高效,应用之间相互独立,管理人员可以看到所有容器的内容,虚拟化技术比较臃肿,不论什么应用都需要先创建新的系统,并且并非按照应用隔离,而是按照系统隔离,管理员无法看到系统内部信息。
举个例子,Docker就是手机中的各种APP,只需要一个系统就可以下载自己所需的应用,但是虚拟化技术相当于你的苹果手机安装一个庞大软件,这个软件上安装安卓系统、魅族系统等,每个系统上还要安装各类应用,比较麻烦。
但两者没有绝对的好坏,主要还是看应用场景,根据不同的需求选择不同的解决方案即可
虚拟机和docker区别:
1.资源:vmwre是系统级对整个系统硬件分割,docker是进程级占用资源少
2.启动:vmwre启动需要几分钟,docker是秒级
3.部署速度:docker比vmwre快很多
4.移植性方面:Docker容器轻便、灵活、适应于Linux,而虚拟机相对笨重,与虚拟化技术的耦合度非常高,因此移植性相对较差。
为什么使用Docker?
优点:
- 一致的运行环境
- 更快启动速度
- 隔离性
- 弹性伸缩、快速扩展
- 迁移方便
- 持续交付和部署
- 开发人员和运维人员职责分离
缺点:
- 安全性不如虚拟机
- 隔离性不如虚拟机
- 大规模不易管理
- 排查问题困难
- 不支持Windows