1.程序跟进程
- 程序是静态的
- 进程是动态的
2.容器是一种进程
1 | int pid = clone(main_function, stack_size, CLONE_NEWPID | SIGCHLD, NULL) |
通过Cgroups 技术是用来制造约束的主要手段, 而Namespace 技术则是用来修改进程视图的主要方法
提供6种命令空间:1
2
3
4
5
6PID
Mount
UTS
IPC
Network
User
3.容器中的进程跟宿主机中进程的对应关系
- 在容器中,容器的启动进程在容器里面是1号进程(假init进程)
1
# docker run -it busybox /bin/sh
容器中进程1
2
3PID USER TIME COMMAND
1 root 0:00 /bin/sh
36 root 0:00 ps
- 在宿主机中,如何查看容器的进程呢,进程名其实就是容器的启动进程,比如上面的/bin/sh,通过docker inspect查看容器进程
1
docker inspect xxxx
从中找到status pid就是容器的进程id
我们可以在容器中运行一个top命令,看一下进程的关系
在容器中
top命令是init的子进程
在宿主机上
1 | # pstree -p 2837 |
其中,笔者的容器进程关系是这条1
dockerd-current(2837)─┬─docker-containe(105880)─┬─docker-containe(48506)─┬─sh(48521)───top(50346)
其中2837是dockerd驻留进程,其父进程是1(真正的init进程),进程105880和48506也是docker相关的进程,不是容器进程,
48521是容器进程,50346是top进程
从这可以看出容器里和宿主机上面的进程关系