• Docker知识


    什么是docker

    Docker是一个开源的应用容器引擎,基于LXC(Linux Container)内核虚拟化技术实现,提供一系列更强的功能,比如镜像、 Dockerfile等;
    Docker理念是将应用及依赖包打包到一个可移植的容器中,可发布到任意Linux发行版Docker引擎上。使用沙箱机制运行程序, 程序之间相互隔离;
    Docker使用Go语言开发。

    docker架构和内部组建

    Docker采用C/S架构(服务端与客户端,b/s浏览器和服务器),Dcoker daemon作为服务端接受来自客户端请求,并处理这些请求,比如创建、运行容器等。客户端为用 户提供一系列指令与Docker daemon交互。
    LXC:Linux容器技术,共享内核,容器共享宿主机资源,使用namespace和cgroups对资源限制与隔离。
    Cgroups(control groups):Linux内核提供的一种限制单进程或者多进程资源的机制;比如CPU、内存等资源的使用限制。 NameSpace:命名空间,也称名字空间,Linux内核提供的一种限制单进程或者多进程资源隔离机制;一个进程可以属于多个命 名空间。Linux内核提供了六种NameSpace:UTS、IPC、PID、Network、Mount和User。
    AUFS(advanced multi layered unification filesystem):高级多层统一文件系统,是UFS的一种,每个branch可以指定readonly(ro 只读)、readwrite(读写)和whiteout-able(wo隐藏)权限;一般情况下,aufs只有最上层的branch才有读写权限,其他branch 均为只读权限。 UFS(UnionFS):联合文件系统,支持将不同位置的目录挂载到同一虚拟文件系统,形成一种分层的模型;成员目录称为虚拟 文件系统的一个分支(branch)。

    docker的优点

    • 持续集成
      在项目快速迭代情况下,轻量级容器对项目快速构建、环境打包、发布等流程就能提高工作效率。
    • 版本控制
      每个镜像就是一个版本,在一个项目多个版本时可以很方便管理。
    • 可移植性
      容器可以移动到任意一台Docker主机上,而不需要过多关注底层系统。
    • 标准化
      应用程序环境及依赖、操作系统等问题,增加了生产环境故障率,容器保证了所有配置、依赖始终不变。
    • 隔离性与安全
      容器之间的进程是相互隔离的,一个容器出现问题不会影响其他容器。

    虚拟机与容器的区别

    以KVM举例,与Docker对比

    • 启动时间
      Docker秒级,KVM分钟级。
    • 轻量级
      容器镜像大小通常以M为单位,虚拟机以G为单位。
      容器资源占用小,要比虚拟机部署更快速。
    • 性能
      容器共享宿主机内核,系统级虚拟化,占用资源少,没有Hypervisor层开销,容器性能基本接近物理机; 虚拟机需要Hypervisor层支持,虚拟化一些设备,具有完整的GuestOS,虚拟化开销大,因而降低性能,没有容器性能好。
    • 安全性 由于共享宿主机内核,只是进程级隔离,因此隔离性和稳定性不如虚拟机,容器具有一定权限访问宿主机内核,存在一定安全 隐患。
    • 使用要求
      KVM基于硬件的完全虚拟化,需要硬件CPU虚拟化技术支持; 容器共享宿主机内核,可运行在主流的Linux发行版,不用考虑CPU是否支持虚拟化技术。

    应用场景

    • 应用打包与部署自动化
      构建标准化的运行环境; 现在大多方案是在物理机和虚拟机上部署运行环境,面临问题是环境杂乱、完整性迁移难度高等问题,容器即开即用。
    • 自动化测试和持续集成/部署
      自动化构建镜像和良好的REST API,能够很好的集成到持续集成/部署环境来。
    • 部署与弹性扩展
      由于容器是应用级的,资源占用小,弹性扩展部署速度要更快。
    • 微服务 Docker这种容器华隔离技术,正式应对了微服务理念,将业务模块放到容器中运行,容器的可复用性大大增加了业务模块扩展性。

    什么是镜像?

    简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统。

    镜像分层

    Dockerfile 中的每一行都产生一个新层
    FROM alpine:latest 132h1rk1hb3rkjb
    MAINTAINER mxy 12hb1b2b12b4y1b42k
    CMD echo "hello Docker!" 12jhvkj1241
    266d925b10ba7d49f592da3b3fe4e74e.png
    ro只读 rw读写 最上的是容器层 下面是那个是image 层
    分层的好处 层如果重复的话,会共享,压力会小很多

  • 相关阅读:
    如何解决加载动态链接库DLL失败,返回0,GetLastError返回错误码126
    如何实现点击激活窗体同时窗体不跑到最前覆盖其他窗体
    数据库04
    数据库03
    数据库02
    数据库01
    Linux02
    Linux01
    软件质量
    HTML04
  • 原文地址:https://www.cnblogs.com/mxyindex/p/11051897.html
Copyright © 2020-2023  润新知