本篇主要对容器相关核心知识进行梳理,通过本篇的学习,我们可以对容器相关的概念有一个全面的了解,这样有利于后面的学习。
一、什么是容器?
容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在本地创建的容器几乎无需任何修改就可以在生产环境上运行。
容器 VS 虚拟机
既然容器是为应用程序提供封装与隔离,那为什么不用虚拟机呢?我们首先来看下二者的对比:
从上图可以很明显看出,虚拟机是需要创建完整的操作系统环境以实现应用程序完全隔离,而容器则是共享宿主机操作系统这就使得容器的体积较虚拟机要小很多,并且由于启动容器不需要启动完整操作系统,所以容器相对于虚拟机部署和启动速度更快,开销更小也更容易迁移。
二、为什么需要容器
为什么需要容器?容器技术解决了什么问题?其实在本文开篇就说了,“容器是一种轻量级、可移植、自包含的软件打包技术”。即容器技术解决应用程序打包部署问题。如今的应用程序的在架构上较十几年前来说变得非常复杂,以前大部分应用程序以单体应用为主,通过负责均衡部署在多个物理机上,而现在很多应用程序都由多种服务组成并且部署在不同环境,这就对整个应用的部署提出挑战,在容器技术出来前,每次应用部署上线都会遇到各种各样的环境问题,这使得每一次发版都是一场噩梦。
基于这样的现状,Docker诞生了,它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到生产环境上,这就极大解决了应用程序部署的环境依赖问题。
三、容器的架构与各组件介绍
1、Docker架构
Docker核心组件包括:
- Docker客户端:Client
- Docker服务端:Docker deamon
- Docker镜像:Images
- Docker容器:Containers
- 镜像仓库:Registry
Docker采用C/S架构,客户端向服务端发请求,服务端负责构建、运行和分发容器。
2、Docker客户端
Docker客户端(docker 命令)是用户与Docker交互的主要方式,通过这些命令我们可以很方便的构建和运行容器。
3、Docker服务端
Docker deamon以Linux后台服务方式运行,监听并处理来自客户端的请求,并管理诸多Docker对象(镜像、容器、网络和存储)。
4、Docker Registry
Registry是用于存放Docker镜像的仓库,其分为公有仓库和私有仓库,比如我们使用Docker Hub就是公有镜像仓库,我们也可以搭建仅供自己使用的私有仓库。
5、Docker Images
Docker镜像可以看作是创建Docker容器的只读模板。镜像有多种创建方式:
- 从无到有创建镜像;
- 下载并使用别人创建好的镜像;
- 在现有镜像上创建新的镜像。
我们将镜像的内容和创建步骤描述在一个文本文件中,此文件就是Dockerfile,通过docker build 命令我们可以构建一个镜像。
6、Container
Docker容器就是Docker镜像的运行实例,对于应用程序,镜像是其软件生命周期中的构建和打包阶段,而容器则是启动和运行阶段。