容器

原理
运行
命令行

CMDENTRYPOINT联合使用,ENTRYPOINT 设置执行的命令,CMD传递参数:

信号处理

pin=1:one process per comntainer,只有pid=1可控,init进程、守护进程、祖先、第一个用户态进程、管理、生命周期、信号、docker stop和kill(默认)发送sigterm(正常终止信号缺省行为退出,自定义handler资源清理、等待、sigkill,传播给子进程、优雅),kill -9强制,忽略(sigstop,sigkill除外)+捕获(自定义、sigstop,sigkill除外)+缺省,处理孤儿和回收僵尸进程(dumb-init三方)。

Kill:sig_ignore(内部调用&默认handler&目标为pin=0)则忽略信号,kill -9 1再容器内部不工作。kill 1:如果pin=1实现了堆sigterm的自定义则响应否则不响应。

正常停止容器:pin=1收到sigtrem(缺省行为是释放资源后退出),其他进程收到pin=1发出的sigkill强制结束。自定义pin=1的singterm的hander,向其他进程转发sigterm而非sigkill,资源清理,graceful shutdown。

shell格式:命令行格式、先启动shell再执行服务程序,pin=1线程为shell,sigterm,handler,未提供、等待,sigkill强制退出。exec格式:字符串集合、pin=0线程为目标程序,docker run命令行cmd使用exec格式。

僵尸进程:zombie->exit,结束、资源已释放,占据PID,等待父进程(直接父类)回收(父进程收到子进程结束信号、僵尸不想赢kill信号、wait()、waitpid)、父进程获取子进程退出信息(nginx)、资源泄露(PID)。父进程结束:孤儿进程、收养、init进程。

默认情形下,docker提供一个隐含的entrypoint:“/bin/sh -c”,如果不指定entrypoint,cmd内容就是entrypoint的参数:/bin/sh -c python app.py。Docker 容器的启动进程为 ENTRYPOINT,而不是 CMD。

文件
构建
网络
端口
compose
安全
容器编排