docker打包python程序

本文详细介绍如何使用Docker容器进行环境搭建,包括编写Dockerfile、制作镜像、运行容器并实现端口映射,以及使用docker-compose进行服务部署。通过实际案例,展示如何在容器中安装依赖包,设置环境变量,以及配置容器与宿主机之间的网络连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、程序依赖包写入requirements.txt文件

requests
numpy
pillow
tornado

2、编写Dockerfile

# 拉取基础镜像
FROM python:3.6.5

# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive

# 把当前所有文件拷贝到容器的/code文件夹里,并根据requirements.txt安装python依赖包
RUN mkdir /code \
&& apt-get update -y \
&& apt-get install -y libsm6 \
&& pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY . /code 
RUN pip install -r /code/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
WORKDIR /code

# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone

CMD ["python3","http_server.py"]

3、执行命令

Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务。
容器启动之后,容器中可以运行一些网络应用,通过-p或-P参数来指定端口映射。
宿主机的一个端口只能映射到容器内部的某一个端口上,比如:8080->80之后,就不能8080->81
容器内部的某个端口可以被宿主机的多个端口映射,比如:8080->80,8090->80,8099->80

启动容器时,选择一个端口映射到容器内部开放端口上
-p   小写p表示docker会选择一个具体的宿主机端口映射到容器内部开放的网络端口上。
-P   大写P表示docker会随机选择一个宿主机端口映射到容器内部开放的网络端口上。

# 制作镜像
sudo docker build -t python_fun:test .

# 运行镜像,docker容器的端口映射到宿主机的端口

sudo docker run -ti --name http_server -p 8888:8888 python_fun:test

4、docker-compose启动

docker-compose.yml.service,通过配置docker环境变量的方式,传入一些参数设置

version: '3.1'

services:
  python_mini_service:
    build:
      context: .
      dockerfile: Dockerfile.cpu
    image: python3.6_cpu:v1
    restart: always
    working_dir: /root/projects
    ports:
      - 8888:8888
    environment:
      - TZ=Asia/Shanghai
      - host-ip=192.168.34.168
      - host-port=8888

工程代码中相应的run_cfg.py也要做修改

import os

http_config = {
    # 本地服务 ip 线上的话需要写具体部署http服务的ip
    'server_host': os.environ['host-ip'],
    # 服务名
    'app_name': 'video-python',
    # 端口
    'port': int(os.environ['host-port'])
}

运行

docker-compose -f docker-compose.yml.service up -d

 

### 使用Docker容器化Python应用程序 为了将Python应用程序容器化,创建`Dockerfile`是一个核心步骤。此文件包含了用于构建Docker镜像的所有指令[^1]。 #### 创建Dockerfile 在项目根目录下新建一个名为`Dockerfile`的文件,其内容如下: ```dockerfile FROM python:3.9-slim-buster WORKDIR /app COPY requirements.txt requirements.txt RUN pip install --upgrade pip && \ pip install -r requirements.txt COPY . . CMD ["python", "your_script_name.py"] ``` 这段代码选择了官方的轻量级Python 3.9作为基础镜像,并设置了工作目录为`/app`。接着复制了依赖列表文件`requirements.txt`进入容器内相同路径,并更新安装所需的库。最后一步是把整个工程拷贝至容器内的对应位置,并指定了启动命令执行特定的Python脚本[^5]。 对于具体的Python应用来说,如果存在其他资源文件或子模块,则也需要一并加入到上述过程之中;另外还需注意调整最后一行中的脚本名以匹配实际使用的入口文件名称。 #### 准备依赖清单 确保在同一级别放置了一个叫做`requirements.txt`的文本文件,里面列出了所有外部依赖关系及其版本号。这有助于保证同环境中的一致性和可移植性[^3]。 例如: ``` flask==2.0.1 numpy>=1.19,<2.0 ... ``` #### 构建与运行 完成以上准备工作之后,在包含有`Dockerfile`所在的同一层目录打开命令提示符窗口,依次输入下面两条语句来分别编译新映像以及启动关联的服务实例[^4]。 ```bash docker build --tag my-python-app . docker run -d -p host_port:container_port my-python-app ``` 这里的`my-python-app`代表自定义标签的名字,而`host_port`和`container_port`则应替换为你想要映射的实际端口数值对。比如当内部服务监听于8080端口时,可以在宿主机上通过指定参数如`-p 8080:8080`实现访问转发功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值