Docker 镜像是一个只读的模板,它包含了创建 Docker 容器所需的所有文件和配置信息。可以把它类比成:
- 面向对象编程中的“类”:镜像是“类”,容器是这个“类”的“实例”。
- 虚拟机的安装光盘(.iso 文件):镜像是光盘,容器是安装好并正在运行的虚拟机系统。
1、本质上是一系列的文件
一个 Docker 镜像,从静态视角看,就是一个打包好的、压缩的文件夹。这个文件夹里包含了运行一个特定应用所需的一切:
- 操作系统的部分根文件系统(如 /bin, /lib, /usr 等,但比完整 OS 小得多)。
- 你的应用程序代码(如 /app/my_server.py)。
- 应用程序的依赖(如 /usr/local/lib/python3.9/site-packages/ 里的库)。
- 配置文件(如 /etc/nginx/nginx.conf)。
- 环境变量。
- 默认的启动命令。
当执行 docker save -o my_image.tar my-app:latest 时,能得到一个 .tar 压缩包。解压这个包,会看到里面的确 就是一系列按层级组织的目录和文件。这证明了镜像的本质就是文件集合。
2、联合文件系统UnionFS
分层的文件系统,将多个物理上独立的目录(称为层)合并成一个统一的视图。
想象一下Photoshop的图层:
- 你有一张背景层(基础镜像,如 ubuntu)。
- 然后在上面加一个文本层(通过 RUN apt-get update 安装了一些软件)。
- 再在上面加一个图片层(通过 COPY . /app 复制了你的代码)。
最终你看到的完整图片,就是所有这些图层叠加在一起的效果。
分层的好处:
- 共享和节省空间:Image A 和 Image B 都基于 ubuntu:latest,那么宿主机上只存有一份 ubuntu:latest 的层。
- 快速构建和部署:构建镜像时,每一层都可以被缓存。如果你只修改了代码层(最上面一层),那么下面所有层(如安装依赖的层)都可以直接用缓存,无需重新执行,构建速度极快。
- 镜像最小化:你可以从一个极小的基础层(如 alpine)开始,只添加应用必需的层。
docker镜像常用命令:
|
命令 |
描述 |
|
docker images |
列出本地主机上的所有镜像。 |
|
docker pull |
从镜像仓库(如 Docker Hub)拉取一个镜像到本地。 |
|
docker build |
根据 Dockerfile 构建一个新的镜像。 |
|
docker push |
将本地的镜像推送到镜像仓库。 |
|
docker rmi |
删除本地的一个或多个镜像。 |
|
docker tag |
给镜像打一个新的标签。 |
|
docker history |
查看一个镜像的构建历史(各层信息)。 |
|
docker save |
将镜像保存为一个 tar 归档文件,用于备份或迁移。 |
|
docker load |
从 tar 归档文件加载镜像。 |
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...


