我试图围绕Docker架构,特别是弄清楚基本图像究竟是什么,并且我正在探索在docker hub上找到的一些图像。特别是在查看以下repo时,它会引用centos-7.2.1511-docker.tar.xz
file。
我已经下载并检查了tar的内容,它有典型的Linux文件系统。
据我了解,这不是一个完整的Linux操作系统,只是一个linux文件系统的副本,删除了所有非必需品?在运行容器时从主机操作系统中提取所有其他要求(?)
我的问题基本上归结为如何创建该tar文件?你究竟需要什么?我的目的不是创建一个,而是了解文件/数据/依赖项的哪一部分来自目标操作系统以创建映像以及在主机操作系统上使用的内容
答案 0 :(得分:2)
Docker容器是一组进程,在主机内核之上运行由Linux命名空间启用的沙箱。
Docker镜像是一组图层,通常只是tarball,是解压缩的文件,并且在用于启动容器时看起来好像它们是文件系统的根。
Docker镜像可能只是一个静态链接的可执行文件!您可以从头开始创建自己的Docker镜像,只需创建一个可执行文件的tarball,并将其提供给docker load
,它将其作为适当的内部格式存储并将其注册为图像。
正如您所看到的,Docker镜像不需要太多。它当然不需要内核,或者通常用于配置系统,网络守护进程甚至是cron之类的任何组件。这些都留给主持人。
图像中通常可用的东西是动态库运行时,以及/etc/hosts
,/etc/resolv.conf
等文件以及libc直接引用的其他文件。这允许您添加与系统交互的典型动态链接可执行文件,就像它们在传统操作系统上运行一样。
我已成功" Dockerized"通过卸载尽可能多的软件包,然后tar
- 升级文件系统(不包括/proc
,/sys
,/dev
等目录,构建基于CentOS 6的传统VM。 )并通过docker load
加载。之后,我开始了一个容器,并且(有时强制地)移除了额外的"系统"在Docker镜像中没有用处的包,如kernel,udev等。
此博客文章介绍了docker load
的一些细节: