Python + MySQL + Redis 从 Docker Desktop 直接迁移到 Linux Docker CE 的 完整可落地、零修改、生产可用 方案
·
需要复制文件 → 上传服务器 → 一条命令启动,全程不用改代码。
最终部署结构(服务器上)
plaintext
/opt/myapp/
├── docker-compose.yml # 核心编排文件
├── .env # 所有配置(数据库/Redis)
├── app/ # 你的 Python 代码
└── db-init/ # MySQL 初始化 SQL(建库建表)
一、先给你 完整成品文件(直接复制用)
1. docker-compose.yml(生产版)
yaml
version: '3.8'
services:
# Python 应用
python-app:
build: ./app # 从 app 目录构建镜像
restart: always # 崩溃自动重启
env_file: .env # 读取配置
volumes:
- ./app:/app # 代码挂载(开发/调试方便)
ports:
- "8000:8000" # 你的 Python 端口
depends_on:
- mysql
- redis
# MySQL 数据库
mysql:
image: mysql:8.0
restart: always
env_file: .env
volumes:
- mysql_data:/var/lib/mysql # 数据持久化(永不丢)
- ./db-init:/docker-entrypoint-initdb.d # 自动初始化 SQL
ports:
- "3306:3306"
# Redis 缓存
redis:
image: redis:7
restart: always
volumes:
- redis_data:/data # Redis 持久化
ports:
- "6379:6379"
volumes:
mysql_data:
redis_data:
2. .env 配置文件(所有密码都在这里)
env
# ======================
# Python 应用配置
# ======================
APP_PORT=8000
DEBUG=False
# ======================
# MySQL 配置
# ======================
MYSQL_ROOT_PASSWORD=root123456
MYSQL_DATABASE=mydb
MYSQL_USER=myuser
MYSQL_PASSWORD=mypassword
MYSQL_HOST=mysql # 容器内服务名,不用改!
MYSQL_PORT=3306
# ======================
# Redis 配置
# ======================
REDIS_HOST=redis # 容器内服务名,不用改!
REDIS_PORT=6379
REDIS_DB=0
3. 你的 Python 代码里读取配置(零改动兼容)
你原来怎么读 .env,现在还怎么读!
示例(Python 读取 MySQL + Redis):
python
运行
# app/main.py
import os
from dotenv import load_dotenv # 你本地已有的 python-dotenv
import pymysql
import redis
# 直接读取 .env 即可
load_dotenv()
# MySQL 连接
db = pymysql.connect(
host=os.getenv("MYSQL_HOST"),
user=os.getenv("MYSQL_USER"),
password=os.getenv("MYSQL_PASSWORD"),
database=os.getenv("MYSQL_DATABASE")
)
# Redis 连接
r = redis.Redis(
host=os.getenv("REDIS_HOST"),
port=os.getenv("REDIS_PORT"),
db=os.getenv("REDIS_DB")
)
4. MySQL 自动初始化(db-init/init.sql)
sql
-- 第一次启动自动执行
CREATE TABLE IF NOT EXISTS users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT
);
INSERT INTO users (name, age) VALUES ('张三', 20);
二、Linux Docker CE 服务器一键部署步骤
1. 安装 Docker + Compose(Ubuntu 执行)
bash
运行
sudo apt update
sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable docker
sudo systemctl start docker
2. 上传文件到服务器
把你本地的:
docker-compose.yml.envapp/db-init/
全部上传到服务器:
plaintext
/opt/myapp/
3. 进入目录,一条命令启动
bash
运行
cd /opt/myapp
docker compose up -d
4. 查看运行状态
bash
运行
docker compose ps # 看是否都正常运行
docker compose logs -f # 实时日志
三、从 Docker Desktop 迁移数据(1 分钟)
本地导出 MySQL
bash
运行
docker exec 你的本地mysql容器名 mysqldump -u root -p mydb > backup.sql
服务器导入
bash
运行
docker cp backup.sql myapp-mysql-1:/backup.sql
docker exec myapp-mysql-1 mysql -u root -p mydb < backup.sql
四、生产环境必须做的安全设置
bash
运行
# 配置文件权限加固
chmod 600 /opt/myapp/.env
# 防火墙只开放业务端口
ufw allow 8000
五、你只需要记住 4 条命令
bash
运行
docker compose up -d # 启动
docker compose down # 停止(不删数据)
docker compose logs -f # 看日志
docker compose restart # 重启更多推荐


所有评论(0)