首页 > 其他分享 >一文带你认识「Docker」与「k8s」

一文带你认识「Docker」与「k8s」

时间:2023-11-08 10:57:20浏览次数:44  
标签:容器 一文 虚拟机 应用程序 镜像 Docker k8s

转载:https://juejin.cn/post/7015729458959089701

随着 k8s 作为容器编排解决方案变得越来越流行,有些人开始拿 Docker 和 k8s 进行对比,不禁问道:Docker 不香吗?

k8s 是 kubernetes 的缩写,'8' 代表中间的八个字符。

其实 Docker 和 k8s 并非直接的竞争对手,它俩相互依存。 Docker 是一个容器化平台,而 k8s 是 Docker 等容器平台的协调器。

1. 容器化时代来了

虚拟化技术已经走过了三个时代,没有容器化技术的演进就不会有 Docker 技术的诞生。

(1)物理机时代:多个应用程序可能会跑在一台机器上。

(2)虚拟机时代:一台物理机器安装多个虚拟机(VM),一个虚拟机跑多个程序。

(3)容器化时代:一台物理机安装多个容器实例(container),一个容器跑多个程序。

容器化解决了软件开发过程中一个令人非常头疼的问题,用一段对话描述:

测试人员:你这个功能有问题。
开发人员:我本地是好的呀!

开发人员编写代码,在自己本地环境测试完成后,将代码部署到测试或生产环境中,经常会遇到各种各样的问题。明明本地完美运行的代码为什么部署后出现很多 bug,原因有很多:不同的操作系统、不同的依赖库等,总结一句话就是因为本地环境和远程环境不一致。

容器化技术正好解决了这一关键问题,它将软件程序和运行的基础环境分开。开发人员编码完成后将程序打包到一个容器镜像中,镜像中详细列出了所依赖的环境,在不同的容器中运行标准化的镜像,从根本上解决了环境不一致的问题。

虽然容器概念已经出现不短的时间,但 2013 年推出的开源项目 Docker 在很大程度上帮助推广了容器这项技术,并推动了软件开发中容器化和微服务的趋势,这种趋势后来被称为云原生开发。

2. 容器化技术的尖刀武器

可移植性:不依赖具体的操作系统或云平台,比如在阿里云或腾讯云直接随意迁移。
占地小:容器只需要其应用程序以及它需要运行的所有容器和库的依赖清单,不需要将所有的依赖库都打包在一起。
共享 bin 和 lib:不同的容器可以共享 bin 和 lib,进一步节省了空间。

3. Docker 横空出世

2010 年一位年轻小伙子在美国旧金山成立了一家名叫【dotCloud】的公司, 开发了 Docker 的核心技术,从此开启了容器技术的时代。

后面 dotCloud 公司将自己的容器技术进行了简化和标准化,取名为 Docker,就是大家熟悉的鲸鱼 logo。

2013 年 dotCloud 公司宣布将 Docker 开源,随着越来越多的工程师发现了它的优点, Docker 的人气迅速攀升,成为当时最火爆的开源技术之一。
当前有 30% 以上的企业在其 AWS 环境中使用 Docker,并且这个数字还在继续增长。

此时的 Docker,已经成为行业里人气最火爆的开源技术,没有之一。甚至像 Google、微软、Amazon、VMware 这样的巨头,都对它青睐有加,表示将全力支持。
Docker 火了之后,dotCloud 公司干脆把公司名字也改成了 Docker Inc. 。
Docker 和容器技术为什么会这么火爆?说白了,就是因为它 “轻”。
在容器技术之前,业界的网红是虚拟机。虚拟机技术的代表,是 VMWare 和 OpenStack 。

相信很多人都用过虚拟机。虚拟机,就是在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。

在 “子电脑” 里,你可以和正常电脑一样运行程序,例如登录 QQ。如果你愿意,你可以变出好几个 “子电脑”,里面都登录上 QQ。“子电脑” 和 “子电脑” 之间,是相互隔离的,互不影响。
虚拟机属于虚拟化技术。而 Docker 这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化。
虚拟机虽然可以隔离出很多 “子电脑”,但占用空间更大,启动更慢,虚拟机软件可能还要花钱(例如:VMWare)。
而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似 “沙箱”)。Docker 可以轻松创建容器和基于容器的应用程序,最初是为 Linux 构建的,现在也可以在 Windows 和 MacOS 上运行。
它启动时间很快,几秒钟就能完成。而且,它对资源的利用率很高(一台主机可以同时运行几千个 Docker 容器)。此外,它占的空间很小,虚拟机一般要几 GB 到几十 GB 的空间,而容器只需要 MB 级甚至 KB 级。

正因为如此,容器技术受到了热烈的欢迎和追捧,发展迅速。大家需要注意,Docker 本身并不是容器,它是创建容器的工具,是应用容器引擎。想要搞懂 Docker,其实看它的两句口号就行。
第一句,是 “Build, Ship and Run”。
第二句口号则是:“Build once,Run anywhere(搭建一次,到处能用)”。

Build(构建镜像): 镜像就像是集装箱,包含文件以及运行环境等等资源;
Ship(运输镜像):在宿主机和仓库间进行运输,这里仓库就像是超级码头;
Run(运行镜像):运行的镜像就是一个容器,容器就是运行程序的地方。

⭐说白了,这个 Docker 镜像,是一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如:环境变量)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
⭐综上所述,Docker 的运行过程,也就是去仓库把镜像拉到本地,然后用执行命令把镜像运行起来变成容器,这也就是为什么人们常常将 Docker 称为码头工人或码头装卸工。
⭐负责对 Docker 镜像进行管理的,是 Docker Registry 服务(类似仓库管理员)。当然,不是任何人建的任何镜像都是合法的。万一有人构建的镜像存在问题呢?所以,Docker Registry 服务对镜像的管理是非常严格的。最常使用的 Registry 公开服务,是官方的 Docker Hub,这也是默认的 Registry,并拥有大量的高质量的官方镜像。

4. Docker 如何使用

其实大多数人谈论 Docker 时说的是 Docker Engine,这只是一个构建和运行的容器。
在运行容器前需要编写 Docker File,通过 dockerFile 生成镜像,然后才能运行 Docker 容器。
Docker File 定义了运行镜像(image)所需的所有内容,包括操作系统和软件安装位置。一般情况下都不需要从头开始编写 Docker File,在 Docker Hub 中有来自世界各地的工程师编写好的镜像,你可以基于此修改。

标签:容器,一文,虚拟机,应用程序,镜像,Docker,k8s
From: https://www.cnblogs.com/xiaohaigegede/p/17816863.html

相关文章

  • 一文概览NLP句法分析:从理论到PyTorch实战解读
    关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。本文全面探讨了自然语言处理(NLP)中句法分析的理论与实践。从句法和语法的......
  • k8s的使用
     apiVersion:v1              #必选,版本号,例如v1kind:Pod                #必选,Podmetadata:                #必选,元数据 name:string           ......
  • 一文带你零基础深入理解随机变量,概率分布与统计量
    一.随机事件与概率1.1随机现象在自然界和人类活动中,发生的现象多种多样,比如下列这些现象:1.偶数能被2整除2.光的速度是常数 3.一家门店一天之内的订单量4.一个新生儿可能是男生也可能是女生 5.AB实验存在对照组和实验组......
  • 一文搞懂双链表
    前言前面有很详细的讲过线性表(顺序表和链表),当时讲的链表以单链表为主,但在实际应用中双链表有很多应用场景,例如大家熟知的LinkedList。双链表与单链表区别单链表和双链表都是线性表的链式实现,它们的主要区别在于节点结构。单链表的节点包含数据字段data和一个指向下一个节......
  • k8s 外部ip定义
    apiVersion:v1kind:Servicemetadata:name:xinxi-azure-svcnamespace:jituan-xinxi-bespec:ports:-name:xinxi-azure-portport:443protocol:TCPtargetPort:38455type:ClusterIP---apiVersion:v1kind:Endpointsmeta......
  • CentOS怎么安装最新版本docker
    环境查看[root@localhost~]#cat/etc/redhat-releaseCentOSLinuxrelease7.9.2009(Core)[root@localhost~]#uname-aLinuxlocalhost.localdomain3.10.0-1160.el7.x86_64#1SMPMonOct1916:18:59UTC2020x86_64x86_64x86_64GNU/Linux安装docker#更新源......
  • k8s-服务网格实战-配置 Mesh(灰度发布)
    在上一篇k8s-服务网格实战-入门Istio中分享了如何安装部署Istio,同时可以利用Istio实现gRPC的负载均衡。今天我们更进一步,深入了解使用Istio的功能。从Istio的流量模型中可以看出:Istio支持管理集群的出入口请求(gateway),同时也支持管理集群内的mesh流量,也就是集群内......
  • docker 更新容器镜像
    本文主要记录使用docker-compose的情况下,来更新镜像、以postgres镜像为例✨只会更新image:postgres:latest,末尾为latest标签的容器镜像进入docker-compose目录按顺序执行以下shell命令#更新容器镜像sudodockercomposepull#启动容器docker-composeup-d--re......
  • 一、minikube部署单机k8s环境
    一、minikube部署单机k8s环境注意:此处为方便测试,使用minikube部署单机k8s环境,生产环境请根据实际情况操作1.安装docker-ce依赖安装:yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2wget添加docker软件源:yum-config-manager--add-repohttps://mirrors.aliyun.co......
  • docker常用命令
    1、下载镜像dockerpullxxx2、启动软件dockerrun镜像名3、对于镜像的所有管理操作都在这一个命令:dockerimage--help4、查看所有镜像 dockerimages或者dockerimagels5、列出所有正在运行和已停止的容器dockerps-a 6、删除正在运行和已经停止的容器dockerrm......