1、Docker为什么会出现?
在传统的软件项目过程中,开发会提交代码给运维人员,由运维人员去部署。但是这时候运维人员会发现这个代码部署后产生很多问题。
运维:你这开发代码不行啊,开发的代码出现了那么多问题,你看我部署都不成功。
开发:扯犊子呢,你才不行,你全家都不行。我在我本地运行得好好的,怎么到你那里就不行了,是你的部署能力有问题吧。
双方争执不下,那究竟是谁的问题呢?
这时候就涉及到了环境和配置的问题,代码在开发的本地跑得好好的,说明开发使用了匹配的配置环境,而运维人员部署不成功,有可能是使用了与代码不匹配的环境和配置,所以这时候问题就跑抛出来了。
1、那就让开发把他本地的【代码和环境还有配置,系统,数据等等】直接给运维,那这样不就可以正常部署了吗,这问题有什么难解决的啊。
2、假设运维可以正常部署了,这时候他又会抱怨:这么多的服务器(集群),一个个的部署,我要部署到什么时候啊,有没有那种可以一键部署的工具啊,我太累了!
带着以上两个问题,他来了,docker就是来帮助开发把【本地的代码和环境还有配置,系统,数据等等】一起打包,丢给运维去部署,就是因为docker,开发和运维从此相亲相爱了。
2、docker理念
基于GO语言实现的云开源项目。
来看一下docker的logo,从这个logo,你可以看到docker的组成是什么了吗?
1、海洋
2、鲸鱼
3、集装箱
那这3个对应的分别是什么呢?
海洋:我们安装docker的服务器(比如我有一台安装linux系统的电脑,在该电脑上安装docker,那么海洋就对应着这台电脑)。
鲸鱼:鲸鱼即代表我们安装的docker。
集装箱:集装箱代表的是容器。docker中可以有无数个容器,每个容器都是分隔开的。
3、Docker能干什么?
- 传统虚拟机和docker的特点
a、传统虚拟机:
包含:内核,各种库,应用,内存,硬件模拟,网络等等
缺点:1、资源占用多 2、冗余步骤多 3、启动慢
b、Docker
-
-
- 基于传统虚拟机以上的优点,docker发展了另一种虚拟化技术:Linux容器
- Linux容器不是模拟一个完整的操作系统。
- 既然有一部分是可以共用的,那就给Linux做一个减法吧。内核我要,其他的我不要了。
-
- 比较传统虚拟机与docker的区别:
- 传统虚拟机是虚拟出一套硬件,在其上运行一个完整的操作系统,再在该系统上运行所需的应用进程。
- 而容器内的应用进程直接运行于宿主的内核(宿主就是以上描述的海洋),而且没有进行硬件虚拟,因此容器要比传统虚拟机更轻便。
- 容器内直接相互隔离,每个容器都有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。
4、Why Docker?
更轻量:基于容器的虚拟化,仅包含业务运行所需的runtime环境。
- CentOS/ubuntu基础镜像仅170M;宿主机可部署100-1000个容器。
更高效:无操作系统虚拟化开销
计算:轻量,无额外开销
- 存储:系统盘aufs/dm/overlayfs;数据盘volume
- 网络:宿主机网络,NS隔离
更敏捷,更灵活:
- 分层的存储和包管理,devops理念
- 支持多种网络配置
docker架构图
主要分为三部分:
Client:客户端,比较Linux系统中右键打开的终端,或者使用Xshell连接服务器输入命令的地方。
docker_host:安装Docker的那台机器,就是docker主机,主要有本地镜像和容器
Registry:放置docker镜像的仓库
5、Docker的基本组成:镜像、容器、仓库
首先看下三者在实际工作中的一个位置:
开发将某个应用开发好了,把包括代码,环境,配置,系统等一系列打包形成一个可交付的运行环境,形成一个镜像A,放到docker的镜像仓库中。
此时运维需要将该应用部署到5个服务器中(集群)。那么只需要拉取镜像A到docker服务器,只有通过这个镜像文件才能生成5个容器(运行一个镜像就会形成一个容器)。
一、镜像
二、容器
- 镜像与容器的关系,相当于镜像是一个类,容器是一个镜像创建的运行实例。一个镜像可以做成无数个容器。
- image文件可以看作是容器的模版。Docker根据image文件生成容器的示例。
- image文件生成的容器实例,本身也是一个文件,称为镜像文件。
- 一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器。
- 容器可以被启动,开始,停止,删除。每个容器都是相互隔离的,保证安全的平台。
- 可以把容器看成一个简易版的Linux(包括root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。
三、仓库
- 集中存放镜像文件的场所。
- 仓库和仓库注册服务器是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库又包含了多个镜像,每个镜像又有不同的标签。
- 仓库分为公开仓库和私有仓库两种形式。
- 最大的公开仓库是docker hub,存放了数量庞大的镜像供用户下载,这个是国外的仓库。
- 国内的公开仓库包括阿里云,网易云等。
6、Docker的运行底层原理
Docker是怎么工作的?
Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。
容器,是一个运行时容器,就是我们前面说到的集装箱。
为什么Docker比VM快?
1、docker有比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU,内存利用率上docker将会在效率上有明显的优势。
2、docker利用的是宿主机的内核,而不需要Guest OS,因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻,加载操作系统内核这个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的,而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker只需要几秒钟。