翻看 Docker 的历史,您会发现 Docker 一直在强调 “Application” 一词,Docker 也希望能为分布式应用提供容器化的解决方案。
从 Docker 化应用软件的生命周期来看,开发工作似乎位于 Docker 的构建之前,而后容器化的测试、部署与运维都与Docker容器息息相关。不得不说,Docker 思维下的应用软件,管理流程与传统场景有着很大的区别。
最大的区别当属:Docker 容器运行环境的封闭性。单一应用的运行,使得容器内部缺少功能丰富的服务。虽然用户可以通过 Docker 的层面,获取部分容器的信息,但是依然无法直接获悉应用内部的状态信息(虽然 Docker 倡导容器运行无状态的应用),比如:应用容器内部持久化的日志文件,应用容器内部的临时存储等等。而这些信息在传统模式下,都可以较为轻易的获取。
为了缓解容器运行环境封闭性带来的使用障碍,Docker 提供了docker exec 命令,方便用户在容器之外让容器执行指定的命令,以实现用户的需求。
今天你 docker exec 了吗?如果还没有的话,灵活穿越容器的感觉你值得拥有;如果有的话,那下面这些内容你不得不看。
1. 容器进程树与 docker exec
随着 Docker 的普及,相信越来越多的 Docker 爱好者已经意识到:
(1)Docker 容器其实就是若干进程构成;
(2)而 “一般情况下” 这些进程呈现出 “树状” 关系;
(3)容器内 pid为1的进程为容器主进程;