zoukankan      html  css  js  c++  java
  • 【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

  • 相关阅读:
    mysql高可用架构的构想
    shell进阶——expect免交互工具的使用
    Mysql性能优化之参数配置(转)
    mysql主从同步问题梳理
    使用mysql-proxy实现mysql的读写分离
    Mysql数据库的主从与主主
    Mariadb远程登陆配置及相关问题排查
    redis集群搭建及常用操作
    weblogic的linux静默搭建
    Python traceback 模块,追踪错误
  • 原文地址:https://www.cnblogs.com/yifanrensheng/p/12733307.html
Copyright © 2011-2022 走看看