300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > docker 打包部署 python项目_Docker如何部署Python项目的实现详解

docker 打包部署 python项目_Docker如何部署Python项目的实现详解

时间:2023-10-01 17:33:40

相关推荐

docker 打包部署 python项目_Docker如何部署Python项目的实现详解

Docker 是一个开源项目,为开发人员和系统管理员提供了一个开放平台,可以将应用程序构建、打包为一个轻量级容器,并在任何地方运行。Docker 会在软件容器中自动部署应用程序。

在本篇中,我将介绍如何 docker 化一个 Python Django 应用程序,然后使用一个 docker-compose 脚本将应用程序作为容器部署到 docker 环境。

环境

操作系统

dbnuo@localhost ~ sw_vers

ProductName: Mac OS X

ProductVersion: 10.15.3

BuildVersion: 19D76

dbnuo@localhost ~ uname -v

Darwin Kernel Version 19.3.0: Thu Jan 9 20:58:23 PST ; root:xnu-6153.81.5~1/RELEASE_X86_64

Docker 版本

dbnuo@localhost ~ docker -v

Docker version 19.03.8, build afacb8b

Docker Compose 版本

dbnuo@localhost ~ docker-compose -v

docker-compose version 1.25.4, build 8d51620a

目录结构

这里列出本次用到的相关文件和目录,以下会介绍每个文件目录的作用和内容。

.

├── bash.alias

├── docker-compose.yml

├── .env

├── services

│ └── python

│ │ ├── Dockerfile

│ │ └── requirements.txt

└── www

└── python

bash.alias:用以记录本地终端的命令。

docker-compose.yml:容器配置文件。

.env:环境变量设置文件。

services/python/Dockerfile:镜像构建文件。

services/python/requirements.txt:依赖包管理文件。

www/python:项目/代码存放目录。

构建部署

设置环境变量

打开 .env 文件,添加以下内容:

#

# python

#

PYTHON_VERSION=3.8.2

PYTHON_PORT=9100

PYTHON_VERSION:用以设置 Python Tags,可以在 Docker Hub 上查看所有 Tags。

PYTHON_PORT:本地映射容器端口的端口。

构建镜像

打开 services/python/Dockerfile 文件,添加以下内容:

ARG PYTHON_VERSION

FROM python:${PYTHON_VERSION} AS python-base

ENV LANG C.UTF-8

ENV LC_ALL C.UTF-8

ENV PYTHONDONTWRITEBYTECODE 1

ENV PYTHONFAULTHANDLER 1

FROM python-base AS python-deps

WORKDIR /code

RUN apt-get update

&& apt-get -y install freetds-dev

&& apt-get -y install unixodbc-dev

COPY requirements.txt ./

RUN pip install -r requirements.txt -i /simple

我描述下每个部分:

首先,指定要在其上构建镜像的 Python 镜像。这是由 Docker 组织提供的官方镜像,该 Python 镜像版本由环境变量 PYTHON_VERSION 设置。我们为该镜像命名 python-base,它将在下个阶段使用到:

ARG PYTHON_VERSION

FROM python:${PYTHON_VERSION} AS python-base

接下来,设置环境变量以正确设置语言环境,阻止Python生成 .pyc 文件,并在 segfaults 上启用 Python 追溯:

ENV LANG C.UTF-8

ENV LC_ALL C.UTF-8

ENV PYTHONDONTWRITEBYTECODE 1

ENV PYTHONFAULTHANDLER 1

最后,使用 python-base 镜像开始新的构建阶段。我们将在 python-deps 映像中安装所有 Python 依赖项:

FROM python-base AS python-deps

WORKDIR /code

RUN apt-get update

&& apt-get -y install freetds-dev

&& apt-get -y install unixodbc-dev

COPY requirements.txt ./

RUN pip install -r requirements.txt -i /simple

依赖包管理

打开 services/python/requirements.txt 文件,添加项目需要的依赖。示例:

Django==3.0.4

djangorestframework==3.11.0

pyDes==2.0.1

PyMySQL==0.9.3

redis==3.4.1

requests==2.23.0

pyodbc==4.0.30

paramiko==2.7.1

psutil==5.7.0

容器配置

打开 docker-compose.yml 文件,配置容器:

version: "3"

services:

python:

build:

context: ./services/python

args:

PYTHON_VERSION: ${PYTHON_VERSION}

command: python3 /code/HelloWorld/manage.py runserver 0.0.0.0:8000

# command:

# - /bin/sh

# - -c

# - |

# django-admin startproject HelloWorld

# python3 /code/HelloWorld/manage.py runserver 0.0.0.0:8000

container_name: python

hostname: python

volumes:

- ${SOURCE_DIR}/python:/code:rw

expose:

- "8000"

ports:

- "${PYTHON_PORT}:8000"

privileged: true

restart: always

networks:

- default

networks:

default:

有关 Docker Compose 的详细介绍,大家可以查阅官方文档。

这里主要说明下 command ,这是配置在容器启动后执行的命令,类似 Dockerfile 的 CMD。

配置中又两个 command,其中一个注释了,二者只能使用一个。第一个是单条命令的配置方式,下面的是多条命令的配置方式。视个人情况修改其中命令和路径(初次测试,建议使用下面的 command ,会自动初始化一个 HelloWorld 项目并启动)。

启动容器

在文件根目录下运行命令:

docker-compose up -d

运行该命令会自动构建镜像并启动容器,执行完毕后:

查看镜像:

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

dnmp_python latest 7218552b8814 17 hours ago 1.02GB

python 3.8.2 f88b2f81f83a 3 weeks ago 933MB

查看容器:

docker-compose ps -a

Name Command State Ports

-------------------------------------------------------------------------------------------------

python python3 /code/HelloWorld/m ... Up 0.0.0.0:9100->8000/tcp

State 状态为 Up 说明启动成功。

打开浏览器访问试一试:

运行成功。这里列几个常用的命令:

启动容器:docker-compose start python

停止容器:docker-compose stop python

重启容器:docker-compose restart python

删除容器:docker-compose && docker-compose rm python

查看日志:docker logs python

Host 使用 Python 命令

终端命令都会记录在文件 bash.alias 中。

这里说下如何在本地使用 python 命令:

打开 ~/.bashrc (如果是 zsh 客户端的使用 ~/.zshrc)

添加以下代码至文件:

python () {

tty=

tty -s && tty=--tty

docker run

$tty

--interactive

--rm

--volume $PWD:/code:rw

--workdir /code

dnmp_python python "$@"

}

刷新配置文件,使之生效:source ~/.bashrc(如果是 zsh 客户端的使用 source ~/.zshrc)

这时候在本地即可使用 python 命令了,试一下:

dbnuo@localhost ~ python -V

Python 3.8.2

完整的示例,可以查看我的 GitHub 项目:BNDong/dnmp

到此这篇关于Docker如何部署Python项目的实现详解的文章就介绍到这了,更多相关Docker部署Python项目内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。