什么是docker
docker是一个开源的容器平台,用于开发、交付和部署 运行应用程序
简单来说 也就是docke他允许开发者将自己的操作环境以及依赖关系打包成一个容器,移动到其他机器上可以供其他人使用,还可以打包成镜像,上传到网络,如果想使用可以随时拉下来。
doker的功能:
- 资源隔离
- 轻量级 占有少量资源
- 一次部署 多处运行
为什么需要docker:
传统的开发问题:
- 环境(切换/配置)麻烦:
在开发一个产品的途中,时长会出现的问题就是:“在我的电脑上可以运行,而到了另外一个开发人员的电脑上就不能使用的问题
- 应用之间的冲突(隔离性):
假如我们将开发的两个应用部署到同一个服务器上,如果一个应用出现了问题,导致cpu出问题上升到100%,那么第二个应用也会受到关联
1、docker可以让开发者打包他们的应用以及依赖关系到一个轻量级、可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化。将环境构建打包成一个镜像发布到网上,想要用这个环境的时候就直接拉取一份就ok了。
2、docker核心思想就是使用容器化技术,打包装箱,每个箱子是互相隔离的。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低
什么是容器化、什么是虚拟化:
虚拟化: 就是将多个相同的物理硬件或软件、虚拟成逻辑的一个整体
从而提高资源的利用率并打破物理设备不可分割的情况
容器:将应用程序包含运行环境整体打包成一个标准的应用单元
实现应用的交付和部署
容器技术: 就是一种应用程序打包技术
容器化:一种将应用程序及其依赖项打包到一个独立、可移植的容器中的一个过程
docker带来的好处
简化配置 代码流水线 提高开发效率 隔离应用
整合服务 调试能力 快速部署 多租户环境
Docker的基本组成
镜像(image):docker镜像就好比是一个模板,可以通过这个模板来创建容器服务通过这个镜像可以创建多个容器
容器(container):docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的,启动、停止、删除、基本命令,目前就可以把这个容器理解为就是一个简易的Linux系统。
仓库(repository):仓库就是存放镜像的地方,仓库分为公有仓库和私有仓库
私有 Registry:
- 私有 Registry 通常用于企业内部或个人项目,需要身份验证才能访问。
- 它可以是本地部署的服务,也可以是托管在云服务上的。
公开 Registry:
- 公开 Registry 任何人都可以访问,无需身份验证。
- Docker Hub 是最著名的公开 Registry,提供大量的公共镜像供用户使用。
三者的关系:
仓库是用来存放官方或者私人镜象的
镜像 是容器运行的源文件
容器 是运行的镜像 也是具体的应用
过程
从仓库pull拉去一个镜像到本地
run 一个本地镜像 就生成一个容器
容器 commit 就变成一个本地镜像
本地镜像push推送到仓库办成仓库中的镜像
docker 应用场景
作为云主机使用
作为服务使用
做微服务架构使用
docker 特性
实现交互式shell
文件系统隔离
写时复制和联合文件系统
资源和网络隔离
日志记录和变更管理
容器和虚拟机之间的比较
容器 启动 秒级 硬盘使用 MB 级别 接近原生 单机支持上千个容器
虚拟机 启动分钟级 硬盘GB级别 新能弱于容器 单机支持几十个虚拟机
Docker 架构设计
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker是C/S(客户端client-服务器server)架构模式。
Docker通过客户端连接守护进程,通过命令向守护进程发出请求,守护进程通过一系列的操作返回结果。
Docker客户端可以连接本地或者远程的守护进程。
Docker客户端和服务器通过socket或RESTful API进行通信。
Docker 容器通过 Docker 镜像来创建,容器与镜像的关系类似于面向对象编程中的对象与类。
Docker 主要有以下几部分组成:
Docker Client 客户端 通过命令行或者其他工具使用 Docker API
Docker daemon 守护进程 负责运行docker 内核
Docker Image 镜像 一个特殊的文件系统 用于创建 Docker 容器的模板
Docker 的特性
交互式Shell:Docker 可分配一个虚拟终端并关联到任何容器的标准输入上
文件系统隔离:每个进程容器运行在完全独立的根文件系统里
写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间
资源隔离:可以使用 cgroup 为每个进程容器分配不同的系统资源
网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和 IP 地址
日志记录:Docker会收集 记录每个进程容器的标准流(stdout/stderr/stdin) 以实时检索或批量检索
变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器
无需使用模板或手动配置
Docker 提供服务的两个维度 (改变了软件的构建、交付和运行方式)
更可靠地将应用从开发环境移动到生产环境。
通过标准映像格式将软件从本地迁移至云端。
总结
docker: 一个开源的云应用容器平台, 一个轻量级的虚拟化解决方案
容器的三大组件
仓库 registry 用来存放镜像
镜像 image 软件和运行环境打包后的自读文件
容器 container 运行的镜像