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

相关推荐
安当加密11 小时前
AES-256直接加密就够了?微服务架构下的敏感数据加密:信封加密、格式保留加密和字段级加密全解析
微服务·云原生·架构
您^_^12 小时前
专家(一):Claude Code 微服务实战——6 个服务从拆分到 K8s 部署,$0.45 全套 YAML 照抄
人工智能·windows·微服务·架构·kubernetes·个人开发·claude code
xingfujie14 小时前
第2章:服务器规划与基础环境配置
linux·运维·微服务·云原生·容器·kubernetes·负载均衡
xingfujie15 小时前
前言:从零到一,系统掌握 K8s + DevOps + 微服务
linux·运维·微服务·云原生·容器·kubernetes·devops
珠海西格电力1 天前
零碳园区的能源供给成本主要包括哪些方面?
大数据·分布式·微服务·架构·能源
Sunnyingx2 天前
从微服务到多智能体:架构演进的连续性思考
微服务·系统架构·aigc
總鑽風2 天前
单点登录sso 微服务加网关gateway
java·微服务·gateway·jwt·单点登录
Ting-yu2 天前
SpringCloud快速入门(3)---- 创建微服务项目
java·spring cloud·微服务
covco2 天前
全域矩阵运营系统多租户权限体系架构设计与轻量化落地实践
微服务·矩阵·权限管控
2501_912784082 天前
告别“汗水出海”:基于微服务架构的跨境电商系统设计与实现——以Taocarts为例
微服务·云原生·架构·taocarts