【Docker-1】docker简介

目录

  1. 容器背景介绍
  2. docker介绍
  3. docker技术

一、容器背景介绍

传统服务器的问题:

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

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

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

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

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

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

以上的要求催生了容器的发展,后面说容器思想的时候会再说到这方面的契合。这里展示下容器的发展:

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

二、docker介绍

2.1 Docker的定义:

解释一:Docker technology is one implementation of container based 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发展:

2010

2013

2014.6

2014.7

2015.4

dotCloud PAAS

Docker 开源

Docker 1.0

C轮$4000W

D轮$9500W

2.2 思想

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

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

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

运输方式:犹如超级码头,其中运输;

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

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

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

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

  

实体机

虚拟机

容器

优点

  

部署简单,分钟计算

各个app间的隔离好

资源利用率有提升

启动秒开

占资源少,单机可开1000以上容器

系统性能损失少

App间资源隔离

缺点

  • 价格成本高
  • 部署麻烦,时间按照月/周计算
  • 迁移麻烦
  • 各app的隔离差,app1能看到app2的文件
  • 资源侵占厉害,一个app拖死整个系统
  • 资源利用率难提升

启动慢,分钟级别

Image比较大,G级别

系统性能损失比较大

安全和隔离对比虚机要差

三、docker技术

3.1 cgroupsNamespaceUnion Mount FS

Docker是新瓶装旧酒,是容器虚拟化的相关技术的组合:

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

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

    https://coolshell.cn/articles/17049.html

  2. Namespace (limits what you can see)又称为命名空间,它主要做访问隔离,即同一个命名空间的多个资源(memory, CPU, network, pid) 可以互相看到,但是之外的看不到。

    Namespace是Linux Kernel提供的一种内核级别环境隔离的方法

    作用:进程空间隔离/文件系统隔离/域名空间隔离等等

    参考:https://coolshell.cn/articles/17010.html

  3. UnionFS(联合文件系统):用于制作image,下图展示了Docker用UnionFS搭建的分层镜像。

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

3.2 Doctor组件

build镜像,ship容器,run仓库

  1. Doctor镜像:犹如一个集装箱,用于存放一系列文件。使用上图使用的UnionFS,同一个文件系统可以看多多个文件。分成进行存储:从下往上:最底层的引导层,第二层是Linux系统,第三四层为程序所需的镜像系统,这几层都是只读层。最上层的writable container是可读可写的,这个留到下一点描述。、
  2. Doctor容器:本质上是一个进程或者虚拟机,一般为我们编写的为最上层的writable container,这个以下的部分一般是不动的,若是要修改,需要进行依次拷贝,把下层的镜像拷贝到writable container,进行修改后再加上自己的部分即可。这样就保证了底层环境不变性。便于开发和运维的一致性。
  3. Doctor仓库:存储镜像的地方,有利于自己或他人使用。(当然一般大公司都有自己的仓库)

国外

Docker hub:hub.docker.com

国内

网易云平台: https://c.163yun.com/hub#/library

Daocloud:https://hub.daocloud.io/

其它镜像可以看看这篇:https://www.cnblogs.com/wushuaishuai/p/9984228.html

3.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呈现给终端。

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

docker学习链接:

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

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

posted @ 2020-04-19 20:30  忆凡人生  阅读(577)  评论(0编辑  收藏  举报