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 + 端口,自动同源。

相关推荐
胡小禾4 小时前
Nacos隔离机制
微服务
星梦清河9 小时前
微服务-01
微服务·云原生·架构
旷世奇才李先生20 小时前
Spring Cloud Alibaba 2026实战:微服务治理全解析
微服务·云原生·架构
LSL666_1 天前
什么是微服务
微服务·云原生·架构
快乐非自愿1 天前
AI 赋能微服务工程化:Surging Engine-CLI 的插件化 Agent 架构革新
人工智能·微服务·架构
喜欢流萤吖~1 天前
负载均衡器:微服务的流量分发中枢
微服务·负载均衡
青槿吖1 天前
第二篇:从复制粘贴到自定义规则!Spring Cloud Gateway 断言 + 过滤全玩法,拿捏微服务流量管控
java·spring boot·后端·spring cloud·微服务·云原生·架构
one_love_zfl1 天前
java面试-微服务篇
java·微服务·面试
aXin_ya1 天前
微服务 第五天 (elasticsearch基础)
elasticsearch·微服务·架构