本文介绍了docker中的容器,并介绍了什么是基于操作系统的容器。
Processes)容器是一个具有指定配置的Linux进程。我们执行以下操作:
# #启动一个redis进程~ Docker run -D--name = dbredis:alpine # #显示容器运行的进程~ Docker Top DB PID用户时间命令2288 999 0: 00 Redis-server##检查系统中是否有Redis-server进程~ psaux | greredis -server Donggang 10761 0 . 0 . 0 4258876 200 s07r+6:57PM 0:00.00 grep --colorLinux基于文件系统,进程信息存储在/proc目录中。每个进程对应一个目录,对应的目录位置可以通过进程ID得到。
# #设置DBPID变量方便后续测试~ DBPID = $(pgrep redis -server)~ echo redis $ DBPID redis 6950 # #找到对应的进程目录文件, 此容器的相关配置保存在此目录中~ ls/proc/$ DBPIDattr cmdline environ io mem ns page map sched stack task auto group comm exe limits mount info numa _ maps patch _ state schedstat stat timer saxv core dump _ filter FD loginuid mounts oom _ adj personality session id stat uid _ mapcgroup uset fdinfo map _ files mount stats oom _ score projid _ map set groups sta Tuswchanclear _ refscwdgid _ map maps netoom _ score _ adjroot smaps 通过docker api,➜获取~ docker exec -it db env path =/usr/local/sbin:/usr/local/bin:/usr/sbin:/bin hostname = a1 F8 a 38 c 84d 4 term = xtermredis _ version = 5 . 0 . 6 redis _ download _ URL = http://download . redis . io/releases/redis -5 . 0 . 6 . tar . gzredis _ download _ sha = 6624844
有以下几种命名空间:Mount(mnt)、进程ID(pid)、Network(net)、进程间通信(ipc)、UTC(主机名)、UserId(用户)和控制组(cgroup)。关于Linux的namspace的介绍搬到了https://en.wikipedia.org/wiki/Linux_namespaces.
## bash运行在“沙盒”上~ sudo unshare --fork --PID --mount -proc bash ##打印进程信息[root @ master ~]# pspidtty time cmd 1 pts/0 00:00:00:00 bash 12 pts/00:00:00 PS[root @ master ~]# Exit # #退出沙盒# #打印进程信息~ PS PID TTY Tim cmd 4673 pts/0 00:00:00 zsh 9088 pts/00:其中正在执行的进程不共享诸如父进程的Pid之类的名字空间。
Namespace本质上还是一个文件,存储在磁盘里,所以可以共享。工具nsenter可以在指定的命名空间中运行程序。
# #获取容器db ~ LS -LHA/Proc/$ DB PID/NS总使用量0dR-x--X2Polki TD 1000年10月30日19: 17。DR-XR-XR-x9 polki TD 1000 10月30日19: 17...IPC:[4026533033]lrwxrwx 1 polki TD 1000 0年10月30日19:18 mnt ->:MNT:[4026533031]lrwxrwx 1 polki TD 1000 0年10月30日19:17 net ->;net:[4026533036]lrwxrwx 1 polki TD 1000 0年10月30日19:18 PID ->:PID:[4026533034]lrwxrwx 1 polki TD 1000 0年10月30日19: 18 User->:用户:[4026531837]lrwxrwx 1 polki TD 1000 0年10月30日19:18 UTS ->:Uts:[402653333共享命名空间,在下面的例子中,我们创建一个web容器,它共享db容器的网络命名空间。
➜ns docker run -d --name = web --net = container:db nginx:alpine找不到图片& # 39;nginx:阿尔卑斯& # 39;locallyalpine:正在从库/ nginx89d9c30c1d48中提取:已存在110ad692b782:提取完成摘要:sha 256:085 e 84650 DBE 56 f 27 ca 3 ed 00063 a 12 D5 b 486 e 40 c 3d 16d 83 C4 E6 C2 aad 1 e 4045 abstatus:已下载nginx:alpine4f982d745f346a7087c42c55e455448d21794641df7005c4d76299f781ba474f➜的较新图像ns web PID = $(pgrep nginx | tail -n1)ns echo nginx is $ web pidgin is 214999net:[4026533036]ns ls-alh/proc/$ dbpid/ns | grep net lrwxrwxrwx 1 polkit 1000 0年10月30日19:17 net ->;Net:[4026533036]ChrootChroot可以是容器进程有独立的根目录(root directory/),chroot--help可以改变当前运行进程及其子进程的根目录。Chroot不能起到隔离的作用,仍然可以通过相对路径访问新根以外的地址。
Cgroups(控制组)CGroups技术限制进程消耗资源,
Secomp/AppArmorAppArmor描述了一个进程可以访问系统的哪些部分。Sec提供了一些功能,例如限制可以进行哪些系统调用、防止安装内核模块或更改文件权限。
评论前必须登录!
注册