今天犯了一个错误,犯这个错误的原因是没有理解 docker 的设计哲学,大概花了 3 个小时来折腾一个事情。
起因
一个容器没有安装 python 的一些依赖库,我在容器里面安装了依赖库,不想每次都安装这些依赖库,所以我想把这个容器保存成新的镜像。
错误的方法
有两种方式来解决这个问题。
方式一,构建新的 Dockerfile。
方式二,对一个正在运行的容器,通过 commit 来创建新的镜像。
反思
我选择了方式二,我把容器当虚拟机使了,这是没有理解 Docker 设计的哲学。
找了一文章,这文章总结的很好,有利于我去了解 docker 的设计哲学,我就把他翻译在下面。
使用 Docker 不要做的几件事情
所以你最终屈服于容器,发现它们解决了很多问题并且有很多优势:
- 第一:容器是不可变的——操作系统、库版本、配置、文件夹和应用程序都包含在容器中。您保证在 QA 中测试过的相同镜像将以相同的行为到达生产环境。
- 第二:容器是轻量级的——容器的内存占用很小。容器将只为主进程分配内存,而不是数百或数千 MB。
- 第三:容器速度快——您可以像启动典型的 Linux 进程一样快地启动容器。您可以在几秒钟内启动一个新容器,而不是几分钟。
然而,许多用户仍然像对待典型的虚拟机一样对待容器,而忘记了容器有一个重要的特性:容器是一次性的。
“容器是短暂的”。
这种特性迫使用户改变他们应该如何处理和管理容器的思维方式;我将解释您不应该做的事情以继续发挥容器的最大优势: