【Docker】Docker的部署含服务和应用、多租环境、Linux内核的详细介绍

在这里插入图片描述

前言

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。


📕作者简介:热爱跑步的恒川,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。
📗本文收录于恒川的日常汇报系列,大家有兴趣的可以看一看
📘相关专栏C语言初阶、C语言进阶系列等,大家有兴趣的可以看一看
📙Python零基础入门系列,Java入门篇系列正在发展中,喜欢Python、Java的朋友们可以关注一下哦!

Docker的应用包含Sandbox、PaaS、Open Solution以及IT运维的概念

  • 1. Docker镜像
  • 2. 网络命名空间
  • 3. 日志和审核
  • 4. SELinux 或 AppArmor
  • 5. 守护特权
  • 6. cgroups
  • 7. 二进制SUID/GUID
  • 8. 设备控制组(/dev/*)
  • 9. 服务和应用
  • 10. 安装项
  • 11. Linux内核
  • 12. 用户命名空间
  • 13. libseccomp(和seccomp-bpf 扩展)
  • 14. 性能
  • 15. 多租环境
  • 16. 完全虚拟化
  • 17. 安全审核

1. Docker镜像

在这里插入图片描述

  Docker 1.3 支持数字签名来确认官方仓库镜像的起源和完整性。因该功能仍在开发中所以Docker将抛出警告但不会阻止镜像的实际运行
  通常确保镜像只从受信库中检索并且不使用–insecure-registry命令项。

2. 网络命名空间

  在默认情况下,Docker REST API用来控制容器通过系统Docker守护进程是能够通过Unix域套接字的方式暴露出来。在Docker上开启一个TCP端口(即 当引导Docker守护进程时必须使用 -H 选项绑定地址)将允许任何人通过该端口访问容器,有可能获得主机上的root访问权限以及在某些场景下本地用户所属的Docker组。

3. 日志和审核

  收集和归档与Docker相关的安全日志来达到审核和监督的目的。
从host,可以使用下面的命令来访问容器外的日志文件:
docker run -v /dev/log:/dev/log/bin/sh
使用Docker命令内置:
docker logs … (-f to follow log output)
日志文件也可以从持续存储导出到一个使用压缩包里面:
docker export …

4. SELinux 或 AppArmor

在这里插入图片描述

  Linux的内部安全模块,例如通过访问控制的安全策略来配置安全增强型Linux(SELinux)和AppArmor,从而实现强制性的访问控制(MAC)一套有限的系统资源的限制进程,如果先前已经安装和配置过SELinux,那么它可以使用setenforce 1在容器中被激活。Docker程序的SELinux支持是默认无效的,并且需要使用—selinux功能来被激活。通过使用新增的—security-opt来加载SELinux或者AppArmor的策略对容器的标签限制进行配置。该功能已经在Docker版本1.3中介绍过。例如:
  docker run --security-opt=secdriver:name:value -i -t centos bash

5. 守护特权

  不要使用–privileged命令行选项。这本来允许容器来访问主机上的所有设备,并为容器提供一个特定的LSM配置(例如SELinux或AppArmor),而这将给予如主机上运行的程序同样水平的访问。避免使用–privileged有助于减少主机泄露的攻击面和潜力。然而,这并不意味着程序将没有优先权的运行,当然这些优先权在最新的版本中还是必须的。发布新程序和容器的能力只能被赋予到值得信任的用户上。通过利用-u选项尽量减少容器内强制执行的权限。例如:
  docker run -u-it/bin/bash
  Docker组的任何用户部分可能最终从容器中的主机上获得根源。

6. cgroups

在这里插入图片描述

  为了防止通过系统资源耗尽的DDoS攻击,可以使用特定的命令行参数被来进行一些资源限制
  CPU使用率:
docker run -it --rm --cpuset=0,1 -c 2 …
  内存使用:
docker run -it --rm -m 128m …
  存储使用:
docker -d --storage-opt dm.basesize=5G
  磁盘I/O:
不支持Docker。BlockIO*属性可以通过systemd暴露,并且在支持操作系统中被用来控制磁盘的使用配额。

7. 二进制SUID/GUID

  SUID和GUID二进制文件不稳定的时候容易受到攻击,而这个时候是很危险的,,导致任意代码执行(如缓冲区溢出),因为它们会进程的文件所有者或组的上下文中运行。如果可能的话,禁止SUID和SGID使用特定的命令行参数来降低容器的功能。
  docker run -it --rm --cap-drop SETUID --cap-drop SETGID …
  另一选择,可以考虑运用通过安装有nosuid属性的文件系统来移除掉SUID能力。
  最后一个选择是从系统中彻底删除不需要的SUID和GUID二进制文件。这些类型的二进制文件可以在Linux系统中运行以下命令而找到:
  find / -perm -4000 -exec ls -l {} ; 2 > /dev/null
  find / -perm -2000 -exec ls -l {} ; 2 > /dev/null
  可以使用类似于下面的命令将SUID和GUID文件权限删除然后:
  sudo chmod u-s filename sudo chmod -R g-s directory

8. 设备控制组(/dev/*)

  如果需要,使用内置的设备选项(不使用-v与–privileged参数)。此功能在推出1.2版本。
例如(声卡使用):
docker run --device=/dev/snd:/dev/snd …

9. 服务和应用

  如果一个Docker容器有可能被泄露,为了减少横向运动的潜力,考虑隔离极易受影响的服务(如在主机或虚拟机上运行SSH服务)。此外,不要运行容器内不受信任的操作的应用程序。

10. 安装项

在这里插入图片描述

  当使用本机容器库时(即libcontainer)Docker就会自动处理这个。
  但是,使用LXC容器库时,敏感的安装点最好通过运用只读权限来手动安装,其中包括:
/sys
/proc/sys
/proc/sysrq-trigger
/proc/irq
/proc/bus
安装权限应在以后删除,以防止重新挂载。

11. Linux内核

  使用系统提供的更新工具来确保内核是实最新的(如apt-get,yum,等)。过时的内核可能更脆弱,并且被暴露一些漏洞。使用GRSEC或PAX来加强内核,即例如对内存破坏的漏洞来提供更高的安全性。

12. 用户命名空间

  Docker不支持用户的命名空间,但是的一个开发功能。UID映射由LXC程序驱动,但在本机libcontainer库中不被支持。该功能将允许Docker程序像一个没有特权的用户在主机上运行,但显示出来的是和在容器中运行的一样。

13. libseccomp(和seccomp-bpf 扩展)

  libseccomp库允许在基于一个白名单的方法上限制Linux内核的系统调用程序的使用。对于系统操作来说,不是很重要的系统调用程序,最好被禁用,以防止被破坏的容器被滥用或误用。此功能工作正在进行中(LXC驱动程序中已经有了,但是在libcontainer中还没有完成,虽然是默认值)。使用LXC驱动程序来重启Docker程序:
  docker -d -e lxc
  如何生成seccomp配置的说明都在“的contrib”文件夹中的Docker GitHub的资源库。以后可以用下面的命令来创建一个基于Docker容器的LXC:
  docker run --lxc-conf=“lxc.seccomp=$file”
驱动程序的概念:
  驱动程序一般指的是设备驱动程序(Device Driver),是一种可以使计算机和设备进行相互通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。因此,驱动程序被比作“ 硬件的灵魂”、“硬件的主宰”、“硬件和系统之间的桥梁”等。

14. 性能

在这里插入图片描述

  只要可能,就将Linux性能降低到最小。Docker默认的功能包括:chown, dac_override, fowner, kill, setgid, setuid, setpcap, net_bind_service, net_raw, sys_chroot, mknod, setfcap, and audit_write.
  从控制行来启动容器时,可以通过–cap-add 或者–cap-drop参数来进行控制:
  例如:
docker run --cap-drop setuid --cap-drop setgid -ti/bin/sh

15. 多租环境

  由于Docker容器内核的共享性质,责任分离在多租户环境中不能安全地实现。建议容器在那些没有其它的目的,也不用于敏感操作的主机上运行。可以考虑通过Docker控制来将所有服务移动到容器中。如果可能的话,通过使用–icc= false将跨容器通信降到最低,并必要时指定-link与Docker运行,或通过—export=port,不在主机上发布,而在容器上暴露一个端口。相互信任的容器的映像组来分离机器。
多租户的概念:
  多租户指服务器上运行单一应用,但是同时服务于多家企业。每一个企业的用户所使用的应用都是自定制版本。这种就是应用本身的共享作为资源,而不是一个企业只能单独使用一台服务器或者一套服务器上运作的单一应用。

16. 完全虚拟化

  使用一个完整的虚拟化解决方案包含Docker,如KVM。这将阻止一个内核漏洞在Docker镜像中被利用导致容器扩为主系统
Docker镜像能够嵌套来提供该KVM虚拟层,参考Docker-in-Docker utility 中所示。

17. 安全审核

  对主系统和容器定期进行安全审核以查明能导致系统损坏的错误配置或漏洞。


如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞👍作为鼓励,并评论收藏一下,谢谢大家!!!
制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/37065.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

速通matplotlib库

速通matplotlib库 前言 ​ 最近在复习之前学习过的知识点,因此想到把学过的总结一下,方便后面再次复习,所以有了这个系列。 说明 ​ 由于标题写的是“速通”,因此我的想法是可以让大家看完这篇文章,可以上手matplotlib…

爬虫正常用哪种代理比较好?

目录 爬虫使用哪种代理IP 爬虫使用代理IP时需要考虑什么 爬虫怎么使用代理IP 爬虫使用代理IP示例代码 爬虫使用哪种代理IP 在使用代理IP进行爬虫时,以下几种类型的代理被认为是比较好的选择: 1. 高匿名代理:高匿名代理隐藏了真实的IP地址…

简要介绍 | 边缘计算:原理,研究现状与未来展望

注1:本文系“简要介绍”系列之一,仅从概念上对边缘计算进行非常简要的介绍,不适合用于深入和详细的了解。 边缘计算:原理,研究现状与未来展望 What is Edge Computing? | Moving Intelligence to the Edge 一、背景介…

漏刻有时数据可视化Echarts组件开发(27):端午地图粽情之你的家乡吃甜还是吃咸?

端午地图粽情之你的家乡吃甜还是吃咸? 前言Echarts创意来源Echarts核心代码1.引入外部文件2.构建HTML容器3.Echarts组件开发预置各省数据初始化DOM配置选项geo组件series组件自适应浏览器完整option选项配置代码 前言 中国各地对粽子的口味偏好存在一定的差异&…

【openGauss数据库】---设置开机自启动openGauss数据库服务

【openGauss数据库】---设置开机自启动openGauss数据库服务 🔻 一、openGauss 自定义服务的配置文件了解🔻 二、设置openGauss 开机自启动🔻 三、总结—温故知新 👈【上一篇】 💖The Begin💖 点点关注&am…

css animation 鼠标移入暂停会抖动

如图 实现一个赞助商横向滚动列表墙, 上下两排向右滚动,中间向左滚动,鼠标移入暂停当前行。 实现: // 使用animation.moving {animation: move 20s linear infinite; }keyframes move {0% {}100% {transform: translateX(-50%);…

【深入浅出 Spring Security(十三)】使用 JWT 进行前后端分离认证(附源码)

使用 JWT 进行前后端分离认证 一、JWT 的简单介绍二、使用 JWT 进行安全认证后端结合SpringSecurity实现前端Vue3结合Pinia、Axios实现测试结果 一、JWT 的简单介绍 JWT 全称 Java web Token,在此所讲述的是 JWT 用于身份认证,用服务器端生成的JWT去替代…

CV多模态和AIGC的原理解析:从CLIP、BLIP到Stable Diffusion、Midjourney

前言 终于开写本CV多模态系列的核心主题:stable diffusion相关的了,为何执着于想写这个stable diffusion呢,源于三点 去年stable diffusion和midjourney很火的时候,就想写,因为经常被刷屏,但那会时间错不…

入门车载以太网

前言 近些年来,随着为了让汽车更加安全、智能、环保等,一系列的高级辅助驾驶功能喷涌而出。未来满足这些需求,就对传统的电子电器架构带来了严峻的考验,需要越来越多的电子部件参与信息交互,导致对网络传输速率,稳定性,负载率等方面都提出了更为严格的挑战。 除此以外…

34.RocketMQ之Broker端消息存储流程详解

highlight: arduino-light Broker消息存储概要设计 RocketMQ主要存储的文件包括Commitlog文件,ConsumeQueue文件,IndexFile文件。 RMQ把所有主题的消息存储在同一个文件中,确保消息发送时顺序写文件。 为了提高消费效率引入了ConsumeQueue消息…

云原生TDengine-v3.0部署手册

云原生TDengine-v3.0部署手册 一、管理namespace1.1 创建namespace1.2 namespaces列表 二、配置3份yaml文件2.1 tdengine3-storage-class.yaml2.2 taosd-service.yaml2.3 taosd-tdengine.yaml 三、服务部署3.1 部署StorageClass3.2 部署Service3.3 部署StatefulSet3.4 查看启动…

Flask新手教程

Flask简介 Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。 Flask 可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或…

微服务 云原生:微服务相关技术简要概述

后端架构演进 单体架构 所谓单体架构,就是只有一台服务器,所有的系统、程序、服务、应用都安装在这一台服务器上。比如一个 bbs 系统,它用到的数据库,它需要存储的图片和文件等,统统都部署在同一台服务器上。 单体架…

有PMP有没有必要换cspm?未来的发展前景如何?

最近 CSPM 证书很热门,CSPM 相关问题大家都很关心,今天本橘座就给大家全面解答一下 CSPM到底是何方神圣? 文章主要是解答下面几个常见问题,其他问题可以留言或者私信咨询我哦~ 一、什么是 CSPM证书?跟PMP是什么关系&a…

STM32F103驱动VL53L0X激光测距模块

STM32F103驱动VL53L0X激光测距模块 简介引脚定义STM32F103ZET6开发板与VL53L0X模块接线测试代码实验结果 简介 TOF 是飞行时间(Tlme of Flight)技术的缩写,即传感器发出经过调制的近红外光,遇到物体后反射,传感器通过…

「提高你的CSS技能」:15个重要的CSS属性详解

这篇文章介绍了15个重要的CSS属性,旨在提高读者的CSS知识和技能。文章以清晰的方式解释了每个属性的作用和用法,并提供了相应的示例代码。通过这篇文章,读者可以了解到一些有趣且实用的CSS属性。 1:in-range 和:out-of-range 伪类 CSS的:in…

[C++] C++特殊类设计 以及 单例模式:设计无法拷贝、只能在堆上创建、只能在栈上创建、不能继承的类, 单例模式以及饿汉与懒汉的场景...

特殊类 1. 不能被拷贝的类 注意, 是不能被拷贝的类, 不是不能拷贝构造的类. 思路就是 了解什么时候 会以什么途径 发生拷贝, 然后将路堵死. 拷贝发生一般发生在 拷贝构造 和 赋值重载 所以, 只要把类的这两个成员函数堵死, 此类就不能拷贝了 C98 在C11之前, 可以通过这种方…

python-计算两个矩阵的相似度。

余弦相似度 在pytorch中,有一个专门的函数用于计算相似度:torch.cosine_similarity() https://pytorch.org/docs/stable/nn.functional.html#cosine-similarity import torch import torch.nn.functional as F input1 torch.randn(100, 128) input2 t…

技术讨论:我心中TOP1的编程语言

欢迎关注博主 六月暴雪飞梨花 或加入【六月暴雪飞梨花】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术…

使用STM32 再实现感应开关盖垃圾桶

硬件介绍 SG90舵机 如上图所示的舵机SG90,橙线对应PWM信号,而PWM波的频率不能太高,大约50Hz,即周期0.02s,20ms左右。 在20ms的周期内,高电平占多少秒和舵机转到多少度的关系如下: 0.5ms-----0度…