全程分为 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
三、整体迁移思路
- 本地 Docker Desktop:导出应用镜像
- 传到服务器(Docker CE)
- 服务器导入镜像
- 上传 docker-compose.yml + .env + 配置文件
- 一键启动:Python + MySQL + Redis
- 数据库初始化 / 数据迁移
四、最关键:镜像如何迁移(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 表名;
TRUNCATE 比 DELETE 快很多,直接清空数据,重置自增 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 + 端口,自动同源。