docker - 容器镜像打包
镜像保存与载入
将镜像打包成 tar 包
# 保存镜像,使用镜像 id 保存,这个操作会丢失版本号和镜像名称(变成 null)
docker save [image_id] -o [filename]
# 保存镜像,个人推荐这么打包
docker save [image]:[tag] -o [image]:[tag].tar
docker save [image]:[tag] gzip -o [image]:[tag].tar.gz
# 示例 :
docker save registry:latest -o registry_latest.tar
# 或
docker save registry:latest > registry_latest.tar
# 其中 -o 和 > 表示输出到文件,
# 可以用比较熟悉的代码做测试,比如 tomcat。
加载 tar 包形成镜像
# 加载镜像文件
docker load -i [images.tar]
# 解压并加载镜像
gunzip -c 文件名.tar.gz | docker load
# 批量安装 tar 镜像,会递归子级文件夹
find [path] -name '*.tar.*' -exec docker load -i {} \;
# 批量安装 tar 镜像
for i in ./*;do docker load -i $i;done;
# 示例:
docker load -i registry_latest.tar
# 或
docker load < nginx.tar
# 其中 -i 和 < 表示从文件输入。
将容器做成镜像
镜像id 新的镜像名字:标签
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
docker commit [container_id] [image]:[tag]
# 例如
docker commit -a 'author' -m 'msg' 13f26d6e7247 rabbit-mq:v1
docker commit -p 6fd1775e7dd0 postgres-backup1
export 和 import 命令
# 导出容器,注意:export导出的是容器,不是镜像。
docker export [container_id] -o [filename]
# 导入容器为镜像import
cat [filename] |docker import - [image]:[tag]
# 样例:运行镜像,注意结尾这一段 /entrypoint.sh
docker run --name mysql5 -e MYSQL_ROOT_PASSWORD=root -d -p 3306:3306 mysql:5.6.28 /entrypoint.sh [image]:[tag]
# 注意:运行导入的镜像的时候必须带 command,否则启动报如下错误:
# FATA[0000] Error response from daemon: No command specified
# 具体的 command 需要在导出容器的时候通过docker ps查看到。
export 和 commit 的区别
这两个命令都能备份容器,那么有什么区别呢?
这些信息整理自于网络,没有在生产下实际操作过,目测使用 commit 会比较稳妥。
- docker export 不会保存容器的历史记录和元数据。
这意味着在导出后,容器的镜像层信息将丢失。
这使得导出的 tar 文件更加紧凑,但也导致了一些功能的损失。 - docker commit 用于将对一个容器所做的更改保存为一个新的镜像。
当您修改容器(例如,安装软件或更改配置)后,镜像中会包含这些修改信息。
docker commit 会保留容器的历史记录和元数据。
疯狂的妞妞 :每一天,做什么都好,不要什么都不做!