容器安全之设置docker.socket文件权限为644或更多限制性

容器安全之设置docker.socket文件权限为644或更多限制性,第1张

验证 dockersocket 文件权限是否正确设置为 644 或更多限制

dockersocket 文件包含可能会改变 Docker 远程 API 行为的敏感参数。

因此,它应该拥有 root 权限,以保持文件的完整性。

若权限非 644 ,修改授权

使用-v映射宿主机下的文件作为mysql的配置文件时,可能出现mysql无法正确读取文件中配置项的问题

该问题的主要原因为宿主机的文件权限不对,由于docker的mysql镜像启动使用的是mysql这个用户,而非root用户,mysql用户的id和gid都为999

通过修改宿主机文件的权限可以解决该问题

基础 *** 作:

1  docker images  查看镜像信息列表 镜像是静态的

2  docker ps -a  查看运行中的所有容器

3  docker pull  [images]:[version] 从dockerhub拉取指定镜像

4  docker run -p 8000:80 -tdi --privileged [imageID] [command]   后台启动docker,并指定宿主机端口和docker映射端口。

  -i: 以交互模式运行容器,通常与 -t 同时使用;

  -d: 后台运行容器,并返回容器ID;

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

--privileged  容器将拥有访问主机所有设备的权限

通常情况下 [command] 填下  /bin/bash  即可。

特殊情况下,如需要在centos镜像中使用 systemctl  则应添加 --privileged  并设置[command ]为  init 。

5 当镜像通过run 启动后,便会载入到一个动态的container(容器)中运行,此时若需要进入终端交互模式:

sudo docker exec -it [containerID] /bin/bash

交互模式中,使用  ctrl+p+q退出交互 保持运行,使用 exit命令退出并停止容器。

6 在容器非交互模式下,通过docker  start/stop 命令来启动/停止已部署的容器服务。

7  docker rm [containerID]  删除容器

8  docker rmi [imageID]  删除镜像

9 docker cp [YourHostFilePath] [containerID]:[DockerPath]  将宿主机内的指定文件传输至容器内部的指定地址。

镜像制作:

1   docker commit [containerID] [ImageName]:[Version]  将修改后的容器重新打包成镜像

2  docker commit -a "runoobcom" -m "my apache" a404c6c174a2 mymysql:v1  将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。

-a  :提交的镜像作者;

  -c  :使用Dockerfile指令来创建镜像;

  -m  :提交时的说明文字;

  -p  :在commit时,将容器暂停。

3  docker push [ImageID] [repertory_address] 提交镜像到云仓库

(暂时先记录这些,后续再更新)

默认情况下,容器没有资源限制,可以使用主机内核调度程序允许的尽可能多的给定资源,Docker 提供了控制容器可以限制容器使用多少内存或CPU 的方法,设置 docker run 命令的运行时配置标志。

其中许多功能都要求宿主机的内核支持Linux 功能,要检查支持,可以使用 docker info 命令,如果内核中禁用了某项功能,可能会在输出结尾处看到警告,如下所示:

对于Linux 主机,如果没有足够的内存来执行其他重要的系统任务,将会抛出OOM (Out of Memory Exception,内存溢出、内存泄漏、内存异常), 随后系统会开始杀死进程以释放内存,凡是运行在宿主机的进程都有可能被kill,包括Dockerd和其它的应用程序,如果重要的系统进程被Kill,会导致和该进程相关的服务全部宕机。

linux 会为每个进程算一个分数,最终它会将分数最高的进程kill。

Docker 可以强制执行硬性内存限制,即只允许容器使用给定的内存大小。

Docker 也可以执行非硬性内存限制,即容器可以使用尽可能多的内存,除非内核检测到主机上的内存不够用了。

这些选项中的大多数采用正整数,后跟 b、k、m、g 后缀,以表示字节、千字节、兆字节或千兆字节。

--memory-swap , 只有在设置了 --memory 后才会有意义。使用Swap,可以让容器将超出限制部分的内存置换到磁盘上,

不同的 --memory-swap 设置会产生不同的效果:

假如一个容器未做内存使用限制,则该容器可以利用到系统内存最大空间,默认创建的容器没有做内存资源限制。

启动两个工作进程,每个工作进程最大允许使用内存256M,且宿主机不限制当前容器最大内存:

接着宿主机限制容器最大内存使用:

宿主机cgroup 验证:

--memory-reservation

宿主机cgroup 验证:

一个宿主机,有几十个核的CPU,但是宿主机上可以同时运行成百上千个不同的进程用以处理不同的任务,多进程共用一个CPU 的核心依赖计数就是为可压缩资源,即一个核心的CPU 可以通过调度而运行多个进程,但是同一个单位时间内只能有一个进程在CPU 上运行,那么这么多的进程怎么在CPU 上执行和调度的呢?

Linux kernel 进程的调度基于CFS(Completely Fair Scheduler),完全公平调度

默认情况下,每个容器对主机CPU 周期的访问权限是不受限制的,但是我们可以设置各种约束来限制给定容器访问主机的CPU周期,大多数用户使用的是默认的CFS 调度方式,在Docker 113 及更高版本中,还可以配置实时优先级。

参数

对于一台2核的服务器,如果不做限制,容器会把宿主机的CPU 全部占完:

在宿主机使用 dokcer stats 命令查看容器运行状态:

在宿主机查看CPU 限制参数:

宿主机CPU 利用率:

只给容器分配最多1核宿主机CPU 利用率

宿主机cgroup 验证:

当前容器状态:

宿主机CPU利用率:

容器运行状态:

宿主机CPU利用率:

启动两个容器,stress1 的 --cpu-shares 值为1000 , stress2 的 --cpu-shares 为500,观察最终效果, --cpu-shares 值为1000 的 stress1的CPU 利用率基本是 --cpu-shares 为500 的 stress1的 2 倍:

验证容器运行状态:

宿主机cgroups验证:

动态修改CPU shares的值

--cpu-shares 的值可以在宿主机cgroup 动态修改,修改完成后立即生效,其值可以调大也可以减小。

验证修改后的容器运行状态:

以上就是关于容器安全之设置docker.socket文件权限为644或更多限制性全部的内容,包括:容器安全之设置docker.socket文件权限为644或更多限制性、解决Docker Mysql无法正确加载配置文件、Docker常用命令大全等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/10146334.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存