做外贸外文网站怎么做好,网站开发四点注意事项,牙科医院网站源码,分类信息网址导航使用docker的过程中#xff0c;我们会有多重情况需要访问容器。比如希望直接进入MySql容器执行命令#xff0c;或是希望查看容器环境#xff0c;进行某些操作或访问。这时就会用到这个命令#xff1a;docker exec。
命令#xff1a;
docker container exec
描述#x…使用docker的过程中我们会有多重情况需要访问容器。比如希望直接进入MySql容器执行命令或是希望查看容器环境进行某些操作或访问。这时就会用到这个命令docker exec。
命令
docker container exec
描述
在运行的容器中执行命令。
您使用 docker exec 指定的命令只会在容器的首要进程PID 1运行时执行如果容器重启该命令不会被重新启动。
该命令在容器的默认工作目录中运行。
该命令必须是一个可执行程序。链式命令或引号内的命令不起作用。
这样是有效的docker exec -it my_container sh -c “echo a echo b”
这样是无效的docker exec -it my_container “echo a echo b”
用法
docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]
别名
docker exec(docker的一些命令可以简写docker exec和docker container exec是等价的)
选项
选项描述-d, –detach分离模式在后台运行命令–detach-keys覆盖用于分离容器的键序列-e, –envAPI 1.25 设置环境变量–env-file读取的环境变量文件-i, –interactive即使未附着也保持 STDIN 打开–privileged为命令提供扩展权限-t, –tty分配一个伪TTY-u, –user用户名或用户ID格式name|uid[:group|gid]-w, –workdir容器内的工作目录
示例1选项-d, –detach、-i, –interactive、-t, –tty
-d相当于后台运行使用这个选项不影响终端的进一步操作。-i和-t两个选项通常一起使用在【Docker学习】docker run之黄金搭档-it选项 – 筑天兄的清净小站 (skycreator.top)有详细介绍。
关于这三个选项官方给出的例子挺好。我就直接使用官方例子在我的阿里云上操作借花献佛了。
使用exec首先要确保有一个运行着的容器。使用以下命令创建并启动一个名为mycontainer的基于alpine的容器该容器以sh shell作为其主进程。其中-d选项–detach的简写形式会让容器以后台运行的方式启动即分离模式并附加一个伪TTY-t。-i选项设置为保持STDIN附加-i这可以防止sh进程立即退出。
docker run --name mycontainer -d -i -t alpine /bin/sh
执行之后使用ps来查看一下 在这之后我们使用-d选项在运行的mycontainer容器中运行一个命令touch /tmp/execWorks。该命令在容器的根目录tmp下创建execWorks文件。
docker exec -d mycontainer touch /tmp/execWorks
这条命令执行之后没效果需要进入容器的sh下查看。使用-it选项-i加-t选项直接与容器交互。
docker exec -it mycontainer sh
在容器的终端进入tmp文件夹查看发现execWorks被创建。 示例2选项–detach-keys
这个选项说起来比较复杂在【Docker学习】docker start深入研究 – 筑天兄的清净小站 (skycreator.top)中有详细讲解大家可以对照着来学习。
示例3选项-e, –env和选项–env-file
这两个选项都是设置环境变量的前者是直接设置后者是通过一个文件设置。在【Docker学习】docker run的环境变量相关选项-e, –env, –env-file – 筑天兄的清净小站 (skycreator.top)中有详细讲解这个不再赘述了。
示例4–privileged
这个选项用于提升容器权限它为容器提供了以下功能
启用所有Linux内核功能
禁用默认的seccomp配置文件
禁用默认的AppArmor配置文件
禁用SELinux进程标签
授予访问所有主机设备的权限
使/sys变为可读写
使cgroups挂载变为可读写
换句话说容器几乎可以做主机能做的任何事情。这个标志的存在是为了允许特殊用途比如在Docker中运行Docker。
这个选项很强大未来详细讲解这里只简要介绍。
我们使用刚才的容器作测试进入容器的终端执行命令
docker exec -it mycontainer sh
在终端输入以下命令将一个tmpfs文件系统挂载到/mnt目录允许在这个目录下存储临时数据这些数据在系统重启后不会保留。
/ # mount -t tmpfs none /mnt
这个命令具体作用如下
mount这是用来挂载文件系统的命令。-t tmpfs这指定了要挂载的文件系统类型为tmpfs这是一种基于内存的文件系统也称为临时文件系统。数据存储在内存中而不是写入磁盘这意味着它的读写速度非常快但数据在系统重启后会丢失。none这里指定了设备的源none表示没有实际的设备或文件名与tmpfs关联。因为tmpfs不依赖于具体的设备所以使用none作为占位符。/mnt这是挂载点即文件系统在目录树中的位置。在这个例子中tmpfs将被挂载到/mnt目录下。
看看运行结果。显示permission denied说明没有权限。默认情况下Docker会丢弃大多数可能危险的核心功能包括CAP_SYS_ADMIN挂载文件系统所必需的。 那么我们执行–privileged选项看看。 居然没有效果好吧看来只能放大招了。
官网讲解–privileged选项时也讲解了docker run 的–cap-add选项该选项可以为容器添加linux功能。而SYS-ADMIN是linux系统管理必备的功能。因此我使用该选项先给mycontainer加入这个功能。
docker run --cap-add SYS_ADMIN --name mycontainer -dit alpine /bin/sh
执行之后我尝试进行挂载这次成功了。通过df -h命令查看文件系统磁盘空间使用情况。可以看到最下面一行文件系统是none的就是我进行的挂载。不过这么做也用不着–privileged选项了。 官网的例子使用的并不是alpine而是ubuntu。通过对比–privileged使用与否的情况可以看到ubuntu的/dev目录发生了明显的变化 上面是不使用–privileged选项的/dev目录。 上面是使用–privileged选项的/dev目录。
可以明显看出两者的不同说明使用–privileged选项为/dev目录增加了不少特性。
回过头再来看alpine使用不使用/dev的目录是相同的。如下图所示 也就是说alpine这个镜像并没有为–privileged选项预留功能。毕竟alpine是阉割版的linux系统它的大小只有4m多。下面是几个linux官方镜像的大小对比。 另外docker run的–cap-add选项没有加入到docker exec中可能是因为这只能是创建时加入运行中的容器是不能直接设置的。
示例5-u, –user选项
这个选项用于以某个用户身份进入容器。
还是使用alpine这个镜像的mycontainer容器进入容器的shell下添加一个普通用户zl
adduser zl
然后exit退出重新使用docker exec进入这次加入-u选项
docker exec -it -u zl mycontainer sh
在shell中输入id查看当前用户的信息 可以看出当前用户是zluidgid和groups均显示出来了。
示例6-w, –workdir选项
该选项用于设置容器的工作目录。不指定的情况下工作目录就是/如下图所示 下面指定了工作目录为/etc使用pwd查看当前工作目录即是/etc。
关于alpine Alpine是一个轻量级的Linux发行版它基于musl libc和 BusyBox旨在提供一个小巧、安全、简单且高效的操作系统。Alpine特别适合用于容器和云环境因为它的大小很小启动速度快同时提供了一个包管理器工具apk可以用来安装、更新和管理软件包。 在Docker等容器平台中Alpine经常被用作基础镜像因为它可以创建出非常小的容器镜像这对于开发和部署都非常有利。由于它的体积小Alpine在资源有限的场景下也非常受欢迎比如在嵌入式设备或者需要快速部署的应用中。 Alpine 官网https://www.alpinelinux.org/ Alpine 官方仓库https://github.com/alpinelinux Alpine 官方镜像https://hub.docker.com/_/alpine/
Alpine 官方镜像仓库https://github.com/gliderlabs/docker-alpine
关于–privileged
请谨慎使用–privileged标志。带有–privileged的容器并不是一个安全沙箱化的进程。在此模式下的容器可以在主机上获取root权限的shell并控制系统。
对于大多数用例来说这个标志不应该是首选解决方案。如果您的容器需要提升的权限您应该更愿意明确授予必要的权限例如通过使用–cap-add添加单个内核功能。
关于df -h命令
在Linux和类Unix操作系统中df -h是一个常用的命令用于显示文件系统的磁盘空间使用情况。df代表disk free即磁盘空闲空间。-h选项表示human-readable它会以更易于阅读的格式显示大小例如将字节转换为千字节、兆字节或吉字节并附加适当的单位K、M、G。
df -h命令的输出通常包括以下信息
文件系统的挂载点Mounted on文件系统的总大小Size已使用的空间大小Used可用的空闲空间Avail使用百分比Use%文件系统的标识Filesystem