前言
Docker 是一个开源项目,为开发人员和系统管理员提供了一个开放平台,可以将应用程序构建、打包为一个轻量级容器,并在任何地方运行。Docker 会在软件容器中自动部署应用程序。
在本篇中,我将介绍如何 docker 化一个 Python Django 应用程序,然后使用一个 docker-compose 脚本将应用程序作为容器部署到 docker 环境。
环境
操作系统
1 2 3 4 5 6 7 | 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 版本
1 2 | dbnuo@localhost ~ docker -v Docker version 19.03.8, build afacb8b |
Docker Compose 版本
1 2 | dbnuo@localhost ~ docker -v Docker version 19.03.8, build afacb8b |
目录结构
这里列出本次用到的相关文件和目录,以下会介绍每个文件目录的作用和内容。
.
1 2 3 4 5 6 7 8 9 | ├── 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:项目/代码存放目录。
构建部署
设置环境变量
打开
1 2 3 4 5 | # # python # PYTHON_VERSION=3.8.2 PYTHON_PORT=9100 |
- PYTHON_VERSION:用以设置 Python Tags,可以在 Docker Hub 上查看所有 Tags。
- PYTHON_PORT:本地映射容器端口的端口。
构建镜像
打开
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 |
我描述下每个部分:
1.首先,指定要在其上构建镜像的
1 2 | ARG PYTHON_VERSION FROM python:${PYTHON_VERSION} AS python-base |
2.接下来,设置环境变量以正确设置语言环境,阻止Python生成 .pyc 文件,并在 segfaults 上启用 Python 追溯:
1 2 3 4 | ENV LANG C.UTF-8 ENV LC_ALL C.UTF-8 ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONFAULTHANDLER 1 |
3.最后,使用 python-base 镜像开始新的构建阶段。我们将在 python-deps 映像中安装所有 Python 依赖项:
1 2 3 4 5 6 7 8 9 10 11 | 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 |
依赖包管理
打开
1 2 3 4 5 6 7 8 9 | 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 |
容器配置
打开 d
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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: |
有关
这里主要说明下
配置中又两个
启动容器
在文件根目录下运行命令:
1 | docker-compose up -d |
运行该命令会自动构建镜像并启动容器,执行完毕后:
查看镜像:
1 | docker images |
1 2 3 | REPOSITORY TAG IMAGE ID CREATED SIZE dnmp_python latest 7218552b8814 17 hours ago 1.02GB python 3.8.2 f88b2f81f83a 3 weeks ago 933MB |
查看容器:
1 | docker-compose ps -a |
1 2 3 | Name Command State Ports ------------------------------------------------------------------------------------------------- python python3 /code/HelloWorld/m ... Up 0.0.0.0:9100->8000/tcp |
State 状态为 Up 说明启动成功。
打开浏览器访问试一试:
运行成功。这里列几个常用的命令:
启动容器:
停止容器:
重启容器:
删除容器:
查看日志:
Host 使用 Python 命令
终端命令都会记录在文件
这里说下如何在本地使用
打开
添加以下代码至文件:
1 2 3 4 5 6 7 8 9 10 11 | python () { tty= tty -s && tty=--tty docker run \ $tty \ --interactive \ --rm \ --volume $PWD:/code:rw \ --workdir /code \ dnmp_python python "$@" } |
刷新配置文件,使之生效:
这时候在本地即可使用
1 2 | dbnuo@localhost ~ python -V Python 3.8.2 |
创作不易,点个赞吧!!
版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:https://blog.csdn.net/wsad861512140