尚拙

一个分享技术、学习成长的个人博客网站

0%

本地 Docker 镜像打包与服务器部署流程

本文记录从本地 WSL 2 环境导出 Docker 镜像并部署到阿里云 ECS 服务器的完整操作步骤。


1️⃣ 本地导出镜像

在 Win10/WSL 项目目录下执行:

# 构建镜像(如果尚未构建)
docker compose build

# 导出并压缩镜像
docker save history-server:latest | gzip > history-server.tar.gz

# 查看文件大小
ls -lh history-server.tar.gz

2️⃣ 上传镜像到服务器

# 上传镜像压缩包
scp history-server.tar.gz root@服务器IP:/usr/local/workspace/

# 创建项目部署目录(不与旧服务冲突)
ssh root@服务器IP "mkdir -p /usr/local/workspace/HistoryServerDocker"

上传项目配置文件

即使镜像已包含代码,服务器上仍然需要以下文件来启动容器:

  • compose.yaml(或 docker-compose.yml
  • staticfiles/ 目录(静态文件)
  • 其他配置文件(如 .env

推荐方式:上传完整项目(排除本地虚拟环境和缓存)

# 方式一:scp 上传整个项目(排除不需要的目录)
scp -r ./HistoryServer/ root@服务器IP:/usr/local/workspace/HistoryServerDocker/

# 方式二:用 rsync 同步(更高效,支持排除规则)
rsync -avz --exclude 'venv/' --exclude '__pycache__/' --exclude '.git/' \
./HistoryServer/ root@服务器IP:/usr/local/workspace/HistoryServerDocker/

📌 如果项目已托管在 Git,也可直接在服务器上拉取:

ssh root@服务器IP "cd /usr/local/workspace/HistoryServerDocker && git clone <仓库地址> ."

3️⃣ 服务器加载镜像

登录服务器或在本地执行远程命令:

# 进入工作目录
cd /usr/local/workspace

# 加载镜像(Docker 自动识别 .tar.gz 压缩包,无需手动解压)
docker load -i history-server.tar.gz

# 可选:带进度条的加载方式,作用也是加载镜像,但是可以展示进度
pv history-server.tar.gz | gunzip | docker load


# 验证镜像是否加载成功
docker image ls history-server

加载成功后会看到类似输出:

REPOSITORY          TAG       IMAGE ID       CREATED        SIZE
history-server latest abc123def456 2 hours ago 1.2GB

4️⃣ 清理临时文件

确认镜像存在后,删除压缩包释放磁盘空间:

# 删除服务器上的压缩包
rm -f /usr/local/workspace/history-server.tar.gz

# 本地也可以删掉(按需)
rm -f history-server.tar.gz

5️⃣ 启动服务

cd /usr/local/workspace/HistoryServerDocker

# 使用 compose 启动
docker compose up -d --no-build


📋 命令速查

步骤 命令
构建镜像 docker compose build
导出压缩 docker save 镜像名 | gzip > 文件.tar.gz
上传文件 scp 文件 root@IP:/路径/
加载镜像 gunzip -c 文件.tar.gz | docker load
查看镜像 docker image ls 镜像名
启动容器 docker compose up -d

⚠️ 注意事项

  1. 压缩包格式.tar.gz 可以直接管道给 docker load,无需手动解压。
  2. 项目配置文件:即使镜像已包含代码,compose.yaml、静态文件等仍需要在服务器上存在。
  3. 端口放行:确保阿里云安全组已放行服务使用的端口(如 8080)。
  4. 交换空间:2核2G 服务器建议提前配置交换空间,防止内存不足导致构建或运行中断。