0%

容器化部署(docker\K8s)

[toc]


Q: 讲一下你对虚拟化的理解?什么是虚拟化?#

A:
虚拟化可以理解为,将一台机器上的各种资源,进行抽象和隔离,方便在一台机器上运行多个进程或者系统,而且他们互相隔离,各自使用各自的资源,不会在逻辑上互相竞争资源。

虚拟机包含硬件和软件虚拟化。我这里只说软件虚拟化,也就是利用软件技术,在现有的物理平台上实现对物理平台访问的截获和模拟。

经典的有VMWare桌面虚拟、KVM全虚拟化(linux内核模块)、LXC(linux容器,轻量级虚拟化,重点)


Q: 讲一下docker是什么?#

A:
Docker是一个开源的应用容器引擎

  • 它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到安装了任何 Linux 发行版本的机器上
  • 发布到机器上之后, 会使用沙箱机制完全虚拟出一个完整的内部环境
  • 容器之间不会有任何接口,从而让容器与宿主机之间、容器与容器之间隔离的更加彻底

Q: docker是哪种类型的虚拟化?#

A:
docker属于操作系统层虚拟化(将操作系统内核虚拟化,可以允许使用者空间软件实例被分割成几个独立的单元,并没有模拟硬件), 换句话说,无法改变操作系统的性质。
底层基于LXC(Linux Container,Linux容器)进行轻量化虚拟的实现。


Q: 你们为什么要用docker?有什么好处?#

A:

  1. 如果资源有限,只有1台机器,但是有3个微服务需要部署,每台部署3个服务进程后, 万一一个进程跑多线程时, 线程池打满了, 结果把cpu全占用, 让另外2个服务一起变慢了。 或者内存疯狂涨,把内存打满了搞挂另外2个进程。
    因此引入docker后,每个服务隔离在容器中,使用的线程资源和内存受到独立的限制,就不会互相影响了。

  2. 当需要部署新的微服务时, 如果没有docker,就需要手动部署,按照指导书一点点搭建,配置参数,很容易错,且容易导致开发环境和生产环境参数不一致。
    使用docker后,可以打包docker镜像进行容器部署, 发布的速度也变快了,扩容也变简单了。


Q: Docker和虚拟机Virtual Machine的区别?#

A:

  • Docker容器不是虚拟机, 只是当初被疯狂宣传为“轻量级虚拟机”
  • 虚拟机必须要自己模拟一个虚拟操作系统guestOs才能运行, 但docker不需要,直接使用linux自身支持的namespace和cgroup实现资源隔离。
  • 云服务提供商通常采用虚拟机技术隔离不同的用户/租户。 而Docker通常用于隔离不同的应用,例如前端,后端以及数据库