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 ├── docker-compose.yml ├── .env ├── services │ └── python │ │ ├── Dockerfile │ │ └── requirements.txt └── www └── python
构建部署
设置环境变量
打开 .env 文件,添加以下内容:
# # python # PYTHON_VERSION=3.8.2 PYTHON_PORT=9100
构建镜像
打开 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 https://pypi.douban.com/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 https://pypi.douban.com/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项目内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
本文向大家介绍Docker部署web项目的实现,包括了Docker部署web项目的实现的使用技巧和注意事项,需要的朋友参考一下 上一篇已经安装好docker服务,下面继续介绍如何部署web项目 一:随便创建目录dock,准备好如下文件: 二、编写Dockerfile,通过它能快速地构建docker镜像 新增如下配置 解释: (1)FROM centos 表示从docker官方仓库中获取centos
本文向大家介绍docker-compose部署php项目实例详解,包括了docker-compose部署php项目实例详解的使用技巧和注意事项,需要的朋友参考一下 1.制定特定扩展的PHP镜像 2.编写yml文件 3.配置default.conf文件 4.修改mysql允许远程连接并新建数据库 5.创建并且启动容器 6.新建index.php测试mysql连接
本文向大家介绍docker+daocloud实现前端项目自动构建部署,包括了docker+daocloud实现前端项目自动构建部署的使用技巧和注意事项,需要的朋友参考一下 项目的自动化部署在大公司或独角兽中用得比较多,相比来进行手动部署项目来说会更加高效。那么本文结合之前学习的docker知识点以及nginx来简单实现VueJs项目的自动部署,当然针对其他项目也类似。 运行环境 首先需要在服务器上
本文向大家介绍Docker Cloud实现部署应用操作详解,包括了Docker Cloud实现部署应用操作详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Docker Cloud实现部署应用操作。分享给大家供大家参考,具体如下: 如果您在生产环境中使用Docker Community Edition的效果还不错,可以使用Docker Cloud来帮助管理Amazon Web Servi
本文向大家介绍SpringBoot项目在IntelliJ IDEA中如何实现热部署,包括了SpringBoot项目在IntelliJ IDEA中如何实现热部署的使用技巧和注意事项,需要的朋友参考一下 spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。 原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动更
本文向大家介绍Apache部署Django项目图文详解,包括了Apache部署Django项目图文详解的使用技巧和注意事项,需要的朋友参考一下 前言 Django项目本身就可以启动运行,为什么还需要部署到Apache或者Nginx上呢?初学者都会遇到这个问题,我们来看看官方解释:It's intended only for use while developing. (We're in the b