Docker概述
本文最后更新于 2024年10月29日
1. 什么是Docker
Docker是一个开源的平台,是基于GO语言实现的开源项目,旨在让应用程序更简单地创建、部署和运行,解决了运行环境和配置问题。它是linux容器技术的落地实现,依赖已经存在的linux环境,实现应用程序及其依赖环境的打包,使得软件可以带着环境安装,一次镜像,处处运行,不受具体操作系统环境的限制。
Docker官网:https://www.docker.com/
Docker必须部署在Linux内核的系统上,实质上是在一个运行中的Linux环境上创建了一个隔离的文件环境。
Docker的优点
- 快速的交付和部署
- 提高硬件利用率
- 便捷的升级和扩容缩容
- 更简单的系统运维
2. Docker和虚拟机
虚拟机就是带环境安装的一种解决方案,它可以在一种操作系统上面虚拟出硬件后,在上面完整运行另一种操作系统,再从这个操作系统上运行自己的软件,比如在Windows10系统里面运行Linux Centos7,应用程序对此毫无感知,因为虚拟机看起来和真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响,这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间逻辑不变。
虚拟机存在明显的缺点:资源占用多,冗余步骤多,启动也很慢,因此Linux发展出了另一种虚拟化技术: Linux容器(Linux Containers,缩写LXC),Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件,容器提供的镜像包含了应用的所有依赖项。
Linux容器不是模拟一个完整的操作系统而是对进程进行了隔离,有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中,容器与虚拟机不同,不需要捆绑一整套操作系统,容器内进程直接运行于宿主机的内核,容器没有自己的内核也没有虚拟的硬件,只需要软件工作所需的库资源和设置。容器之间相互隔离,每个容器有自己的文件系统,容器之间进程不会互相影响,系统因此变得高效轻量。
总结:Docker是在操作系统层面实现虚拟化,直接服用本地的操作系统,而传统虚拟机则是在硬件层面虚拟化,因此和虚拟机相比,Docker启动更加的快速,占用体积明显减小。
3.Docker的三要素
- 镜像 (Image)
镜像是只读的模板,用于创建docker容器,一个镜像可以创建多个容器,相当于一个root文件系统
- 容器 (Container)
Docker利用容器独立运行一个或一组应用,容器是一个简易版的Linux运行环境(包括root权限,进程空间,用户空间和网络),以及运行在上面的应用程序,应用程序运行在容器里面,容器相当于一个虚拟化的运行环境,是利用镜像创建的运行实例,镜像是静态的,容器为镜像提供了一个标准的隔离的运行实体,容器可以被启动,开始,停止,删除,每个容器都是相互隔离,保证安全的。
- 仓库 (Repository)
Docker公司提供了一个保存各种Docker镜像的仓库,称之为DockerHub,官网:https://hub.docker.com
可以根据业务需要,搭建自己的私有仓库
4. Docker的架构和运行流程
从其架构和运行流程快来看,Docker是一个C/S模式的架构,后端是一个松耦合架构,众多模块各司其职。
docker的基本运行流程为:
- 用户使用Docker Client与Docker Daemon建立Socket通信,并发送请求给后者。
- Docker Daemon作为Docker架构中的主体部分,首先提供Docker Server的功能使其可以接受Docker Client的请求。
- Docker Engine执行Docker内部的一些列工作,每一项工作都是以一个Job的形式存在。
- Job在运行过程中,当需要镜像时,从Docker Registry中下载镜像,并通过镜像管理驱动Graph driver将下载镜像以graph的形式存储。
- 当需要为Docker创建网络环境时,通过网络管理驱动Network driver创建并配置Docker容器网络环境。
- 当需要限制Docker容器运行资源或执行用户指令操作时,则通过Exec driver来完成。
- Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。