首页 > 其他分享 >4-1 Docker容器实现原理

4-1 Docker容器实现原理

时间:2024-04-09 22:37:19浏览次数:28  
标签:容器 隔离 宿主机 Namespace 内核 原理 Docker

Docker容器实现原理
主要是namespace和cgroup控制资源的隔离。
虽然Docker可透过Namespace的方式分隔出看似是独立的空间,然而Linux内核(Kernel)却不能Namespace,所以即使有多个Container,所有的system call其实都是通过主机的内核处理,这便为Docker留下了不可否认的安全问题。

虚拟机实现资源隔离的方法是利用一个独立的Guest OS,并利用Hypervisor虚拟化CPU、内存、IO设备等实现的。例如,为了虚拟化内存,Hypervisor会创建一个shadow page table,正常情况下,一个page table可以用来实现从虚拟内存到物理内存的翻译。相比虚拟机实现资源和环境隔离的方案,Docker就显得简练很多,它不像虚拟机一样重新加载一个操作系统内核,引导、加载操作系统内核是一个比较耗时而又消耗资源的过程,Docker是利用Linux内核特性实现的隔离,运行容器的速度几乎等同于直接启动进程。
关于Docker实现原理,简单总结如下:
- 使用Namespaces实现了系统环境的隔离,Namespaces允许一个进程以及它的子进程从共享的宿主机内核资源(网络栈、进程列表、挂载点等)里获得一个仅自己可见的隔离区域,让同一个Namespace下的所有进程感知彼此变化,对外界进程一无所知,仿佛运行在一个独占的操作系统中;
- 使用CGroups限制这个环境的资源使用情况,比如一台16核32GB的机器上只让容器使用2核4GB。使用CGroups还可以为资源设置权重,计算使用量,操控任务(进程或线程)启停等;
- 使用镜像管理功能,利用Docker的镜像分层、写时复制、内容寻址、联合挂载技术实现了一套完整的容器文件系统及运行环境,再结合镜像仓库,镜像可以快速下载和共享,方便在多环境部署。
正因为Docker不像虚机虚拟化一个Guest OS,而是利用宿主机的资源,和宿主机共用一个内核,所以会存在下面问题:
注意:存在问题并不一定说就是安全隐患,Docker作为最重视安全的容器技术之一,在很多方面都提供了强安全性的默认配置,其中包括:容器root用户的 Capability 能力限制,Seccomp系统调用过滤,Apparmor的 MAC 访问控制,ulimit限制,pid-limits的支持,镜像签名机制等。
1、Docker是利用CGroups实现资源限制的,只能限制资源消耗的最大值,而不能隔绝其他程序占用自己的资源;
2、Namespace的6项隔离看似完整,实际上依旧没有完全隔离Linux资源,比如/proc 、/sys 、/dev/sd*等目录未完全隔离,SELinux、time、syslog等所有现有Namespace之外的信息都未隔离。

最大的缺点就是隔离不彻底
  1)容器知识运行在宿主机上的一种特殊的进程,那么多个容器之间使用的就还是同一个宿主机的操作系统内核
  2)在Linux内核中,有很多资源和对象是不能被Namespace化的,最典型的例子是:时间即如果某个容器修改了时间,那整个宿主机的时间都会随之修改
  3)容器给应用暴露出来的攻击面比较大,在生产环境中,没有人敢把运行在物理机上的Linux容器暴露在公网上

 

标签:容器,隔离,宿主机,Namespace,内核,原理,Docker
From: https://www.cnblogs.com/skyzy/p/18125015

相关文章

  • 2-3、dockerfile之wordpress
    wordpress:4.2#cddocker-training/wordpress/#ls-a.license.txtwp-config-sample.phpwp-login.php..readme.htmlwp-contentwp-mail.phpDockerfilewp-activate.phpwp-cron.php......
  • 2-2、dockerfile之php-fpm,mysql
    dockerfile之php-fpm#cddocker-training/php-fpm/#lsDockerfilenginx_nginx.confsupervisor_nginx.confnginx_default.confphp_www.confsupervisor_php-fpm.conf各文件解释:nginx_nginx.conf替换默认的nginx.conf文件nginx_default.conf替换默......
  • 1-1、Docker命令详解
    Docker命令详解#docker--helpUsage:docker[OPTIONS]COMMAND[arg...]dockerdaemon[--help|...]docker[-h|--help|-v|--version]Aself-sufficientruntimeforcontainers.主要选项:-d:以后台进行方式运行容器-t:提供一个伪终端-......
  • 1-2、docker命令
    docker命令1run主要选项:-d:以后台进行方式运行容器-t:提供一个伪终端-i:提供交互输入,一般与“-t”一起使用,如果只提供“-i”选项,则容器启动后是无法退出的-v:映射一个volume给容器,如:-p/data/www:/var/www/html-p:将容器的端口映射给宿主机(指定映射出的端口),......
  • 2-1、dockerfile之centos7
    docker基础及dockerfile1、docker组件(C/S)dockerclient:docker客户端dockerserver:dockerdaemon的主要组成部分,接受用户通过dockerclient发送的请求,并按照相应的路由规则实现路由分发docker镜像:docker镜像运行之后变成容器(dockerrun)dockerregistry:镜像仓库,registry......
  • 1-0 docker介绍
    dockerdocker与传统的虚拟化方式相比:docker的启动在秒级;docker对系统资源利用率高,一台主机可以同时运行多个docker容器;docker基本不消耗系统资源,使得运行在docker里面的应用的性能很高;更快的支付和部署:开发者可以使用一个标准的镜像来构建一套开发容器,开发完成后,运维人员可......
  • 【编译原理】Antlr 入门使用
    前面文章我们学习了编译器前端的词法和语法分析工具,本篇我们来看看如何借助Antlr工具,快速生成词法和语法分析代码。一、安装mac环境:1)安装brewinstallantlr2)配置classpath(把Antlr的JAR文件设置到CLASSPATH环境变量中,以便顺利编译所生成的Java源代码。)vi~/.b......
  • 图片管理系统:原理、设计与实践
    第一章:图片管理系统概述1.1图片管理系统简介图片管理系统是一种用于存储、组织、处理、搜索、展示和分享图片的软件系统。它通常包括图片上传、存储、标记、搜索、编辑、展示等功能,旨在帮助用户有效管理大量图片资源。图片管理系统可以是基于云端的在线服务,也可以是本地部署的......
  • 【Linux】虚拟化技术docker搭建SuitoCRM系统及汉化
    CRM系统CRM(CustomerRelationshipManagement,客户关系管理)系统是一种用于管理和优化企业与客户关系的软件工具。在商业竞争激烈的现代社会中,CRM系统已成为许多企业提高销售、增强客户满意度和实现持续增长的重要工具。本文将介绍CRM系统的概念、功能以及其在企业中的重要性......
  • docker ——网络配置和管理
    docker网络基础了解docker网络两种docker网络单主机与多主机的docker网络网络驱动网络驱动介绍bridge桥接网络,这是默认的网络驱动程序host主机网络overlay覆盖网络macvlan将mac地址分配给容器,使容器作为网络上的物理设备none表示关闭容器的所有......