Docker 镜像导出
约 881 字大约 3 分钟
2025-09-23
导出 Docker 镜像为文件
docker images
# 输出示例
# REPOSITORY TAG IMAGE ID
# yumengjh/mynestapp 1.0.0 a458d16cc32a使用 docker save
docker save -o mynestapp_1.0.0.tar yumengjh/mynestapp:1.0.0-o指定输出文件- 文件会生成在当前目录,大小就是镜像大小(通常几十 MB 到几百 MB)
.tar文件可以直接存储到硬盘、移动盘、OneDrive、NAS 等
压缩文件(可选)
Docker 镜像通常比较大,可以用 gzip 压缩:
docker save yumengjh/mynestapp:1.0.0 | gzip > mynestapp_1.0.0.tar.gz- 减少存储空间
- 传输更方便
导入镜像文件
当你在另一台机器或者同一台机器恢复镜像时:
# 如果是 tar
docker load -i mynestapp_1.0.0.tar
# 如果是压缩包
gunzip -c mynestapp_1.0.0.tar.gz | docker load导入完成后,使用 docker images 就能看到镜像
可以像普通镜像一样 docker run
使用导出的镜像
docker run -d -p 3000:3000 yumengjh/mynestapp:1.0.0镜像不依赖仓库
可以随时在离线环境部署
注意事项
- 镜像大小
- 大镜像(几百 MB 或 GB)导出和导入都要时间
- 可以多阶段构建减小镜像大小
- 版本管理
- 文件名最好带上版本号,方便管理
- 例如:
mynestapp_1.0.0.tar、mynestapp_1.0.1.tar
- 安全性
- 导出的镜像文件中包含完整镜像内容,确保不要随意外泄
镜像一键部署脚本
检测系统是否安装 Docker,没有就安装(兼容 Debian/Ubuntu)
自动加载同目录下的镜像 .tar 文件
创建并运行容器,绑定端口,配置重启策略
人性化中文提示、容错处理、避免重复操作
文件名:run_mydocker.sh
#!/bin/bash
# =========================================
# 0基础友好Docker镜像运行脚本
# 使用方法: 把镜像tar文件和本脚本放在同一目录, chmod +x run_mydocker.sh, ./run_mydocker.sh
# =========================================
IMAGE_FILE="mynestapp_1.0.0.tar" # 镜像文件名,可修改
CONTAINER_NAME="mynestapp"
HOST_PORT=3000 # 映射宿主机端口,可修改
CONTAINER_PORT=3000 # 容器内部端口
RESTART_POLICY="always" # 重启策略
# ---------- 中文提示 ----------
echo "======================================"
echo "欢迎使用 Docker 镜像快速部署脚本"
echo "本脚本会自动检测Docker、加载镜像并运行容器"
echo "======================================"
# ---------- 检测 Docker ----------
if ! command -v docker &>/dev/null; then
echo "检测到系统未安装 Docker,正在安装..."
# Debian/Ubuntu安装流程
apt-get update
apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://get.docker.com | sh
if [ $? -ne 0 ]; then
echo "Docker 安装失败,请检查网络或权限!"
exit 1
fi
echo "Docker 安装完成!"
else
echo "检测到 Docker 已安装,跳过安装"
fi
# ---------- 检查镜像文件 ----------
if [ ! -f "$IMAGE_FILE" ]; then
echo "未找到镜像文件 $IMAGE_FILE,请确保脚本与镜像在同一目录"
exit 1
fi
# ---------- 加载镜像 ----------
echo "正在加载镜像 $IMAGE_FILE ..."
docker load -i "$IMAGE_FILE"
if [ $? -ne 0 ]; then
echo "镜像加载失败!请检查文件是否完整"
exit 1
fi
echo "镜像加载完成!"
# ---------- 检查容器是否已存在 ----------
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
echo "检测到容器 $CONTAINER_NAME 已存在,尝试删除..."
docker stop $CONTAINER_NAME &>/dev/null
docker rm $CONTAINER_NAME &>/dev/null
echo "旧容器已删除"
fi
# ---------- 运行容器 ----------
echo "正在启动容器 $CONTAINER_NAME ..."
docker run -d \
--name $CONTAINER_NAME \
-p $HOST_PORT:$CONTAINER_PORT \
--restart=$RESTART_POLICY \
$IMAGE_FILE
if [ $? -ne 0 ]; then
echo "容器启动失败,请检查端口是否被占用"
exit 1
fi
echo "容器 $CONTAINER_NAME 启动成功!"
echo "访问方式: http://<服务器IP>:$HOST_PORT"
echo "脚本执行完毕"把 run_mydocker.sh 和导出的镜像 mynestapp_1.0.0.tar 放在同一目录
给脚本执行权限:
chmod +x run_mydocker.sh执行脚本:
sudo ./run_mydocker.sh脚本会自动安装 Docker(如果未安装)、加载镜像、运行容器,并设置 开机自启