返回顶部
首页 > 资讯 > 前端开发 > VUE >Docker运行时的用户与组如何管理
  • 948
分享到

Docker运行时的用户与组如何管理

2024-04-02 19:04:59 948人浏览 独家记忆
摘要

这篇文章主要介绍了Docker运行时的用户与组如何管理的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Docker运行时的用户与组如何管理文章都会有所收获,下面我们一起来看看吧。

这篇文章主要介绍了Docker运行时的用户与组如何管理的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Docker运行时的用户与组如何管理文章都会有所收获,下面我们一起来看看吧。

docker 以进程为核心, 对系统资源进行隔离使用的管理工具. 隔离是通过 cgroups (control groups 进程控制组) 这个操作系统内核特性来实现的. 包括用户的参数限制、 帐户管理、 资源(cpu,内存,磁盘i/o,网络)使用的隔离等. docker 在运行时可以为容器内进程指定用户和组. 没有指定时默认是 root .但因为隔离的原因, 并不会因此丧失安全性. 传统上, 特定的应用都以特定的用户来运行, 在容器内进程指定运行程序的所属用户或组并不需要在 host 中事先创建.

进程控制组cgroups主要可能做以下几件事:

  • 资源限制 组可以设置为不超过配置的内存限制, 其中还包括文件系统缓存

  • 优先级 某些组可能会获得更大的 cpu 利用率份额或磁盘 i/o 吞吐量

  • 帐号会计 度量组的资源使用情况, 例如, 用于计费的目的

  • 控制 冻结组进程, 设置进程的检查点和重新启动

与 cgroups(控制进程组) 相关联的概念是 namespaces (命令空间).

命名空间主要有六种名称隔离类型:

  • pid 命名空间为进程标识符 (pids) 的分配、进程列表及其详细信息提供了隔离。

虽然新命名空间与其他同级对象隔离, 但其 "父 " 命名空间中的进程仍会看到子命名空间中的所有进程 (尽管具有不同的 pid 编号)。

  • 网络命名空间隔离网络接口控制器 (物理或虚拟)、iptables 防火墙规则、路由表等。网络命名空间可以使用 "veth " 虚拟以太网设备彼此连接。

  • uts 命名空间允许更改主机名。

  • mount(装载)命名空间允许创建不同的文件系统布局, 或使某些装入点为只读。

  • ipc 命名空间将 system v 的进程间通信通过命名空间隔离开来。

  • 用户命名空间将用户 id 通过命名空间隔离开来。

普通用户 docker run 容器内 root

如 busybox, 可以在 docker 容器中以 root 身份运行软件. 但 docker 容器本身仍以普通用户执行.

考虑这样的情况

echo test | docker run -i busybox cat

前面的是当前用户当前系统进程,后面的转入容器内用户和容器内进程运行.

当在容器内 pid 以1运行时, linux 会忽略信号系统的默认行为, 进程收到 sigint 或 sigterm 信号时不会退出, 除非你的进程为此编码. 可以通过 dockerfile stopsignal signal指定停止信号.

如:

stopsignal sigkill

创建一个 dockerfile

from alpine:latest
run apk add --update htop && rm -rf /var/cache/apk/*
cmd ["htop"]
$ docker build -t myhtop . #构建镜像
$ docker run -it --rm --pid=host myhtop #与 host 进程运行于同一个命名空间

Docker运行时的用户与组如何管理

普通用户 docker run 容器内指定不同用户 demo_user

docker run --user=demo_user:group1 --group-add group2 <image_name> <command>

这里的 demo_user 和 group1(主组), group2(副组) 不是主机的用户和组, 而是创建容器镜像时创建的.

当dockerfile里没有通过user指令指定运行用户时, 容器会以 root 用户运行进程.

docker 指定用户的方式

dockerfile 中指定用户运行特定的命令

user <user>[:<group>] #或
user <uid>[:<gid>]

docker run -u(--user)[user:group] 或 --group-add 参数方式

$ docker run busybox cat /etc/passwd
root:x:0:0:root:/root:/bin/sh
...
www-data:x:33:33:www-data:/var/www:/bin/false
nobody:x:65534:65534:nobody:/home:/bin/false

$ docker run --user www-data busybox id
uid=33(www-data) gid=33(www-data)

docker 容器内用户的权限

对比以下情况, host 中普通用户创建的文件, 到 docker 容器下映射成了 root 用户属主:

$ mkdir test && touch test/a.txt && cd test
$ docker run --rm -it -v `pwd`:/mnt -w /mnt busybox  /bin/sh -c 'ls -al /mnt/*' 
-rw-r--r--  1 root   root       0 oct 22 15:36 /mnt/a.txt

而在容器内卷目录中创建的文件, 则对应 host 当前执行 docker 的用户:

$ docker run --rm -it -v `pwd`:/mnt -w /mnt busybox  /bin/sh -c 'touch b.txt'
$ ls -al
-rw-r--r-- 1 xwx staff  0 10 22 23:36 a.txt
-rw-r--r-- 1 xwx staff  0 10 22 23:54 b.txt

docker volume 文件访问权限

创建和使用卷, docker 不支持相对路径的挂载点, 多个容器可以同时使用同一个卷.

$ docker volume create hello #创建卷

hello

$ docker run -it --rm -v hello:/world -w /world busybox /bin/sh -c 'touch /world/a.txt && ls -al'  #容器内建个文件
total 8
drwxr-xr-x  2 root   root     4096 oct 22 16:38 .
drwxr-xr-x  1 root   root     4096 oct 22 16:38 ..
-rw-r--r--  1 root   root       0 oct 22 16:38 a.txt

$ docker run -it --rm -v hello:/world -w /world busybox /bin/sh -c 'rm /world/a.txt && ls -al' #从容器内删除
total 8
drwxr-xr-x  2 root   root     4096 oct 22 16:38 .
drwxr-xr-x  1 root   root     4096 oct 22 16:38 ..

外部创建文件, 容器内指定用户去删除

$ touch c.txt && sudo chmod root:wheel c.txt
$ docker run -u 100 -it --rm -v `pwd`:/world -w /world busybox /bin/sh -c 'rm /world/c.txt && ls -al'

实际是可以删除的

rm: remove '/world/c.txt'? y
total 4
drwxr-xr-x  4 100   root      128 oct 23 16:09 .
drwxr-xr-x  1 root   root     4096 oct 23 16:09 ..
-rw-r--r--  1 100   root       0 oct 22 15:36 a.txt
-rw-r--r--  1 100   root       0 oct 22 15:54 b.txt

docker 普通用户的1024以下端口权限

 $ docker run -u 100 -it --rm -p 70:80 busybox /bin/sh -c 'nc -l -p 80'
nc: bind: permission denied #用户id 100 时, 不能打开80端口
 $ docker run -u 100 -it --rm -p 70:8800 busybox /bin/sh -c 'nc -l -p 8800' #容器端口大于1024时则可以
...
 $ docker run -it --rm -p 70:80 busybox /bin/sh -c 'nc -l -p 80' #容器内是 root 也可以
...

关于“Docker运行时的用户与组如何管理”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Docker运行时的用户与组如何管理”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网VUE频道。

--结束END--

本文标题: Docker运行时的用户与组如何管理

本文链接: https://lsjlt.com/news/96357.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Docker运行时的用户与组如何管理
    这篇文章主要介绍了Docker运行时的用户与组如何管理的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Docker运行时的用户与组如何管理文章都会有所收获,下面我们一起来看看吧。...
    99+
    2024-04-02
  • Linux用户和用户组如何管理
    这篇文章主要介绍“Linux用户和用户组如何管理”,在日常操作中,相信很多人在Linux用户和用户组如何管理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux用户和用户组如何管理”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • 如何理解Linux用户系统中的群组与群组管理员
    本篇内容介绍了“如何理解Linux用户系统中的群组与群组管理员”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!关于群组: 有效与初始群组、gr...
    99+
    2023-06-12
  • Linux中如何管理用户和用户组
    在Linux中,管理用户和用户组可以通过命令行工具和系统配置文件来实现。以下是一些常用的命令和配置文件: 添加用户:使用user...
    99+
    2024-03-15
    Linux
  • 如何使用Docker客户端管理容器
    这篇文章主要介绍了如何使用Docker客户端管理容器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。传统上,在管理物理服务器或虚拟机时,我们只需要连接RDP(运行Windows...
    99+
    2023-06-03
  • 如何管理Ubuntu用户和群组
    这篇文章将为大家详细讲解有关如何管理Ubuntu用户和群组,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。用户和群组Ubuntu安装后默认使用的是单用户,但是如果你的电脑不止是一个用户使用的话,***是为每...
    99+
    2023-06-16
  • FreeBSD中如何管理用户和组
    在FreeBSD中,可以使用以下命令来管理用户和组: 创建用户: sudo pw useradd [username] -m ...
    99+
    2024-03-12
    FreeBSD
  • Docker存储卷如何使用与管理
    Docker存储卷是一种用于在容器内部进行数据持久化的技术。它允许将数据存储在主机上的一个目录,并将这个目录挂载到容器内部。这样,即...
    99+
    2024-05-07
    Docker
  • Linux用户组如何运用
    这篇“Linux用户组如何运用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux用户组如何运用”文章吧。一个用户一个用...
    99+
    2023-06-28
  • 如何运行和管理RabbitMQ
    小编给大家分享一下如何运行和管理RabbitMQ,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!RabbitMQ服务管理启动Rab...
    99+
    2024-04-02
  • MySQL如何实现用户管理与权限管理
    这篇文章主要为大家展示了“MySQL如何实现用户管理与权限管理”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL如何实现用户管理与权限管理”这篇文章吧。 ...
    99+
    2024-04-02
  • 如何用docker运行Linux桌面
    这期内容当中小编将会给大家带来有关如何用docker运行Linux桌面,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。容器的大流行让很多东西虚拟化、容器化变成了现实。很多人还希望更多,想在容器中跑整个OS,...
    99+
    2023-06-15
  • Oracle 11g R2如何进行用户管理
    这篇文章给大家分享的是有关Oracle 11g R2如何进行用户管理的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。如果想查看oracle系统中存在用户可以查看dba_users视...
    99+
    2024-04-02
  • 如何进行Linux用户权限管理
    本篇文章给大家分享的是有关如何进行Linux用户权限管理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在一个Linux系统中有很多人同时进行开发,所有合理的管理Linux用户是...
    99+
    2023-06-28
  • win11如何以管理员运行
    要以管理员身份运行Windows 11中的应用程序或命令,可以采取以下几种方法:1. 使用右键菜单:在应用程序图标或命令上右键单击,...
    99+
    2023-08-20
    win11
  • Windows的用户和组管理
    一、Windows的用户管理 1、用户账户         不同的用户身份拥有不同的用户权限,每个用户拥有一个用户名和密码,在Windows系统中,每个用户账户具有唯一的安全标示符(Security Identifier,SID) 在w...
    99+
    2023-10-07
    服务器 运维 windows
  • MySQL的用户如何管理
    这篇“MySQL的用户如何管理”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL的用户如何管理”文章吧。一、用户管理1...
    99+
    2023-07-02
  • MySQL用户管理与PostgreSQL用户管理的区别说明
    一. MySQL用户管理 【例1.1】使用root用户登录到本地mysql服务器的test库中 mysql -uroot -p -hlocalhost test 【例1.2】使用root用户登录到本地mysql...
    99+
    2022-05-16
    MySQL 用户管理 PostgreSQL
  • php之如何使用docker运行workerman
    这篇文章主要为大家展示了“php之如何使用docker运行workerman”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php之如何使用docker运行workerman”这篇文章吧。介绍在d...
    99+
    2023-06-20
  • 如何理解Go运行时中的Mutex
    这篇文章主要讲解了“如何理解Go运行时中的Mutex”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Go运行时中的Mutex”吧!sync.Mutex...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作