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 ...
随机推荐
- 学习java的第十四天
一.今日收获 1.完成了手册第二章没有验证完成的例题 2.预习了第三章的算法以及for语句与if语句的用法 二.今日难题 1.验证上出现问题,没有那么仔细. 2.第二章还有没有完全理解的问题 三.明日 ...
- 日常Java 2021/9/29
StringBuffer方法 public StringBuffer append(String s) 将指定的字符串追加到此字符序列. public StringBuffer reverse() 将 ...
- 数组的高阶方法map filter reduce的使用
数组中常用的高阶方法: foreach map filter reduce some every 在这些方法中都是对数组中每一个元素进行遍历操作,只有foreach是没有 ...
- k8s配置中心-configmap,Secret密码
目录 k8s配置中心-configmap,Secret 创建ConfigMap 使用ConfigMap subPath参数 Secret 官方文档 编写secret清单 使用secret 在 Pod ...
- Stream collect Collectors 常用详细实例
返回List集合: toList() 用于将元素累积到List集合中.它将创建一个新List集合(不会更改当前集合). List<Integer> integers = Arrays.as ...
- 转 android开发笔记之handler+Runnable的一个巧妙应用
本文链接:https://blog.csdn.net/hfreeman2008/article/details/12118817 版权 1. 一个有趣Demo: (1)定义一个handler变量 pr ...
- IDE搬进浏览器里——JetBrains Projector
发展 提起 JetBrains,你会想到什么?各路强大的 IDE,比如 Android Studio.IDEA.WebStorm--这些对于开发者来说耳熟能详的产品都出自这家公司,这些 IDE 的功能 ...
- 移动端(App)项目进行满屏高度的设置
做移动端App的时候 高度一般会根据页面的元素进行自动设置,不会铺满整个屏幕.通过以下代码实现满屏高度. #app{ width: 100%; height: 100%; position: abso ...
- 【Java多线程】Java 原子操作类API(以AtomicInteger为例)
1.java.util.concurrent.atomic 的包里有AtomicBoolean, AtomicInteger,AtomicLong,AtomicLongArray, AtomicRef ...
- eclipse.ini顺序
-vmargs需放在-Dfile.encoding=UTF-8之前,否则会出现乱码 举例: -startup plugins/org.eclipse.equinox.launcher_1.3.0.v2 ...