什么是容器
容器是一种轻量级的虚拟化技术,用户将应用程序及其依赖打包成一个可移植的镜像,并运行在一个隔离环境中,容器技术在操作系统层面上实现了资源的隔离和限制,使得多个容器可以在同一台主机上共享操作系统内核,同时独立运行,互不干扰。这种技术允许开发者将应用及其依赖项打包在一起,形成一个独立、可移植的运行环境,从而在不同的环境中无缝运行。
- **轻量级:**容器共享宿主机的内核,但每个容器都有自己的文件系统、进程空间、网络配置和资源分配,这使得容器在资源有限下进行运行
- **隔离型:**容器提供了应用程序运行环境的隔离,确保不同应用之间的独立性,避免了相互干扰
- **可移植性:**容器可以在任何支持容器技术的平台上运行,实现了快速部署,迁移和拓展。
什么是Docker
-
Docker是一组平台即服务(PaaS)的产品
-
是一个轻量级的“虚拟机”
-
在Linux容器里运行应用的开源工具
-
基本原理
- 隔离性 - 每个用户实例之间相互隔离, 互不影响。 硬件虚拟化方法的方案是VM;libcontainer的方案是容器,具体而言是namespace。其中的pid, net, ipc, mnt, uts 等将容器的进程, 网络, 消息, 文件系统和主机隔离开。
- 可配额/可度量 - 每个用户实例可以按需提供其计算资源,所使用的资源可以被计量。硬件虚拟化方法因为虚拟了CPU和内存,可以方便实现;libcontainer则主要是利用cgroups来控制资源。cgroups 实现了对资源的配额和度量,提供了类似文件的接口。在 /cgroup目录下新建一个文件夹即可新建一个group,在此文件夹中新建task文件,并将pid写入该文件,即可实现对该进程的资源控制。
- 移动性 - 用户的实例可以很方便地复制、移动和重建。硬件虚拟化方法通过snapshot和image来实现;Docker主要通过AUFS实现。AUFS (AnotherUnionFS) 是一种联合文件系统, 就是支持将不同目录挂载到同一个虚拟文件系统下的文件系统。它具有节省存储空间、快速部署、节省内存、升级方便、允许在不更改base-image的同时修改其目录中的文件的特点。
- 安全性 - 这个讨论范围较大,这里强调是host主机的角度尽量保护容器。硬件虚拟化的方法因为虚拟化的水平比较高,用户进程都是在KVM等虚拟机中运行的;然而对于libcontainer, 其中运行的进程应当是事先静态编译完成的。用户提供的参数也是通过exec系统调用提供给用户进程。通常情况下容器中也没有长进程存在。
-
Docker平台组成
-
Docker守护进程(Docker daemon):Docker采用 C/S架构 [3]。Docker daemon 作为服务端接受来自客户端的请求 [4-5],并进行处理(创建、运行、分发容器) [4] [6]。
-
Docker客户端(Docker client):Docker 客户端则用于与 Docker 守护进程通信,发送命令以管理容器。Docker采用 C/S架构。客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。
-
Docker daemon一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon交互。
-
Docker镜像(Docker images):Docker 镜像是用于构建 Docker 容器的静态文件,它包含了应用程序运行所需的所有文件、依赖项和配置信息。Docker 镜像可以从 Docker Hub 或其他镜像仓库中获取,也可以通过 Dockerfile 自定义构建。
-
Docker容器(Docker container):Docker 容器是 Docker 镜像的运行实例,它包含了应用程序及其依赖项,并在隔离的环境中运行。每个容器都是一个独立的进程,拥有自己的文件系统、网络空间和进程空间。
-
Docker容器通过Docker镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
-
基本架构示意
Docker 面向对象的编程 容器 对象 镜像 类
-
Docker与虚拟机的区别
- Docker和虚拟机是两种不同的虚拟化技术,它们在资源消耗、运行性能、应用场景、管理和监控、容器的隔离性、灵活性和扩展性等方面存在差异。Docker容器更加轻量级、高效、灵活和易于管理,而虚拟机提供了更好的隔离性和安全性。
- 具体区别
- **架构差异:**虚拟机是基于hypervisor实现的,模拟完整的虚拟硬件环境
Docker是基于容器化技术 - **隔离原理:**虚拟机通过模拟整个操作系统提供隔离环境,容器则使用Linux内核的namespace和cgroups功能实现进程隔离,共享宿主机的资源
- **部署效率:**Docker采用镜像的方式,部署速度快,虚拟机则需要模拟整个操作系统
- **启动速度:**Docker容器启动速度快,占用资源较少,虚拟机需要加载完整的操作系统和硬件模拟,启动速度慢
- **架构差异:**虚拟机是基于hypervisor实现的,模拟完整的虚拟硬件环境
- 应用场景
- **Docker:**适用于需要自动化部署和扩展的应用程序
- **虚拟机:**适用于需要隔离整个操作系统和更高安全性的场景
Docker的使用场景
- 打包应用程序简化部署
- 可脱离底层硬件随意迁移
- 例:服务器从腾讯云迁移到阿里云
Docker核心概念
- 镜像
- 一个面相Docker容器引擎的只读模板
- 容器
- 从镜像创建的额运行实例
- 仓库
- 集中保存镜像的地方
CentOS安装Docker的两种方式
- 使用CURL获得Docker的安装脚本进行安装
- 使用YUM仓库来安装Docker