Docker容器应用打包与运行全解析
1. 临时容器与镜像状态问题
在使用Docker时,我们会遇到一些有趣的现象。比如在浏览容器内运行的IIS响应页面时,页面显示的主机名(实际为容器ID)与我们实际的容器ID不一致。这是因为Docker在构建镜像时,每条构建指令都会在临时的中间容器中执行。
以生成HTML的RUN指令为例,它在临时容器中运行,PowerShell脚本会将该临时容器的ID作为主机名写入HTML文件。虽然这个中间容器随后会被Docker移除,但它创建的HTML文件会被持久化到镜像中。这就导致从该镜像运行的所有容器都会显示HTML文件中保存的相同主机名,因为镜像在所有容器间是共享的。
不过,我们也可以在单个容器中存储状态,这些状态不属于镜像,因此不会在容器间共享。接下来,我们将深入探讨Docker中数据的处理方式。
2. Docker镜像与容器中的数据处理
Docker容器中的应用程序会看到一个单一的文件系统,它们可以像在操作系统中一样进行读写操作。但实际上,这是一个虚拟文件系统,其底层数据可能存储在多个不同的物理位置。
容器C盘可访问的文件可能存储在镜像层、容器自身的存储层或映射到主机特定位置的卷中。Docker会将这些位置合并为一个虚拟文件系统。
2.1 层与虚拟C盘的数据
虚拟文件系统使Docker能够将一组物理镜像层视为一个逻辑容器镜像。镜像层在容器的文件系统中以只读方式挂载,因此不能被修改,这使得它们可以被多个容器安全共享。
每个容器在所有只读层之上都有自己的可写层,这样每个容器都可以修改自己的数据而不影响其他容器。以下是一个简单的
超级会员免费看
订阅专栏 解锁全文
863

被折叠的 条评论
为什么被折叠?



