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

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

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

环境IBV免费资源网

IBV免费资源网

操作系统IBV免费资源网

IBV免费资源网

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 版本IBV免费资源网

IBV免费资源网

dbnuo@localhost ~ docker -v

Docker version 19.03.8, build afacb8b

Docker Compose 版本IBV免费资源网

IBV免费资源网

dbnuo@localhost ~ docker-compose -v

docker-compose version 1.25.4, build 8d51620a

目录结构IBV免费资源网

IBV免费资源网

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

.

├── 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:项目/代码存放目录。

构建部署IBV免费资源网

IBV免费资源网

设置环境变量IBV免费资源网

IBV免费资源网

打开 .env 文件,添加以下内容:IBV免费资源网

#

# python

#

PYTHON_VERSION=3.8.2

PYTHON_PORT=9100

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

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

构建镜像IBV免费资源网

IBV免费资源网

打开 services/python/Dockerfile 文件,添加以下内容:IBV免费资源网

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 https://pypi.douban.com/simple

我描述下每个部分:IBV免费资源网

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

IBV免费资源网

ARG PYTHON_VERSION

FROM python:${PYTHON_VERSION} AS python-base

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

IBV免费资源网

ENV LANG C.UTF-8

ENV LC_ALL C.UTF-8

ENV PYTHONDONTWRITEBYTECODE 1

ENV PYTHONFAULTHANDLER 1

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

IBV免费资源网

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 https://pypi.douban.com/simple

依赖包管理IBV免费资源网

IBV免费资源网

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

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

容器配置IBV免费资源网

IBV免费资源网

打开 docker-compose.yml 文件,配置容器:IBV免费资源网

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 的详细介绍,大家可以查阅官方文档。IBV免费资源网

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

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

启动容器IBV免费资源网

IBV免费资源网

在文件根目录下运行命令:IBV免费资源网

docker-compose up -d

运行该命令会自动构建镜像并启动容器,执行完毕后:IBV免费资源网

查看镜像:IBV免费资源网

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

查看容器:IBV免费资源网

docker-compose ps -a

Name Command State Ports

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

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

State 状态为 Up 说明启动成功。IBV免费资源网

打开浏览器访问试一试:IBV免费资源网

IBV免费资源网

运行成功。这里列几个常用的命令:IBV免费资源网

启动容器:docker-compose start pythonIBV免费资源网

停止容器:docker-compose stop pythonIBV免费资源网

重启容器:docker-compose restart pythonIBV免费资源网

删除容器:docker-compose && docker-compose rm pythonIBV免费资源网

查看日志:docker logs pythonIBV免费资源网

Host 使用 Python 命令IBV免费资源网

IBV免费资源网

终端命令都会记录在文件 bash.alias 中。IBV免费资源网

这里说下如何在本地使用 python 命令:IBV免费资源网

打开 ~/.bashrc (如果是 zsh 客户端的使用 ~/.zshrc)IBV免费资源网

添加以下代码至文件:IBV免费资源网

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)IBV免费资源网

这时候在本地即可使用 python 命令了,试一下:IBV免费资源网

dbnuo@localhost ~ python -V

Python 3.8.2

完整的示例,可以查看我的 GitHub 项目:BNDong/dnmpIBV免费资源网

IBV免费资源网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 最小堆实现

#include <bits/stdc.h> using namespace std; //[4,3,5,2,1] void tiao(vector<int>& v, int node, int leng){int left,right;int Min;while(1){leftnode*21; //左节点rightnode*22; //右节点if(left<leng){ //如果有左节点Minmin(v[node],v[left]); …

java tostring方法_Java虚拟机如执行方法调用的(二)?

虚方法调用Java里所有非私有实例方法调用都会被编译成invokevirtual指令. 接口方法调用都会被编译成invokeinterface指令.这两种指令都属于Java虚方法的调用.在大多数情况下, Java虚拟机需要根据调用者的动态类型, 来确定虚方法调用的目标方法.这个过程被称为动态绑定. 那么相对…

[笔记]cin、cout与scanf、printf的效率差异对比分析

之前上传UVa227 puzzle时&#xff0c;好不容易AC了&#xff0c;但发现自己用时50(ms)&#xff0c;而在VJ上看到人家都是40ms、20ms&#xff0c;于是打开一个20ms的代码查看人家强在哪里。但结果研究了半天感觉差不多&#xff0c;于是想着应该不是算法的问题。然后又想到&#x…

“智联网与未来”——第14届中国信息技术年会院士精彩观点辑录

来源&#xff1a;科技导报编者按 以智慧互联为目标的智联网系统是未来信息网络的发展方向&#xff0c;将引发人类社会向智慧社会的重大变革。在中国电子学会、工业和信息化部电子科学技术委员会等主办的第14届中国信息技术年会上&#xff0c;学者热议“智联网与未来”&#xf…

什么是java的元数据_学习大数据,为什么要先学习Java?

是新朋友吗&#xff1f;记得先点蓝字关注我哦&#xff5e;今日课程菜单Java全栈开发 | Web前端H5大数据开发 | 数据分析人工智能Python | 人工智能物联网来源&#xff1a;小职(z_zhizuobiao)找我&#xff1a;✅ 解锁高薪工作 ✅ 免费获取干货教程未完待续很多人初学的第一门语言…

寻找区间质数

给定一个[left,right]的范围&#xff0c;计算这个区间内的质数的个数 思路&#xff1a;定义一个isPrime数组&#xff0c;其长度为right1&#xff0c;数组的元素为bool型&#xff0c;true代表该位置索引的数字是质数。首先数组初始化为全部true&#xff0c;然后从2开始遍历到sq…

记忆的天空:“崩塌型”记忆活动原理

作者&#xff1a;钟振余宁波大学副教授&#xff0c;工科背景&#xff0c;专注于脑科学神经信息活动机制研究。记忆是大脑活动原理的重要研究内容。相对于现代科学的高速发展&#xff0c;人类对于大脑活动原理的了解仍处在初级阶段。差不多半个多世纪之前&#xff0c;意识灵魂论…

python用途适合做什么生意-PureQuant数字货币量化交易程序化交易python量化开源框架...

什么是量化交易 量化交易起源于上世纪七十年代的股票市场&#xff0c;是指借助现代统计学和数学的方法&#xff0c;利用计算机技术来进行交易的证券投资方式。量化交易从庞大的历史数据中海选能够带来超额收益的多种“大概率”事件以制定策略&#xff0c;用数量模型验证及固化这…

调整数组顺序使奇数位于偶数前面

实现一个函数来调整该数组中数字的顺序&#xff0c;使得所有的奇数位于数组的前半部分&#xff0c;所有的偶数位于数组的后半部分&#xff0c;并保证奇数和奇数&#xff0c;偶数和偶数之间的相对位置不变。 定义两个指针tail和curr&#xff0c;tail指针首先指向第一个偶数&…

python3.5和3.7可以共存吗_centos7下Python和python3共存

一、python3.7.3安装1、下载对应的版本https://www.python.org/downloads/source/2、安装依赖的包 yum install -y gcc zlib* make libffi-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel3、解压下载的文件 tar -zxvf Python-3.7.3.tgzc…

NodeJs系列二:你好,世界

安装nodejs什么是nodejs中的模块hello&#xff0c;world转载于:https://www.cnblogs.com/humaotegong/p/5642025.html

飞天智能:阿里云的 AI 落地野心

来源&#xff1a;大叔爱吐槽CSDN当下&#xff0c;AI 业界不会否认的一个事实是&#xff0c;AI实力的比拼不再是单点的算法技术能力&#xff0c;而是从底层算法到应用平台的全面AI能力。单纯的算法&#xff0c;只是实验室里的乐趣&#xff0c;唯有结合商业的数据处理能力和技术变…

oracle把时间段转换成每一天_在家办公难适应?来看看专职外汇交易员的一天

万万没想到&#xff0c;曾经幻想的躺在床上把钱赚&#xff0c;居然成真了&#xff01;这不&#xff0c;受疫情的影响&#xff0c;不少人在家开工了&#xff01;今天是主流人群在家办公的第三天&#xff0c;然而&#xff0c;很多人表示&#xff1a;自己依然没有适应在家办公的节…

C++模板函数只声明一种类型但输入两种类型参数

具体见代码&#xff1a; #include <iostream>using namespace std;template <typename T> void Swap(T& a, T& b) {T tmp a;a b;b tmp; }int main() {int a 10;float b 20;Swap(a, b); //自动推导调用cout<<"ok"<<endl; } Sw…

python写负数_python 负数

python基础知识python_1Python解释器CPythonC语言开发的Python解释器,最广泛IPython一个交互式、功能增强的CPythonPypyPython语言写的Python解释器,JIT技术,动态编译Python代码Jpython...文章技术小阿哥2017-10-30623浏览量Python的基础语法Python的基础语法在对Python有了基础…

UVALive 7455 Linear Ecosystem (高斯消元)

Linear Ecosystem题目链接&#xff1a; http://acm.hust.edu.cn/vjudge/contest/127401#problem/B Description http://7xjob4.com1.z0.glb.clouddn.com/99b0fe905e5bd89a24c882832c93cc09 Input The first line of the input file contains an integer, n, which is the numbe…

华为诺亚方舟实验室—推荐系统中的前沿技术研究与落地报告

来源&#xff1a;专知【导读】9月6-7日&#xff0c;2019中国AI开发者大会&#xff08;AI ProCon 2019&#xff09; 在北京拉开帷幕。本次大会由新一代人工智能产业技术创新战略联盟&#xff08;AITISA&#xff09;指导&#xff0c;鹏城实验室、北京智源人工智能研究院支持&…

u盘锁电脑_程序员用U盘偷公司源码被抓;Rust 语言发布 5 周年

(给技术最前线加星标&#xff0c;每天看技术热点)综合整理&#xff1a;技术最前线(ID&#xff1a;TopITNews)参考&#xff1a;程序员的那些事、开源中国、solidot、cnBeta、腾讯科技等0、程序员用U盘偷公司源码被判刑2018年5月18日18时20分许&#xff0c;温某某在广州三七互娱科…

pytorch保存和加载模型state_dict

保存模型&#xff1a; torch.save({epoch: epoch 1,state_dict: model.state_dict(),optimizer: optimizer.state_dict(),}, datadir) 加载模型 model model_class(num_classesnum_classes) # 定义模型 state torch.load(datadir) model.load_state_dict(state[state_dic…

20幅漫画告诉你未来世界是怎样的

导读&#xff1a;在你心目中的&#xff08;不太遥远的&#xff09;未来是什么样的&#xff1f;名为Futurism Cartoons的作者绘制了一系列以“未来”为主题的漫画&#xff0c;其中多幅跟人工智能及你大数据有关&#xff0c;你们来感受一下……来源&#xff1a;大叔爱吐槽0102030…