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 会比较稳妥。

  1. docker export 不会保存容器的历史记录和元数据。
    这意味着在导出后,容器的镜像层信息将丢失。
    这使得导出的 tar 文件更加紧凑,但也导致了一些功能的损失。
  2. docker commit 用于将对一个容器所做的更改保存为一个新的镜像。
    当您修改容器(例如,安装软件或更改配置)后,镜像中会包含这些修改信息。
    docker commit 会保留容器的历史记录和元数据。

posted on 2024-05-20 22:19  疯狂的妞妞  阅读(40)  评论(0编辑  收藏  举报

导航