Docker镜像制作
·
一、简介
将容器的文件系统打包成tar文件,也就是把正在运行的容器直接导出为tar包的镜像文件,便于迁移便于复制。
1.1 两种方式
1.1.1 运行容器,打包成文件,便于迁移
- 导出的 tar 包是 纯净的文件系统打包,不包含 Docker 镜像的分层结构、镜像元数据、容器的环境变量、端口映射、挂载配置等信息;
- 对容器状态无要求:运行中的容器、已经停止的容器,都可以被 export 导出;import导入。
- 导出的文件体积偏小,因为只打包「容器最终的文件系统」,不会冗余存储镜像的分层数据。
1.1.2 运行的容器,直接做成镜像,便于本地二次使用
二、容器系统打包export
将容器的文件系统导出为tar归档文件(扁平化,仅保留当前文件系统状态,无镜像层,元数据)
2.1 export和import的打包示范
export对当前的容器状态建立快照,并持久化为tar文件
docker export 存出镜像时,是不保存历史镜像层信息的;
import导入打包的容器;
(最好使用两台服务器,此处我用一台服务器给大家演示)
2.1.1 查看当前运行的容器信息
# 只看运行的容器信息
docker ps

2.1.2 选择容器进行打包
# -o 就是output的意思
docker export -o <自定义tar包名> 容器ID

我们把前面打包的这个运行容器删除掉

2.2 导入打包容器
import(export的黄金搭档) 从一个tar归档包(就是export导出的包)中导入文件内容,创建一个全新的Docker文件系统镜像;
2.2.1 导入打包容器
docker import <tar的存放路径> <new 镜像 name>

给容器镜像更名,清理了不需要的镜像名

docker run -it --name <new_docker_name> 镜像名 /bin/bash

三、容器创建镜像 commit
镜像文件除了打包这种方法,还可以用容器实例,直接转为镜像。将一个容器的当前状态(文件系统 + 运行配置)提交为一个新的Docker镜像,本质是基于容器的修改创建的镜像层。
3.1 commit的打包示范
# 查看正在运行的容器
docker ps
# 附着其中一个容器内部
docker attach 容器ID
# 添加自定义内容然后按ctrl+p+q退出
# 生成容器并查询
docker commit 运行的容器ID 新的镜像名

运行并验证

四、镜像迁移save&load
保存一台宿主机上的镜像为tar文件,然后可以导入到其他的宿主机上;将一个/多个Docker镜像打包成tar归档文件(包含镜像的所有层、标签,元数据)
4.1 将镜像打包
docker save <打包的文件> 镜像名

4.2 通过load命令导入
# 先删除之前打包的镜像
docker rmi 镜像名
docker load < 前面save打包的文件

五、save/export/commit的区别
- commit 容器→新镜像(存本地),适合临时固化容器修改;
- save:镜像→tar包(含完整信息),适合镜像备份/迁移;
- export:容器→tar包(仅文件系统),适合导出容器的最终文件内容。

六、通过Dockerfile创建镜像
6.1 创建工作目录
mkdir 工作目录
cd 工作目录

6.2 创建Dockerfile文件
# 必须使用Dockerfile
vim Dockerfile
![]()
6.3 遍历Dockerfile文件
镜像源
作者信息
上下文操作

6.4 构建镜像文件
# 注意最后的那个点点点
docker build -t 镜像名 .


运行验证一下

dockerfile的优化建议:
- RUN 命令要尽量写在一条里,每次 RUN 命令都是在之前的镜像上封装,只会增大不会减小
- 每次进行依赖安装后使用yum clean all清除缓存中的rpm头文件和包文件
- 选择比较小的基础镜像,比如:alpine
更多推荐
所有评论(0)