Docker Desktop → Docker CE 完整迁移部署方案

全程分为 5 步:环境准备 → 迁移文件 → 部署配置 → 启动验证 → 维护规范。


一、先明确两个环境区别

  • Docker Desktop:开发用(Windows/Mac),自带 Compose
  • Docker CE:Linux 服务器生产环境(CentOS / Ubuntu)
  • 迁移核心 :把你的 docker-compose.yml + .env + 配置文件 + 数据库数据 → 搬到 Linux

二、服务器环境:安装 Docker CE + Docker Compose(标准脚本)

1. 安装 Docker CE(Ubuntu / CentOS 通用)

Ubuntu

bash

运行

复制代码
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker

CentOS

bash

运行

复制代码
sudo yum install -y docker
sudo systemctl enable docker
sudo systemctl start docker

2. 安装 Docker Compose(v2 插件,生产标准)

1. 添加 Docker 官方源(必须做,否则找不到包) curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 2. 更新源 sudo apt update # 3. 安装 Docker + Compose 插件(终于能找到了!) sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin


三、整体迁移思路

  1. 本地 Docker Desktop:导出应用镜像
  2. 传到服务器(Docker CE)
  3. 服务器导入镜像
  4. 上传 docker-compose.yml + .env + 配置文件
  5. 一键启动:Python + MySQL + Redis
  6. 数据库初始化 / 数据迁移

四、最关键:镜像如何迁移(save /load)

步骤 1:本地(Docker Desktop)查看你的镜像名

bash

运行

复制代码
docker images

找到你的 Python 应用镜像,例如:

plaintext

复制代码
my-python-app    latest

步骤 2:本地导出镜像(打包成文件)

bash

运行

复制代码
docker save -o my-python-app.tar my-python-app:latest

会生成一个 my-python-app.tar 镜像包。

步骤 3:把 tar 包传到服务器

用 scp /xftp/rz 都行,示例 scp:

bash

运行

复制代码
scp my-python-app.tar sysadm@你的服务器IP:/opt/myapp/

步骤 4:服务器 Docker CE 导入镜像

bash

运行

复制代码
cd /opt/myapp
docker load -i my-python-app.tar

导入成功后,服务器就有镜像了:

bash

运行

复制代码
docker images

五、服务器完整部署结构

plaintext

复制代码
/opt/myapp/
├── docker-compose.yml   ✔ 编排文件
├── .env                 ✔ 配置
├── my-python-app.tar    ✔ 迁移过来的镜像
└── db-init/             ✔ MySQL初始化脚本

六、docker-compose.yml(最终生产版)

注意:image 直接用你导入的镜像名,不再 build!

yaml

复制代码
version: '3.8'

services:
  python-app:
    image: my-python-app:latest   # 你迁移过来的镜像
    restart: always
    env_file: .env
    ports:
      - "8000:8000"
    depends_on:
      - mysql
      - redis

  mysql:
    image: mysql:8.0
    restart: always
    env_file: .env
    volumes:
      - mysql_data:/var/lib/mysql
      - ./db-init:/docker-entrypoint-initdb.d

  redis:
    image: redis:7
    restart: always
    volumes:
      - redis_data:/data

volumes:
  mysql_data:
  redis_data:

七、.env 配置(直接用)

env

复制代码
# Python
APP_PORT=8000

# MySQL
MYSQL_ROOT_PASSWORD=root123
MYSQL_DATABASE=mydb
MYSQL_USER=myuser
MYSQL_PASSWORD=mypassword
MYSQL_HOST=mysql
MYSQL_PORT=3306

# Redis
REDIS_HOST=redis
REDIS_PORT=6379

八、服务器一键启动

bash

运行

复制代码
cd /opt/myapp
docker compose up -d

查看状态:

bash

运行

复制代码
docker compose ps
docker compose logs -f

九、数据库迁移(Desktop → CE)

本地导出

bash

运行

复制代码
docker exec 本地mysql容器 mysqldump -u root -p mydb > db.sql

服务器导入

bash

运行

复制代码
docker cp db.sql 服务器mysql容器:/db.sql
docker exec 服务器mysql容器 mysql -u root -p mydb < /db.sql

十、你只需要记住的 5 条命令

bash

运行

复制代码
# 本地导出镜像
docker save -o app.tar 镜像名

# 服务器导入镜像
docker load -i app.tar

# 启动
docker compose up -d

# 查看日志
docker compose logs -f

# 停止
docker compose down

想直接执行 SQL 语句(不进入交互界面)

docker-compose exec mysql mysql -u root -p

SHOW DATABASES;

USE 你的数据库名;

SHOW TABLES;

docker-compose down -v

docker-compose up -d

mysql -u root -p testdb < 1.sql

TRUNCATE TABLE 表名;

TRUNCATEDELETE 快很多,直接清空数据,重置自增 ID。

top

sudo apt install htop -y

htop

df -h

sudo docker compose -f docker-compose-Pro.yml up -d

sudo docker compose exec mysql mysql -u root -p r

docker-compose exec -T mysql mysql -u root -p csai_sales < /home/sysadm/scripts/update_database_users.sql

pandoc -f docx -t markdown Manual_Part1.docx -o Manual_Part1.md

3 种最简解决方案(微服务 / 部署通用)

方案 1(推荐):Nginx 统一反向代理

只留一个对外端口,例如统一 80 / 443

  • 前端:/
  • 后端接口:/api

浏览器看起来:全程同一个端口,无跨端口、无跨域。


方案 2:后端开启 CORS 跨域允许

在 8004 后端服务,配置允许前端端口跨域访问,放行浏览器跨端口请求。


方案 3:前端不要写死 :8004 绝对地址

改用相对路径,不走完整 IP + 端口,自动同源。

相关推荐
蝎子莱莱爱打怪5 天前
XZLL-IM干货系列 04|Netty 长连接实战:Pipeline 怎么排、心跳怎么跳、连接怎么管
后端·微服务·面试
SamDeepThinking6 天前
Java微服务练习方式
java·后端·微服务
米丘9 天前
微前端之 Web Components 完全指南
微服务·html
霸道流氓气质12 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
霸道流氓气质12 天前
Spring Boot 微服务性能优化完全指南
spring boot·微服务·性能优化
地瓜伯伯12 天前
从MESI缓存一致性协议讲透synchronized的底层
java·spring boot·spring·spring cloud·微服务·springcloud
Devin~Y12 天前
大厂 Java 面试实录:从音视频内容社区到 AI RAG 的全链路技术设计
java·spring boot·redis·spring cloud·微服务·kafka·音视频
递归尽头是星辰12 天前
AI 访问数据仓库:从直连到微服务化
数据仓库·人工智能·微服务·dataagent·ai数据治理
就改了13 天前
Windows 环境 SkyWalking 完整实操教程
windows·微服务·skywalking
至乐活着13 天前
Docker Compose多服务编排实战:从零搭建Node.js+MySQL+Redis全栈应用
docker·微服务·devops·容器编排·compose