×

签到

分享到微信

打开微信,使用扫一扫进入页面后,点击右上角菜单,

点击“发送给朋友”或“分享到朋友圈”完成分享

【Docker-01】docker简介 tangnian2023-07-27 15:51:33 回复 查看 经验交流
【Docker-01】docker简介
分享到:

https://zhuanlan.zhihu.com/p/551406810

1、容器背景介绍

传统服务器的问题:

1)A说:我本地运行没有问题。 B说:但是我的服务器也没有问题。

--依赖操作系统,运行环境(JDK版本,tomcat版本),代码与环境耦合程度,配置;

2)系统好卡,哪个哥们写了死循环吗?

--同一个服务器之间互相影响,共享CPU和内存等。

3)双十一需要流量撑不住,但是过了双十一服务器又太富裕。

--伸展性以满足流量洪峰,缩容以降低成本需求。也即是scale up/scale down

以上的要求催生了容器的发展。这里展示下容器的发展:

目前主流的容器有:Docker、Kubernetes和Microservice

2、docker介绍

1 Docker的定义:

  • 解释一:Docker technology is one implementation of container d virtualization technology

  • 解释二:Docker is a platform for developers and sysadmins to develop, deploy, and run applications with containers.

从英文不难看出:Docker是开发人员和系统管理员开发、部署和运行带有容器的应用程序的平台。是一种基于容器实现虚拟化技术的一种平台或技术。

创始人:Solomon Hykes ,2013年 Docker对外开源,2014年 全球开始流行。

docker发展:

201020132014.62014.72015.4
dotCloud PAASDocker 开源Docker 1.0C轮$4000WD轮$9500W

2 思想

主要三个方面:集装箱/标准化和隔离方面进行说明:

1)集装箱:有规则地打包物品,这种特性,使得程序放到哪都能运行。一图胜千言,优势如下图:

2)标准化:运输方式,存储方式和API接口

  • 运输方式:犹如超级码头;

  • 存储方式:不用管你的文件存储在哪,只要专注命令

  • API接口:执行同样的命令,即可完成操作3

3)隔离:轻量级,秒开(LXC的内核)

3 实体机,虚拟机和容器的区别



实体机虚拟机容器
优点
部署简单,分钟计算各个app间的隔离好资源利用率有提升启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离
缺点价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升启动慢,分钟级别Image比较大,G级别系统性能损失比较大安全和隔离对比虚机要差

    1. 实体机虚拟机容器
      优点
      部署简单,分钟计算各个app间的隔离好资源利用率有提升启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离
      缺点价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升启动慢,分钟级别Image比较大,G级别系统性能损失比较大安全和隔离对比虚机要差

    2. 实体机虚拟机容器
      优点
      部署简单,分钟计算各个app间的隔离好资源利用率有提升启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离
      缺点价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升启动慢,分钟级别Image比较大,G级别系统性能损失比较大安全和隔离对比虚机要差

    3. 实体机虚拟机容器
      优点
      部署简单,分钟计算各个app间的隔离好资源利用率有提升启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离
      缺点价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升启动慢,分钟级别Image比较大,G级别系统性能损失比较大安全和隔离对比虚机要差

    4. 实体机虚拟机容器
      优点
      部署简单,分钟计算各个app间的隔离好资源利用率有提升启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离
      缺点价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升启动慢,分钟级别Image比较大,G级别系统性能损失比较大安全和隔离对比虚机要差

    5. 实体机虚拟机容器
      优点
      部署简单,分钟计算各个app间的隔离好资源利用率有提升启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离
      缺点价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升启动慢,分钟级别Image比较大,G级别系统性能损失比较大安全和隔离对比虚机要差

    6. 实体机虚拟机容器
      优点
      部署简单,分钟计算各个app间的隔离好资源利用率有提升启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离
      缺点价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升启动慢,分钟级别Image比较大,G级别系统性能损失比较大安全和隔离对比虚机要差

实体机虚拟机容器
优点
部署简单,分钟计算各个app间的隔离好资源利用率有提升启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离
缺点价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升启动慢,分钟级别Image比较大,G级别系统性能损失比较大安全和隔离对比虚机要差



实体机虚拟机容器
优点
部署简单,分钟计算各个app间的隔离好资源利用率有提升启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离
缺点价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升启动慢,分钟级别Image比较大,G级别系统性能损失比较大安全和隔离对比虚机要差



实体机虚拟机容器
优点
部署简单,分钟计算各个app间的隔离好资源利用率有提升启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离
缺点价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升启动慢,分钟级别Image比较大,G级别系统性能损失比较大安全和隔离对比虚机要差

3、docker技术

1 cgroups、Namespace、Union Mount FS

Docker可以看作是容器虚拟化的相关技术的组合:

1)cgroups(control groups,控制组群)(limits how much you can use)作用是限制一个进程组的资源(包括内存,CPU ,磁盘IO,网络等)。一组进程放在一个控制组里,通过给这个控制组分配指定的可用资源,达到控制这一组进程可用资源的目的。

2)Namespace (limits what you can see)命名空间,它主要做访问隔离,即同一个命名空间的多个资源(memory, CPU, network, pid) 可以互相看到,但是之外的看不到。Namespace是Linux Kernel提供的一种内核级别环境隔离的方法。作用:进程空间隔离/文件系统隔离/域名空间隔离等等

3)UnionFS(联合文件系统):用于制作image

2 Doctor组件

build镜像,ship容器,run仓库

  1. Doctor镜像:犹如一个集装箱,用于存放一系列文件。使用上图使用的UnionFS,同一个文件系统可以看多个文件。分成进行存储:从下往上:最底层的引导层,第二层是Linux系统,第三四层为程序所需的镜像系统,这几层都是只读层。最上层的writable container是可读可写的。

  2. Doctor容器:本质上是一个进程或者虚拟机,一般为我们编写的为最上层的writable container,这个以下的部分一般是不动的,若是要修改,需要进行依次拷贝,把下层的镜像拷贝到writable container,进行修改后再加上自己的部分即可。这样就保证了底层环境不变性。便于开发和运维的一致性。

  3. Doctor仓库:存储镜像的地方,有利于自己或他人使用。(当然一般大公司都有自己的仓库)

3 Docker的运行流程

典型C/S架构分为三个Client,DOCKER_HOST,Registry。如下图所示。

  • Client:表示本地执行的docker命令载体

  • DOCKER_HOST:本机安装docker环境下的镜像和容器以及API-docker daemon

  • Registry:远端的docker 仓库。

流程:

  1. 一般执行命令后,比如docker pull ,docker client 将连接docker daemon;

  2. Docker daemon 从docker Hub(docker仓库)拉取(比如hello-world) 的镜像,注意这里优先从DOCKER_HOST的image调取,没有的时再连接远端的Registry。

  3. Docker daemon 从镜像创建了一个新的容器,这个容器运行了这个可执行的文件,产生输出;

  4. Docker daemon把输出变成输出流给到docker client, docker client呈现给终端。

容器以后的发展:更轻量级和更安全性

相关链接

1.  https://mp.weixin.qq.com/s/7o8QxGydMTUe4Q7Tz46Diw

2.  https://www.runoob.com/docker/docker-inspect-command.html

3.  参考1:https://en.wikipedia.org/wiki/Cgroups

4.  参考2 :https://coolshell.cn/articles/17049.html

5.  参考3:https://en.wikipedia.org/wiki/Union_mount

版权所有 © 2024 寒武纪 Cambricon.com 备案/许可证号:京ICP备17003415号-1
关闭