这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战
1. 简介
在官网我们可以看到这句
Build safer, share wider, run faster.
docker是一个容器技术,无疑是给了我们很多的便利:
便利1:
build safer,运行环境保持一致,更快更轻松迁移
-
开发的时候,我们在本机测试环境可以运行,但是到生产环境却无法运行。
比如一个Go的web程序,这里涉及到go、redis、mysql等软件环境。当这些的某一项版本不一致的时候,可能就会导致程序无法运行。Docker则将程序以及使用软件环境直接
打包在一起,无论在哪个机器上都保证了环境版本的一致。
便利2:
run faster,对进程进行封装隔离,容器与容器之间互不影响,更高效的利用系统资源
-
由于服务器其他程序出错,导致自己程序出错
我们在公司所写的程序,可能会和其他人共用一个服务器,所以我们就要保证我们程序不会被其他程序所影响,这里就要做一个隔离的操作了。Docker是进程的隔离,很好地解决了环境隔离的问题,别人程序不会影响到自己的程序。
便利3:
share wider,通过一个镜像可以复制N个环境一致的容器
-
公司要弄一个活动,可能会有大量的流量进来,公司需要再多部署几十台服务器
在没有Docker的情况下,要在几天内部署几十台服务器,这对运维来说是一件非常折磨人的事,而且每台服务器的环境还不一定一样,就会出现各种问题,最后部署地头皮发麻。用Docker的话,我只需要将程序打包到镜像,你要多少台服务,我就给力跑多少容器,极大地提高了部署效率。
2. Docker 与虚拟机区别
| 传统虚拟机 | Docker容器 | |
|---|---|---|
| 磁盘占用 | 几个GB到几十个GB左右 | 几十MB到几百MB左右 |
| CPU内存占用 | 虚拟操作系统非常占用CPU和内存 | Docker引擎占用极低 |
| 启动速度 | (从开机到运行项目)几分钟 | (从开启容器到运行项目)几秒 |
| 安装管理 | 需要专门的运维技术 | 安装、管理方便 |
| 应用部署 | 每次部署都费时费力 | 从第二次部署开始轻松简捷 |
| 耦合性 | 多个应用服务安装到一起,容易互相影响 | 每个应用服务一个容器,达成隔离 |
| 系统依赖 | 无 | 需求相同或相似的内核,目前推荐是Linux |
我们拿内存举例子
- 虚拟机是利用
Hypervisor去虚拟化内存,整个调用过程是虚拟内存->虚拟物理内存->真正物理内存 - Docker是利用
Docker Engine去调用宿主的的资源,这时候过程是虚拟内存->真正物理内存。