Docker 与 K8S学习笔记(二)—— 容器核心知识梳理
本篇主要对容器相关核心知识进行梳理,通过本篇的学习,我们可以对容器相关的概念有一个全面的了解,这样有利于后面的学习。
一、什么是容器?
容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在本地创建的容器几乎无需任何修改就可以在生产环境上运行。
容器 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 <Dockerfile>命令我们可以构建一个镜像。
6、Container
Docker容器就是Docker镜像的运行实例,对于应用程序,镜像是其软件生命周期中的构建和打包阶段,而容器则是启动和运行阶段。
Docker 与 K8S学习笔记(二)—— 容器核心知识梳理的更多相关文章
- Docker 与 K8S学习笔记(七)—— 容器的网络
本节我们来看看Docker网络,我们这里主要讨论单机docker上的网络.当docker安装后,会自动在服务器中创建三种网络:none.host和bridge,接下来我们分别了解下这三种网络: $ s ...
- K8S学习笔记之Kubernetes核心概念
0x00 Kubernetes简介 Kubernetes(K8S)是Google开源的容器集群管理系统,其设计源于Google在容器编排方面积累的丰富经验,并结合社区创新的最佳实践. K8S在Doc ...
- Docker 与 K8S学习笔记(三)—— 镜像的使用
前面的文章介绍过镜像的三种获取方式: 下载并使用别人创建好的镜像: 在现有镜像上创建新的镜像: 从无到有创建镜像. 本文主要介绍前两种. 一.下载镜像 在Docker Hub上有大量优质镜像可以使用, ...
- (C/C++学习笔记) 二十四. 知识补充
二十四. 知识补充 ● 子类调用父类构造函数 ※ 为什么子类要调用父类的构造函数? 因为子类继承父类,会继承到父类中的数据,所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程. ...
- Docker 与 K8S学习笔记(十 二)容器间数据共享
数据共享是volume的关键特性,今天我们来看一下通过volume实现容器与host.容器与容器之间共享数据. 一.容器与host共享数据 在上一篇中介绍到的bind mount和docker man ...
- Docker 与 K8S学习笔记(二十)—— 使用Downward API向容器注入Pod信息
Kubernetes在创建Pod时,会为Pod和容器设置一些额外的信息,比如Pod名称.Pod IP.Node IP.Label.Annotation.资源限制等,我们经常会在应用程序中使用到这些数据 ...
- Docker 与 K8S学习笔记(九)—— 容器间通信
容器之间可通过IP.Docker DNS Server或joined三种方式进行通信,今天我们来详细学习一下. 一.IP通信 IP通信很简单,前一篇中已经有所涉及了,只要容器使用相同网络,那么就可以使 ...
- Docker 与 K8S学习笔记(五)—— 容器的操作(下篇)
上一篇我们学习了容器的启动和常用的进入容器的方式,今天我们来看看如何控制容器起停以及容器删除操作. 一.stop.kill.start和restart stop.kill命令都可以停止运行的容器,二者 ...
- Docker 与 K8S学习笔记(二十二)—— 高效使用kubectl的小技巧
kubectl作为我们主要的操作K8S的工具,其具备非常丰富的功能,但是如果不经过打磨,使用起来还是存在诸多不便,今天我们来看看如何将我们的kubectl打磨的更加易用. 一.命令自动补全 kubec ...
随机推荐
- 『与善仁』Appium基础 — 18、元素定位工具(二)
目录 1.Appium Inspector介绍 2.Appium Inspector打开方式 3.Appium Inspector布局介绍 4.Appium Inspector工具的配置 5.Appi ...
- C#gridview尾部统计
protected void gridSettlement_RowDataBound(object sender, GridViewRowEventArgs e) { if (dtSettlement ...
- 12. Fedora 中文乱码问题
1. Rhythmbox(音乐播放器乱码) yum install python-mutagen mid3iconv -e GBK *.mp3 2. totem电影播放机播放列表乱码解决1).修改to ...
- Spark(三)【RDD中的自定义排序】
在RDD中默认的算子sortBy,sortByKey只能真的值类型数据升序或者降序 现需要对自定义对象进行自定义排序. 一组Person对象 /** * Person 样例类 * @param nam ...
- OC简单介绍
一.OC与C的对比 关键字 OC新增的关键字在使用时,注意部分关键字以"@"开头 方法->函数 定义与实现 数据类型 新增:BOOL/NSObject/id/SEL/bloc ...
- Taro 微信小程序 上传文件到minio
小程序前端上传文件不建议直接引用minio的js npm包,一来是这个包本身较大,会影响小程序的体积,二来是ak sk需要放到前端存储,不够安全,因此建议通过请求后端拿到签名数据后上传. 由于小程序的 ...
- Nginx HTTP块配置
1 配置块的嵌套 http { upstream {...} split_clients {...} map {...} geo {...} server { if () {...} location ...
- MySQL数据库字段加密
一.导入表结构 USE `qskj_03`; /*Table structure for table `test` */ DROP TABLE IF EXISTS `test`; CREATE TAB ...
- SP1798 ASSIST - Assistance Required 题解
Content 有一个足够长的数列 \(a\),是一个首项为 \(2\),公差为 \(1\) 的等差递增数列.另有一个初始为空的数列 \(b\). 重复进行如下操作: 假设当前数列 \(a\) 第一项 ...
- CF1077A Frog Jumping 题解
Content 在一个数轴上有一个动点,初始时在 \(0\) 这个位置上,接下来有若干次操作,对于第 \(i\) 次操作: 如果 \(i\) 是奇数,那么动点往右移 \(a\) 个单位. 如果 \(i ...