mirror of
https://github.com/SeanChang/xuanyuan_docker_proxy.git
synced 2026-10-07 12:58:54 +08:00
279 lines
6.8 KiB
Markdown
279 lines
6.8 KiB
Markdown
# 手把手教你用 Docker 部署 Python
|
||
|
||

|
||
|
||
*分类: Docker部署教程 | 标签: python,docker,部署教程 | 发布时间: 2025-10-03 07:06:23*
|
||
|
||
> 本文介绍了通过Docker部署Python的全流程,包括从轩辕镜像查看、下载Python镜像(含多种拉取方式),到以快速部署、挂载本地项目、docker-compose管理三种方式部署容器,还涵盖安装第三方库、构建自定义镜像的进阶实践及常见问题解决办法。
|
||
|
||
## 🧰 准备工作
|
||
|
||
若你的系统尚未安装 Docker,请先一键安装:
|
||
|
||
### Linux Docker & Docker Compose 一键安装
|
||
|
||
一键安装配置脚本(推荐方案):
|
||
该脚本支持多种 Linux 发行版,支持一键安装 Docker、Docker Compose 并自动配置轩辕镜像访问支持源。
|
||
|
||
```bash
|
||
bash <(wget -qO- https://xuanyuan.cloud/docker.sh)
|
||
```
|
||
|
||
|
||
备用地址:
|
||
|
||
```bash
|
||
bash <(wget -qO- https://get.xuanyuan.me/docker.sh)
|
||
```
|
||
---
|
||
|
||
### 手把手教你用 Docker 部署 Python
|
||
Python 是一门应用广泛的语言,常见于数据分析、AI、Web 开发等场景。通过 Docker 部署 Python,可以做到快速安装、环境隔离、跨平台运行。下面我们基于 **轩辕镜像** 来完整演示 Python 在 Docker 中的部署方法。
|
||
|
||
#### 1、查看 Python 镜像详情
|
||
你可以在 轩辕镜像 中找到 Python 镜像页面:
|
||
👉 https://xuanyuan.cloud/r/library/python
|
||
|
||
在镜像页面中,会看到多种拉取方式,下面我们逐一说明。
|
||
|
||
#### 2、下载 Python 镜像
|
||
##### 2.1 使用轩辕镜像拉取
|
||
```bash
|
||
docker pull docker.xuanyuan.run/library/python:3.12
|
||
```
|
||
|
||
##### 2.2 拉取后改名
|
||
```bash
|
||
docker pull docker.xuanyuan.run/library/python:3.12 \
|
||
&& docker tag docker.xuanyuan.run/library/python:3.12 python:3.12 \
|
||
&& docker rmi docker.xuanyuan.run/library/python:3.12
|
||
```
|
||
这样后续就可以直接用官方标准名 `python:3.12`。
|
||
|
||
##### 2.3 使用免登录方式拉取(推荐)
|
||
```bash
|
||
docker pull xxx.xuanyuan.run/library/python:3.12
|
||
```
|
||
带重命名的完整命令:
|
||
```bash
|
||
docker pull xxx.xuanyuan.run/library/python:3.12 \
|
||
&& docker tag xxx.xuanyuan.run/library/python:3.12 python:3.12 \
|
||
&& docker rmi xxx.xuanyuan.run/library/python:3.12
|
||
```
|
||
|
||
##### 2.4 官方直连方式
|
||
如果网络能直连 Docker Hub,可以直接:
|
||
```bash
|
||
docker pull python:3.12
|
||
```
|
||
|
||
##### 2.5 查看是否拉取成功
|
||
```bash
|
||
docker images
|
||
```
|
||
输出类似:
|
||
```
|
||
REPOSITORY TAG IMAGE ID CREATED SIZE
|
||
python 3.12 9a2c9eabc123 2 weeks ago 1.02GB
|
||
```
|
||
|
||
#### 3、部署 Python 容器
|
||
下面演示三种方式:快速部署 → 挂载项目 → docker-compose 管理。
|
||
|
||
##### 3.1 快速部署(最简方式)
|
||
适合测试、运行交互式 Python 环境:
|
||
```bash
|
||
docker run -it --name py-test python:3.12
|
||
```
|
||
说明:
|
||
- `-it`:进入交互式终端
|
||
- `--name py-test`:容器名称
|
||
- `python:3.12`:使用 Python 3.12 镜像
|
||
|
||
进入后会看到 Python REPL:
|
||
```python
|
||
Python 3.12.5 (main, Sep 14 2024, 10:15:00)
|
||
>>> print("Hello from Xuanyuan Python!")
|
||
Hello from Xuanyuan Python!
|
||
```
|
||
退出:输入 `exit()` 或 `Ctrl+D`。
|
||
|
||
##### 3.2 挂载本地项目(推荐方式)
|
||
适合实际项目开发,将宿主机代码挂载到容器内。
|
||
|
||
第一步:准备目录
|
||
```bash
|
||
mkdir -p /data/python-app
|
||
cd /data/python-app
|
||
```
|
||
|
||
第二步:写一个测试程序
|
||
```bash
|
||
echo 'print("Hello from Xuanyuan Python App!")' > app.py
|
||
```
|
||
|
||
第三步:启动容器并挂载目录
|
||
```bash
|
||
docker run -it --name py-app \
|
||
-v /data/python-app:/app \
|
||
-w /app \
|
||
python:3.12 python app.py
|
||
```
|
||
说明:
|
||
- `-v /data/python-app:/app`:挂载宿主机目录到容器
|
||
- `-w /app`:指定容器内工作目录
|
||
- `python app.py`:执行程序
|
||
|
||
输出应为:
|
||
```
|
||
Hello from Xuanyuan Python App!
|
||
```
|
||
|
||
##### 3.3 使用 docker-compose 部署(适合企业级项目)
|
||
第一步:创建项目目录
|
||
```bash
|
||
mkdir -p /data/py-compose
|
||
cd /data/py-compose
|
||
```
|
||
|
||
第二步:准备应用
|
||
写一个 `main.py`:
|
||
```python
|
||
print("Python running in Docker with docker-compose!")
|
||
```
|
||
|
||
第三步:编写 `docker-compose.yml`
|
||
```yaml
|
||
version: '3'
|
||
services:
|
||
python-app:
|
||
image: python:3.12
|
||
container_name: python-service
|
||
working_dir: /app
|
||
volumes:
|
||
- ./app:/app
|
||
command: python main.py
|
||
restart: always
|
||
```
|
||
目录结构:
|
||
```
|
||
/data/py-compose
|
||
├─ docker-compose.yml
|
||
└─ app
|
||
└─ main.py
|
||
```
|
||
|
||
第四步:启动服务
|
||
```bash
|
||
docker compose up -d
|
||
```
|
||
|
||
查看状态
|
||
```bash
|
||
docker compose ps
|
||
```
|
||
|
||
查看日志
|
||
```bash
|
||
docker compose logs -f
|
||
```
|
||
|
||
输出:
|
||
```
|
||
python-service | Python running in Docker with docker-compose!
|
||
```
|
||
|
||
#### 4、进阶实践
|
||
##### 4.1 安装第三方库
|
||
运行交互式容器,使用 pip 安装:
|
||
```bash
|
||
docker run -it --name py-pandas python:3.12 bash
|
||
pip install pandas
|
||
```
|
||
|
||
或者在项目目录添加 `requirements.txt`:
|
||
```
|
||
flask
|
||
requests
|
||
```
|
||
然后容器启动时自动安装:
|
||
```bash
|
||
docker run -it -v /data/python-app:/app -w /app python:3.12 pip install -r requirements.txt
|
||
```
|
||
|
||
##### 4.2 构建自定义 Python 镜像
|
||
在项目中写一个 `Dockerfile`:
|
||
```dockerfile
|
||
FROM python:3.12
|
||
|
||
WORKDIR /app
|
||
COPY requirements.txt .
|
||
RUN pip install -r requirements.txt
|
||
COPY . .
|
||
|
||
CMD ["python", "app.py"]
|
||
```
|
||
|
||
构建镜像:
|
||
```bash
|
||
docker build -t my-python-app .
|
||
```
|
||
|
||
运行:
|
||
```bash
|
||
docker run -it --name py-custom my-python-app
|
||
```
|
||
|
||
#### 5、常见问题
|
||
##### 5.1 进入容器后 Python 环境丢失?
|
||
默认进入是 `/bin/bash`,需要手动执行 `python`。也可以直接:
|
||
```bash
|
||
docker exec -it py-app python
|
||
```
|
||
|
||
##### 5.2 如何持久化依赖环境?
|
||
- 使用 `requirements.txt + pip install`
|
||
- 或者构建自定义镜像(见上文 4.2)
|
||
|
||
##### 5.3 容器内时区不对?
|
||
加 `-e TZ=Asia/Shanghai`:
|
||
```bash
|
||
docker run -it -e TZ=Asia/Shanghai python:3.12
|
||
```
|
||
|
||
##### 5.4 如何运行 Flask / Django Web 项目?
|
||
以 Flask 为例,在 `app.py`:
|
||
```python
|
||
from flask import Flask
|
||
app = Flask(__name__)
|
||
|
||
@app.route("/")
|
||
def hello():
|
||
return "Hello Flask from Docker!"
|
||
|
||
if __name__ == "__main__":
|
||
app.run(host="0.0.0.0", port=5000)
|
||
```
|
||
|
||
运行容器:
|
||
```bash
|
||
docker run -d --name py-flask -p 5000:5000 \
|
||
-v /data/python-app:/app -w /app \
|
||
python:3.12 pip install flask && python app.py
|
||
```
|
||
|
||
访问 `http://服务器IP:5000` 即可。
|
||
|
||
#### 结尾
|
||
至此,你已经掌握了 Python 在 Docker 中的部署全流程:
|
||
- 拉取镜像(轩辕镜像 / 官方)
|
||
- 快速运行 Python 环境
|
||
- 挂载项目目录运行代码
|
||
- 使用 docker-compose 管理服务
|
||
- 构建自定义镜像和运行 Web 应用
|
||
|
||
对于初学者,可以先尝试「快速部署」和「挂载目录」;对于工程师,推荐使用「docker-compose」或「自定义镜像」来管理依赖和部署。
|
||
|
||
👉 在实践中遇到问题,可以通过 `docker logs 容器名` 查看日志,或参考 Python 官方文档。
|
||
|