Docker与K8s关系介绍不会Docker也可以使用K8s

目录
  • K8s 和 Docker 的关系
  • 容器用 Docker,需要学到什么程度
  • 总结

K8s 和 Docker 的关系

Docker 和 K8s 这两个经常一起出现,两者的Logo 看着也有一定联系一个是背上驮着集装箱的鲸鱼一个是船的舵轮。

不过两者不能放在一个维度上讨论,Docker 是当前流行的 Linux 容器解决方案,利用 Namespaces 、Cgroups 以及联合文件系统UnionFS 实现了同一主机上容器进程间的相互隔离。

  • NameSpaces:隔离进程,让进程只能访问到本命名空间里的挂载目录、PID、NetWork 等资源
  • Cgroups: 限制进程能使用的计算机系统各项资源的上限,包括 CPU、内存、磁盘、网络带宽等等
  • 联合文件系统UnionFS : 保存一个操作系统的所有文件和目录,在它基础之上添加应用运行依赖的文件。创建容器进程的时候给进程指定Mount Namespace 把镜像文件挂载到容器里,用 chroot 把进程的 Root目录切换到挂载的目录里,从而让容器进程各自拥有独立的操作系统目录。

而 K8s 是拥有容器编排能力的集群管理解决方案,可以按照应用的定义调度各个运行着应用组件 Docker 容器,但是 Docker 并不是 K8s 对容器的唯一选择,K8s 的 容器运行时支持对接多种容器 ,比如CoreOS公司的Rkt容器(之前称为Rocket,现更名为Rkt),Apache 开源的 Mesos 容器等。只要容器实现了 K8s 容器运行时的接口约定,都能让 K8s 进行调度。

Docker 公司也推出过自己的容器集群管理方案 Docker Swarm ,跟 K8s 算是竞品,但是在生产上几乎没人使用。

Docker Swarm 没有流行起来的深层次的原因就不深究了,从一些IT媒体的报道看,可能的原因是

  • 跟 Docker 深度绑定,人天生对集权主义非常反感。
  • Docker 公司在大规模集群管理上的经验不足,不像谷歌那样能高屋建瓴地给出好的解决方法。

容器用 Docker,需要学到什么程度

看完 K8s 和 Docker 的关系后,我们已经有答案了,想学 K8s 不一定非得会 Docker。但是毕竟 Docker 还是目前最流行的 Linux 容器方案,绝大部分情况下我们还是会选择使用 Docker,那么我们 Docker 掌握到什么程度更易于我们学习 K8s 呢?

这个主要看我们想学会 K8s 干什么,即使运行在 K8s 之上的容器选择 Docker,如果我们是搭建一些基建类的软件,比如 MySQL、Redis之类的,因为这些组织已经提供了软件容器的镜像,我的使用体验是,完全用不到那些 Docker 的各种命令。

比如要在 K8s 集群上运行一个 MySQL 应用,写好应用的清单文件(就是各种配置和期望的状态),然后直接运行

kubectl apply -f mysql.yaml 就好,K8s 的容器运行时会根据清单文件里的镜像名,帮我们调 Docker 的接口去下载镜像、运行容器。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - image: mysql:5.7
          name: mysql
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: superpass
          ports:
            - containerPort: 3306
              name: mysql
          volumeMounts:
            - name: mysql-persistent-storage
              mountPath: /var/lib/mysql
            - name: mysql-config
              mountPath: /etc/mysql/conf.d/my.cnf
              subPath: my.cnf

上面配置文件,有删减。完整可运行的案例,请参考:

利用Kubernetes搭建便携式开发环境之MySQL和Redis

不过,我们使用 K8s 除了搭建这种基础软件外,学 K8s 更多是让自己开发的服务能依托 K8s 集群管理、调度的能力变的更具鲁棒性、更portable。这个时候 Docker 方面的技能掌握基本的 Dockerfile 编写、打包上传镜像的命令。这部分的几个简单的知识,感觉花个两小时就能掌握,这里推荐一下我以前的文章

Go 应用怎么打包成 Docker 镜像

Java 应用怎么打包成 Docker 镜像

学会这几个简单的Docker知识就完全够用,能支撑我们开始 K8s 的学习和练习啦,其他 Docker 相关的知识完全可以在做 K8s 练习时遇到问题、解决问题的过程中再学。

总结

这篇文章把 Docker 和 K8s 的关系给大家做了一个解答,希望还在迟疑自己现有的知识储备能不能直接学 K8s 的,赶紧行动起来,K8s 是典型的入门有点难,后面越用越香。

更多关于Docker与K8s关系的资料请关注我们其它相关文章!

(0)

相关推荐

  • k8s和Docker关系简单说明

    最近项目用到kubernetes(以下简称k8s,k和s之间有8个字母).虽然之前也有简单使用过,但最近发现k8s概念较多,命令也有些不够用了,故想借此机会写点东西,更全面认识并使用k8s.本篇文章目的:让你更全面了解k8s概念,以及学到在工作中常用的操作.整体更偏向于原理和应用.在正式开始k8s之前,我们先看看k8s和Docker的关系,分别从虚拟化角度.部署方式角度叙述why use容器,话不多说,开干. 目前发现并没有将kubernetes和Docker技术产生背景和需求进行比较的文章,本

  • skywalking容器化部署docker镜像构建k8s从测试到可用

    目录 前言碎语 docker镜像构建 application.yml webapp.yml setApplicationEnv.sh setWebAppEnv.sh Kubernetes中部署 文末结语 前言碎语 skywalking是个非常不错的apm产品,但是在使用过程中有个非常蛋疼的问题,在基于es的存储情况下,es的数据一有问题,就会导致整个skywalking web ui服务不可用,然后需要agent端一个服务一个服务的停用,然后服务重新部署后好,全部走一遍.这种问题同样也会存在sk

  • 在docker中部署k8s的方法

    K8s k8s是一个cluster集群,在cluster集群中有多个Namespace,一个namespace下又有多个pods,一个pod下有多个container. 这篇文章带你从头在docker中部署k8s. docker下载 docker安装 docker: https://docs.docker.com/docker-for-mac/install/ 在docker中使用k8s: https://docs.docker.com/desktop/kubernetes/ 在docker设置

  • 打包docker镜像推送到远程服务器并部署到k8s的方法步骤

    目录 1.Dockerfile 2.pom配置 3.镜像推送 4.k8s部署 前提条件: 1.docker服务器已开启远程访问,参考<远程docker服务器携带证书连接>. 2.服务器上已经搭建好k8s集群,本文是k8s单点集群用于测试. 在之前的文章中我们已经通过idea的docker插件测试了远程docker服务器已经能够正常访问,虽然利用这个docker插件也可以完成docker镜像的打包及推送,但本文我们将换一种方式,使用maven的docker-maven-plugin插件完成doc

  • 基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持续集成交付环境的详细教程

    环境搭建概述 亲爱的家人们可以到链接:http://xiazai.jb51.net/202105/yuanma/javayaml_jb51.rar  下载所需要的yaml文件. 1.K8S是什么? K8S全称是Kubernetes,是一个全新的基于容器技术的分布式架构领先方案,基于容器技术,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率的最大化. 如果我们的系统设计遵循了kubernetes的设计思想,那么传统系统架构中那些和业务没有多大关系的底层代码或功能模块,都可以使用K8S来管

  • Docker与K8s关系介绍不会Docker也可以使用K8s

    目录 K8s 和 Docker 的关系 容器用 Docker,需要学到什么程度 总结 K8s 和 Docker 的关系 Docker 和 K8s 这两个经常一起出现,两者的Logo 看着也有一定联系一个是背上驮着集装箱的鲸鱼一个是船的舵轮. 不过两者不能放在一个维度上讨论,Docker 是当前流行的 Linux 容器解决方案,利用 Namespaces .Cgroups 以及联合文件系统UnionFS 实现了同一主机上容器进程间的相互隔离. NameSpaces:隔离进程,让进程只能访问到本命名

  • Docker私有仓库Harbor介绍和部署方法详解

    Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的.这里介绍一款企业级Docker镜像仓库Harbor的部署和使用,在Kubernetes集群中,推荐使用Harbor仓库环境. 一.Harbor仓库介绍 我们在日常Docker容器使用和管理过程中,渐渐发现部署企业私有仓库往往是很有必要的, 它可以帮助你管理企业的一些敏感镜像, 同时由于Docker Hub的下载速度和GF

  • Docker 存储驱动详细介绍

    Docker 存储驱动详细介绍 最近做项目,期间对Docker 存储驱动不会,于是在网上找资料,并解决了,这里就记录下. 目的 理解docker的存储方式 docker的image和container在host上的目录结构 docker image和container的内容与配置不同存储 Docker是一个开源的应用容器引擎,主要利用Linux内核namespace实现沙盒隔离,用Cgroup实现资源限制.Docker用于统一开发和部署的轻量级 Linux 容器,试图解决"依赖地狱"问

  • Docker 文件系统-AUFS 原理介绍

    目录 什么是联合文件系统 如何配置 Docker 的 AUFS 模式 AUFS 工作原理 AUFS 是如何存储文件的? AUFS 是如何工作的? 1. 读取文件 修改文件或目录 AUFS 演示 准备演示目录和文件 创建 AUFS 联合文件系统 验证 AUFS 的写时复制 结语 前言: 我们知道,Docker 主要是基于 Namespace.cgroups 和联合文件系统这三大核心技术实现的.前面的课时我详细讲解了 Namespace 和 cgroups 的相关原理,那么你知道联合文件系统是什么吗

  • 浅谈docker Dockerfile 指令 VOLUME 介绍

    在介绍VOLUME指令之前,我们来看下如下场景需求: 1)容器是基于镜像创建的,最后的容器文件系统包括镜像的只读层+可写层,容器中的进程操作的数据持久化都是保存在容器的可写层上.一旦容器删除后,这些数据就没了,除非我们人工备份下来(或者基于容器创建新的镜像).能否可以让容器进程持久化的数据保存在主机上呢?这样即使容器删除了,数据还在. 2)当我们在开发一个web应用时,开发环境是在主机本地,但运行测试环境是放在docker容器上. 这样的话,我在主机上修改文件(如html,js等)后,需要再同步

  • Docker 容器文件系统详细介绍(图文)

    Docker 容器文件系统 Dockerfile是软件的原材料,Docker镜像是软件的交付品,而Docker容器则可以认为是软件的运行态.从应用软件的角度来看,Dockerfile.Docker镜像与Docker容器分别代表软件的三个不同阶段,Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石. Docker镜像 Docker镜像是Dockerfile的产物,是Docker容器的前提,大有承前启后之意.Do

  • Docker安装Redis并介绍可视化客户端进行操作

    1 简介 Redis是使用ANSI C语言开发的基于Key-Value的高性能NoSQL数据库,在解决高并发.高可用等一系列问题中,它扮演着重要的角色.它的优势主要有: 速度快.持久化.原子性.数据结构丰富.多语言支持. 本文将简单介绍如何通过Docker安装Redis,并简单使用与操作. 2 Docker安装与使用 2.1 Docker安装 拉取Redis镜像,选择目前最新的稳定版本5.0.8: $ docker pull redis:5.0.8 建议配置成阿里云的镜像,速度会快很多.拉取成功

  • Docker自定义网络详细介绍

    目录 Docker自定义网络 一.自定义网络介绍 二.创建自定义网络 Docker自定义网络 一.自定义网络介绍 1.介绍 常规docker容器启动,可以用–link,进行容器网络绑定,但是一旦容器多了之后就会非常麻烦,所以要自定义一个docker网络,小白推荐使用–link命令 自定义网络修复了docker0的容器之间无法用容器名相互ping通的问题,只能使用ip才能ping通,但是我们自定义的网络是可以用ip或者容器名相互ping通的 2.命令 自定义网络命令 说明 docker netwo

  • Docker容器数据卷介绍及操作示例

    目录 容器数据卷介绍 什么是数据卷 数据卷能做什么? 特点 Docker 容器数据卷操作 直接命令添加数据卷 dockerfile 添加数据卷 Docker 数据卷容器 数据卷容器简介 案例演示 容器数据卷介绍 什么是数据卷 将运用与运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的要求是持久化的. 容器之间希望有可能共享数据. Docker 容器产生的数据,如果不通过 docker commit 生成新的镜像,使得数据做为镜像的一部分保存下载,那么当容器删除后,数据自然也就没有了

随机推荐