Docker概述
Docker为什么会出现
一款产品,开发和线上是两套不同的环境,应用环境费时费力,而且容易在交付的时候出错。我们经常听到的一句话便是:“在我的机器上运行没问题啊,怎么到你那里就出问题了?”。说的就是环境不同导致的问题。
对于我们嵌入式开发领域来讲,不同的芯片,不同的交叉编译工具链需要不同的配置,当所有的工具链和配置都集中在同一个开发环境中时,可能会出现一些奇奇怪怪的问题。比如,我遇到的有些工程是需要python2.7
来构建的,有些则需要python3
来构建,每次开发不同的芯片,都要重新配置一遍环境,相当麻烦且浪费时间。
所以,一个好的解决方案便是,将项目+环境一起打包,做成一个整体且互相不影响。这就要提到我们的主角Docker。
使用Docker的流程
**开发(嵌入式):**下载一个基本Linux发行镜像(centos ubuntu)
--> 配置交叉编译工具链 --> 新建工程(可以建在docker容器内,也可以建在本地目录) --> 开发 -->打包制作成镜像 -->发布到docker仓库
**使用:**下载docker中的镜像 --> 直接使用
Docker的思想来自于集装箱,集装箱,对环境进行隔离
Docker通过隔离机制,可以将服务器利用到极致。
Docker的历史
2010年,几个搞IT的人,在美国成立一家公司dotCloud
做一些pass的云计算服务
他们将自己的容器化技术命名为Docker
Docker基于Go语言开发
Docker刚刚诞生的时候,没有引起行业的注意,dotCloud
活不下去
然后他们决定开源
2013年,创始人将Docker开源,不开则以,一开惊人,刚开源的时候,每个月都会更新一个版本
2014年4月9日,Docker 1.0发布
容器vs虚拟机
在容器技术出来之前,用的是虚拟机技术,虚拟机其实就是真实的模拟一个电脑,它有独立的kernel和lib库,所以显得非常笨重,但同时也保证了安全性。
虚拟机原理示意图
缺点:
- 资源占用多
- 冗余步骤多
- 启动很慢
容器化技术示意图
不是模拟的完整的操作系统,而是在kernel层复用宿主机的kernel,自己则只打包最小可运行环境。
二者对比
比较虚拟机和Docker的不同
传统虚拟机 | Docker | |
---|---|---|
虚拟内容 | 硬件+完整的操作系统+软件 | APP+LIB |
大小 | 笨重,通常几个G | 轻便几个M或KB |
启动速度 | 慢,分钟级 | 快,秒级 |