持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情
容器
-
GraphDriver
同样可以使用
docker inspect [容器 ID]来查看容器属性。..... "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/ea16bd86de8b3c254a2c1582f77ffd9910485422d837aaa445acba6f71192920-init/diff:/var/lib/docker/overlay2/d6f217c3a337c34b5189700a3f94e521b6bde6b0309119f62abe1b51efb024be/diff:/var/lib/docker/overlay2/990ec90661e0868c1fda29618916e4c5e3143a61394055de6e3f1333de9453fe/diff:/var/lib/docker/overlay2/69c24a49f77b361d64ddf7ce24051acee85d44cf27a62affee17203b9eb82d94/diff", "MergedDir": "/var/lib/docker/overlay2/ea16bd86de8b3c254a2c1582f77ffd9910485422d837aaa445acba6f71192920/merged", "UpperDir": "/var/lib/docker/overlay2/ea16bd86de8b3c254a2c1582f77ffd9910485422d837aaa445acba6f71192920/diff", "WorkDir": "/var/lib/docker/overlay2/ea16bd86de8b3c254a2c1582f77ffd9910485422d837aaa445acba6f71192920/work" }, "Name": "overlay2" }, ......容器也和镜像一样存在LowerDir、MergedDir、UpperDir,并且这些目录能够在宿主机器上直接访问的。
之前构建镜像的dockerfile文件,所做的就是将
demo-gin存放在/app目录下,不出意外的话我们能够在MergedDir目录下看到这个文件。[root@master ~]# ls /var/lib/docker/overlay2/ea16bd86de8b3c254a2c1582f77ffd9910485422d837aaa445acba6f71192920/merged/app demo-gin接着我们进入容器,在容器内执行一些操作,例如在
/app下创建一个文件。[root@master ~]# docker exec -it 4618b0cc2498 /bin/sh /app # ls demo-gin /app # mkdir lomtom /app # ls demo-gin lomtom那么,此时容器内的
/app下存在demo-gin lomtom。我们再在宿主机器上查看merged目录。[root@master ~]# ls /var/lib/docker/overlay2/ea16bd86de8b3c254a2c1582f77ffd9910485422d837aaa445acba6f71192920/merged/app demo-gin lomtom -
Namespace 及 Cgroup
之前已经对docker原理进行讲解,那么对于真实的容器,他的Namespace 及 Cgroup如何查看呢。
首先,找到该容器的进程编号,因为一个容器就是一个进程。
[root@master ~]# ps -aux| grep demo root 23213 0.0 0.0 112676 988 pts/0 S+ 10:33 0:00 grep --color=auto demo root 25199 0.0 0.0 709460 9156 ? Ssl 09:34 0:00 ./demo-gin那么25199就是该容器的进程编号。使用
ls /proc/25199/即可查看该进程下的一些资源信息。[root@master ~]# ls /proc/25199/ attr cgroup comm cwd fd io map_files mountinfo net oom_adj pagemap root sessionid stack status timers autogroup clear_refs coredump_filter environ fdinfo limits maps mounts ns oom_score personality sched setgroups stat syscall uid_map auxv cmdline cpuset exe gid_map loginuid mem mountstats numa_maps oom_score_adj projid_map schedstat smaps statm task wchan其中就包括Namespace即ns。
[root@master ~]# ls /proc/25199/ns/ -l 总用量 0 lrwxrwxrwx. 1 root root 0 4月 21 09:36 ipc -> ipc:[4026532696] lrwxrwxrwx. 1 root root 0 4月 21 09:36 mnt -> mnt:[4026532694] lrwxrwxrwx. 1 root root 0 4月 21 09:34 net -> net:[4026532699] lrwxrwxrwx. 1 root root 0 4月 21 09:36 pid -> pid:[4026532697] lrwxrwxrwx. 1 root root 0 4月 21 10:30 user -> user:[4026531837] lrwxrwxrwx. 1 root root 0 4月 21 09:36 uts -> uts:[4026532695]以及文件资源,即root,是不是验证了与容器中的文件一致
[root@master ~]# ls /proc/25199/root/app/ demo-gin lomtom同样我们进入容器,在
/app,新建一个文件config,并且写入hello world,同样在宿主机器上能够查看内容。/app # echo hello world > config /app # ls config demo-gin lomtom [root@master ~]# cat /proc/25199/root/app/config hello world