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 2020; 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
├── l
├── .env
├── services
│└── python
││├── Dockerfile
││└──
└── www
└── python
bash.alias:⽤以记录本地终端的命令。
.env:环境变量设置⽂件。
services/python/Dockerfile:镜像构建⽂件。
services/:依赖包管理⽂件。
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
./
RUN pip install - -i pypi.douban/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
./
RUN pip install - -i pypi.douban/simple
依赖包管理
打开 services/ ⽂件,添加项⽬需要的依赖。⽰例:
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
docker重启容器命令paramiko==2.7.1
psutil==5.7.0
容器配置
打开 l ⽂件,配置容器:
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 项⽬:
到此这篇关于Docker如何部署Python项⽬的实现详解的⽂章就介绍到这了,更多相关Docker部署Python项⽬内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。