Dockerfile:镜像构建
Docker File
Docker 镜像原理
思考:
- Docker 镜像本质是什么?
- Docker 中一个 centos 镜像为什么只有 200MB,而一个 centos 操作系统的 iso 文件要几个 G ?
- Docker 中一个 tomcat 镜像为什么有 500MB,而一个 tomcat 安装包只有 70 多 MB ?
操作系统组成:
- 进程调度子系统
- 进程通信子系统
- 内存管理子系统
- 设备管理子系统
- 文件管理子系统
- 网络通信子系统
- 作业控制子系统
Linux 文件系统由 bootfs 和 rootfs 两部分组成:
- bootfs:包含 bootloader(引导加载程序)和 kernel(内核)。
- rootfs:root 文件系统,包含的就是典型 Linux 系统中的 /dev,/proc,/bin,/etc 等标准目录和文件。
- 不同的 linux 发行版,其 bootfs 基本一样,而 rootfs 则不同,如 ubuntu,centos 等。
Docker 镜像:
- Docker 镜像是由特殊的文件系统叠加而成。
- 最底端是 bootfs,其使用的是宿主机的 bootfs 。
- 第二层是 root 文件系统rootfs,称为 base image 。
- 再往上可以叠加其他的镜像文件。
- 统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
- 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像。
- 当从一个镜像启动容器时,Docker 会在最顶层加载一个读写文件系统作为容器。
总结:
- Docker 镜像本质是什么?
- 是一个分层文件系统。
- Docker 中一个 centos 镜像为什么只有 200MB,而一个 centos 操作系统的 iso 文件要几个 G ?
- Centos 的 iso 镜像文件包含 bootfs 和 rootfs,而 docker 的 centos 镜像复用操作系统的 bootfs,只有 rootfs 和其他镜像层。
- Docker 中一个 tomcat 镜像为什么有 500MB,而一个 tomcat 安装包只有 70 多 MB ?
- 由于 docker 中镜像是分层的,tomcat 虽然只有 70 多 MB,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的 tomcat 镜像大小 500 多 MB 。
Dockerfile
镜像制作
Docker 镜像如何制作?
- 方法一:容器转为镜像
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load –i 压缩文件名称
- 方法二:使用 Dockerfile
Dockerfile 概念
什么是 Dockerfile ?
- Dockerfile 是一个文本文件,包含了一条条的指令。
- 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像。
- 对于开发人员:可以为开发团队提供一个完全一致的开发环境。
- 对于测试人员:可以直接拿开发时所构建的镜像或者通过 Dockerfile 文件构建一个新的镜像开始工作。
- 对于运维人员:在部署时,可以实现应用的无缝移植。
- 官方 Dockerfile 文件参考: