python项目发布Docker Harbor

在 Python 项目中,没有直接等同于 Java 项目中的 jlib 工具来打包和上传到 Docker Harbor。但我们可以使用 Docker 和 Docker Compose 等工具实现类似的功能。这些工具帮助您打包 Python 项目并将其推送到 Docker Harbor 中。

使用 Docker 和 Docker Compose 实现类似 jlib 的功能

以下是详细步骤:

1. 创建项目结构

假设您的项目结构如下:

复制代码
my_fastapi_app/
├── app/
│   ├── main.py
│   └── ...
├── requirements.txt
├── Dockerfile
└── start.py

start.py 文件内容:

python 复制代码
import uvicorn

if __name__ == "__main__":
    uvicorn.run("app.main:app", host="0.0.0.0", port=8000, reload=True, log_level="debug")
2. 创建 Dockerfile

在项目根目录下创建 Dockerfile

Dockerfile 复制代码
# Use an official Python runtime as a parent image
FROM python:3.9-slim

# Set the working directory in the container
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Make port 8000 available to the world outside this container
EXPOSE 8000

# Run start.py when the container launches
CMD ["python", "start.py"]
3. 使用 Docker Compose

创建一个 docker-compose.yml 文件,以便更轻松地管理和部署应用:

yaml 复制代码
version: '3.8'

services:
  web:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - .:/app
    environment:
      - ENV=production
4. 构建和推送镜像到 Harbor

首先,登录到您的 Harbor 仓库:

sh 复制代码
docker login your-harbor-domain.com

使用 Docker Compose 构建镜像:

sh 复制代码
docker-compose build

标记您的镜像以便推送到 Harbor:

sh 复制代码
docker tag my_fastapi_app_web:latest your-harbor-domain.com/my_project/my_fastapi_app:latest

然后,推送镜像到 Harbor:

sh 复制代码
docker push your-harbor-domain.com/my_project/my_fastapi_app:latest
5. 从 Harbor 拉取并运行镜像

在目标服务器上,从 Harbor 拉取并运行您的镜像:

sh 复制代码
docker pull your-harbor-domain.com/my_project/my_fastapi_app:latest
docker run -d -p 8000:8000 your-harbor-domain.com/my_project/my_fastapi_app:latest

通过这些步骤,您可以使用 Docker 和 Docker Compose 来打包和上传 Python 项目到 Harbor 中,类似于 Java 项目使用 jlib 的流程。Docker 和 Docker Compose 提供了强大的工具集,可以轻松管理、构建和部署容器化应用。

相关推荐
FreakStudio5 分钟前
开源分享|用MicroPython 做了个 AI 小鸡,它会长大,还记得我所有的情绪
python·单片机·嵌入式·面向对象·并行计算·电子diy·电子计算机
iuvtsrt17 分钟前
存储过程如何处理海量数据的批处理_循环提交与分段LIMIT结合
jvm·数据库·python
yexuhgu21 分钟前
SQL如何检查字符串是否存在:INSTR与LOCATE函数使用
jvm·数据库·python
2301_7838486526 分钟前
SQL如何用SQL子查询实现关联报表生成_嵌套逻辑关联多表
jvm·数据库·python
八月欢喜28 分钟前
【Facebook】 实时消息监控难点解析
javascript·python·facebook
咖啡里的茶i32 分钟前
在Docker环境中安装Hadoop cluster
docker
l1t1 小时前
JIT执行python脚本的工具codon安装和测试
开发语言·python
2501_901006471 小时前
Golang怎么用gRPC Gateway_Golang gRPC Gateway教程【经典】
jvm·数据库·python
2501_901200531 小时前
golang如何实现错误预算Error Budget计算_golang错误预算Error Budget计算实现实战
jvm·数据库·python
2401_867623981 小时前
如何解决OUI图形界面无法调用_xhost与DISPLAY变量设置
jvm·数据库·python