这个本文从操作角度介绍了Docker中的容器。 系统将向您介绍什么是容器。
处理
包含r 是具有指定配置的 Linux 进程。 操作步骤如下:
## 启动 Redis 进程 ➜ ~ docker run -d --name=db redis:alpine## 显示正在运行的容器进程 ➜ ~ docker top dbPID 用户时间 command2288 999 0:00 & 下午bsp; redis-server## 检查系统上是否存在 redis-server 进程 ➜ ~ ps aux | grep redis-serverdonggang 10761 0.0 0.0 4258876 200 s007 R+ 6:57pm 0:00.00 grep - -颜色=自动 --排除 -dir=.bzr --排除 -dir=CVS --排除-dir=.git --排除[k4 ]dir=.hg [k4 ][k 4]exclude-dir=.svn redis-server## 显示 dockerd 进程树 ➜ ~ pstree -c -p -A $(pgrep dockerd)
在Linux系统上,容器对应标准进程。所有容器进程都是由dockerd进程衍生出来的。Linux是基于文件系统和进程的。信息存储在/proc中。每个进程对应一个,通过进程ID可以获取对应的位置: ➜ ~ DBPID=$(pgrep redis-server) ➜ ~ echo Redis $DBPID.Redis会在这个下找到对应的进程文件➜~ls /proc/$DBPIDattr cmdline环境io mem ns pagemap sched stack taskautogroup comm exe 限制 mountinfo uma_maps patch_state schedstat stattimersauxv coredump_filter fd loginuid mounts oom_aDJ 个性 sessionid statm uid_mapcgroup cpuset fdinfo map_files mountstats oom_score projid_map setgroups status wchanclear_refs cwd gid_map map net oom_score_adj root smaps syscall## 通过文件获取容器数据库➜~cat /proc/$DBPID/environHOSTNAME=a1f8a38c84d4SLVL=2REDIS_DOWNLOAD_SHA=6624841267。 e142c5d5d5be292d705f8fb6070677687c5aad1645421a936d22b3HOME=/home/redisPATH=/usr/local/sbin:/usr/local/bi n:/usr/sbin:/usr/bin:/sbin:/binREDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-5.0.6.tar.g zREDIS_VERSION=5.0.6PWD=/data# 。注:##通过docker api获取,➜~docker exec -it db envPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME= a1f8a38c84d4TERM=xtermREDIS_VERSION=5.0.6RE DIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-5.0.6.tar.gzREDIS_DOWNLOAD_SHA= 6624841267e142c5d5d5be292d705f8fb6070677687c5aad1645421a936d22b3HOME=/root 命名空间
容器的一个基本部分是命名空间。命名空间限制进程只能获取系统的某些部分,例如网络接口或本进程。当容器运行时,例如docker创建一个命名空间,容器对应的进程运行在这个命名空间中。 style="box-sizing: border-box; margin-top: 0px; margin-bottom: 0.8rem; color: rgb(76, 73, 72); font-family: [ k4]苹果-系统,BlinkMacSystemFont,“Segoe UI”,“Helvetica Neue", Lato, Roboto, "PingFang SC", "Microsoft YaHei", sans-serif;white-space: 正常;background-color: rgb(255, 255, 255);">命名空间有以下类型:挂载(mnt)、进程ID(pid)、网络(net)、进程间通信(ipc)、UTC(主机名)。 )、UserId(用户)、控制组(cgroup) Linux命名空间的概述可以在这里找到:https://en.wikipedia.org/wiki/Linux_namespaces
## bash是一个“沙箱”执行的。与 ➜ ~ sudo unshare --fork --pid --mount-proc bash## 输出进程信息 [root@master ~]# ps PID TTY TIME CMD 1 pts/0 00 :00:00 bash 12 pts/0 00:00:00 ps[root@master ~]# exit## 退出沙箱 exit## 输出进程信息 ➜ ~ ps PID TTY TIME CMD 4673 pts/0 00:00 :00 zsh 9088 pts/0 00:00:00 ps16860 pts/0 00:00:00 zsh18119 pts/0 00: 00:00 zsh取消分享你可以使用工具创建隔离的沙箱,以便在其中运行的进程不会共享名称空间,例如其父进程的 pid。 style="box-sizing: border-box; margin-top: 0px; margin-bottom: 0.8rem; color: rgb(76, 73, 72); font - family: [ k4]苹果-系统,BlinkMacSystemFont,“Segoe UI”,“Helvetica Neue”,Lato,Roboto, "PingFang SC", "Microsoft YaHei", sans-serif;white-space:normal;background-color:rgb(255, 255, 255);">命名空间本质上仍然是一个文件,存储在磁盘上,以便它们可以共享名称空间。 nsenter 工具可以运行指定命名空间中的程序。
## 获取容器DB命名空间资源 ➜ ~ ls -lha /proc/$DBPID/ns 总使用量 0dr-x--x-[k4 ]x 2 Polkit 1000 0 1 0 30 19:17 .dr-xr-xr-x 9 polkitd 1000 0 10 30 19:17 ..lrwxrwxrwx 1 polkitd 1000 0 10 30 19:18 ipc -> ipc:[4026533033]lrwxrwxrwx 1 polkitd 1000 0 10 月 30 日 19:18 mnt -> mnt:[4026533031]lrwxrwxrwx 1 polkitd 1000 0 10 月 30 日 19:17 净 -> 净:[4026533036]lrwxrwxrwx 1 polkitd 1000 10 月 30 日 19:18 pid ->pid:[4026533034]lrwxrwxrwx 1 polkitd 1000 0 10 月 30 日 19:18 用户 -> 用户:[4026531837]lrwxrwxrwx 1 polkitd 1000 0 10 月 30 日 19:18 uts -> uts:[4026533032]## 在容器中运行 db ps 程序 ➜ ns nsenter --target $DBPID -m -u -i -p /bin/ps auxPID USER TIME COMMAND 1 redis 1:03 redis-服务器 37 根 0:00 /bin/ps aux
docker 您可以使用语法 container: 共享命名空间。以下示例创建共享数据库网络命名空间的 Web 容器 ➜ ns docker run -d --name=web [ k4]-net=container:db nginx:alpine 本地镜像 'nginx:alpine' 未找到高山:从库/nginx89d9c30c1d48中拉取:已经存在110ad692b782:拉取完成摘要:sha256 :085e84650dbe56f27ca3ed00063a12d5b486e40c3d16d83c4e6c2aad1e4045ab状态:已下载nginx 的新镜像: alpine4f982d745f346a7087c42c55e455448d21794641df7005c4d76299f781ba474f➜ ns W EBPID=$(pgrep nginx | tail -n1)➜ ns echo nginx $WEBPIDnginx 是 21499➜ ns ls -alh /proc/$W EBPID/ns | grep netlrwxrwxrwx 1 101 101 0 Oct 31 09:19 net -> net:[4026533036]➜ ns ls -alh / proc/$DBPID/ns | grep netlrwxrwxrwx 1 polkitd 1000 0 10 月 30 日 19:17 net -> net:[4026533036]Chroot
chroot 是容器进程的独立根 (根/)和chroot --help可以更改当前容器进程的根。正在运行的进程及其子进程可以独立行动。
Cgroups(控制组)
CGroups 技术限制进程的资源消耗。
Secomp/AppArmor
AppArmor 是,Seccomp 描述了进程可以访问系统的哪些部分、限制它可以进行的系统调用以及安装内核模块和文件。 防止权限更改等 /p>
评论前必须登录!
注册