概述:通过使用docker pull下来的应用,都会发现系统进去后很多操作都无法实现,其实这个里面是会涉及到3个权限的问题
- 好处就是安全性
- 坏处就是操作不便
privileged参数
root权限和普通权限
- 默认正常不带privileged参数启动容器只有root的普通权限
--privileged=false Give extended privileges to this container
启动
docker run -itd --privileged=true centos:7.6.1810
init和Systemd脚本
服务操作命令:
- 6的版本:service,对应就是 /usr/sbin/init 1号进程管理
- 7的版本:systemctl ,对应就是 /usr/lib/systemd/system 1号进程管理
容器里重启服务提示Failed to get D-Bus connection: Operation not permitted
启动
docker run -itd --privileged=true centos:7.6.1810 /usr/sbin/init
默认centos:7.6.1810后面不加参数就是/bin/bash
注意这里我系统是7的版本但是我使用的6的启动方式,其实系统默认已经做了软链接
详细关于init和Systemd参考:点击访问
Docker资源管理(cgroup)
- Cgroups是Linux内核提供的一种可以限制、记录、隔离进程组(processgroups)所使用的物理资源(如:CPU、内存、IO等)的机制
- 默认没有指定参数,资源无限使用
- 容器启动后默认会在宿主/sys/fs/cgroup/cpu/docker创建文件来做接口对接
- 特殊的一些应用服务需要依赖宿主机文件
有时出现自己安装新的服务发现启动的时候会提示失败,systemctl status 服务
New main PID 558 does not belong to service, and PID file is not owned by root. Refusing
启动
挂载宿主机cgroup目录,启动时加上-v /sys/fs/cgroup:/sys/fs/cgroup
docker run -itd --privileged=true -v /sys/fs/cgroup:/sys/fs/cgroup \
centos:7.6.1810 /usr/sbin/init
详细关于cgroup:点击访问
总结:其实可以利用前2个权限来管理容器的运行级别,防止别人恶意破坏,前提是运行的程序无需后续配置管理