认识Docker
Docker为什么出现
软件开发和测试以及部署最麻烦的问题是环境配置。
- 相同的配置可能需要做好几次,比如大规模部署,或者针对不同目的的部署。
- 因为各方面原因可能配置出来结果不同,例如机器配置不同,操作系统不同等
- 节约硬件资源,充分使用。
已有方案
虚拟机
模拟一个完整的操作系统在真实主机上运行
- 资源占用多;
- 冗余步骤多;包含了除了目标应用运行环境外的其他功能
- 启动慢
Linux容器
Linux 容器(Linux Containers,缩写为 LXC)。
Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
由于容器是进程级别的,相比虚拟机有很多优势。
- 启动快
- 资源占用少
- 体积小
Docker是什么
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
Docker用途
- 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
- 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
- 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
Docker基本结构
Docker 是一个客户端-服务器(C/S)架构程序。
-
Client 客户端: 发出需要执行的命令
-
Host 主机(Docker 引擎):一个物理或者虚拟的机器用于运行 Docker 守护进程和容器,并且处理客户端请求
-
image: Docker 把应用程序及其依赖,打包在 image 文件里面。类似一个二进制软件包
官方解释:镜像是一个只读的模板,带有创建Docker容器的说明。通常情况下,一个镜像是基于另一个镜像的,并进行了一些额外的定制。例如,你可以建立一个基于ubuntu镜像的镜像,但会安装Apache网络服务器和你的应用程序,以及使你的应用程序运行所需的配置细节。
你可以创建你自己的镜像,也可以只使用那些由他人创建并发布在registry上的镜像。要建立你自己的镜像,你要创建一个Dockerfile文件,用简单的语法来定义创建镜像和运行它所需的步骤。Dockerfile中的每个指令都会在镜像中创建一个层。当你改变Dockerfile并重建镜像时,只有那些已经改变的层被重建。与其他虚拟化技术相比,这是使镜像如此轻便、小巧和快速的部分原因。
-
container: image 文件生成的容器实例,本身也是一个文件,称为容器文件。就像安装好可以运行的软件,可以跑,可以停。
官方解释:容器是一个镜像的可运行实例。你可以使用Docker API或CLI来创建、启动、停止、移动或删除一个容器。你可以将一个容器连接到一个或多个网络,将存储连接到它,甚至可以根据其当前状态创建一个新的镜像。
默认情况下,一个容器与其他容器和它的主机是相对隔离的。你可以控制一个容器的网络、存储或其他基础子系统与其他容器或主机的隔离程度。
一个容器是由它的镜像以及你在创建或启动它时提供给它的任何配置选项所定义的。当一个容器被移除时,对其状态的任何改变,如果没有存储在持久性存储中,就会消失。
-
-
仓库(Repository):Docker 用来存储已经制作好的镜像,方便随时取用和共享给他人使用。
其他相关概念
- 镜像分层:Docker 支持通过扩展现有镜像,创建新的镜像。实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。
- 可写的容器层:当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享。
- Volume 数据卷:用来将数据持久化到我们宿主机上,与容器间实现数据共享,简单的说就是将宿主机的目录映射到容器中的目录,应用程序在容器中的目录读写数据会同步到宿主机上,这样容器产生的数据就可以持久化了,比如我们的数据库容器,就可以把数据存储到我们宿主机上的真实磁盘中。
参考链接: