docker、dockercompose部署django2.2应用(nginx/mysql/gunicorn)
概览
部署的是django2.2官方文档的polls示例应用,首先看看目录结构
比较重要的有
- mysql my.cnf 配置文件
- nginx
- nginx.conf 配置文件
- Dockfile nginx的image构建文件
- .env 设置环境变量
- docker-compose.yml docker-compose的配置文件
- Dockerfile python的image构建文件
部署一共使用了三个image(nginx/mysql/python),会有三个容器,这就要使用docker-compose定义和运行多容器的应用
编写Dockerfile
构建Python的image
### /django22/Dockerfile ###
FROM python:3.6.8
MAINTAINER Huu "[email protected]"
COPY . /usr/srv/polls
WORKDIR /usr/srv/polls
RUN pip install -r requirement.txt -i https://mirrors.aliyun.com/pypi/simple/
EXPOSE 7000
ENTRYPOINT ["bash","./dj-start.sh"]
容器成功运行后的启动命令,在Dockerfile的ENTRYPOINT中设置,这里是django部署前的准备,最后用gunicorn -c 启动,配置文件gunicorn.conf需要编写
### /django22/dj-start.sh ###
#! /bin/bash
python manage.py collectstatic --noinput && python manage.py migrate &&
exec gunicorn django22.wsgi:application -c gunicorn.conf
构建Nginx的image
主要就是把nginx.conf这个配置文件放入容器中,并且创建了静态文件的存放目录与nginx.conf中对应,后续用于挂载宿主机的目录
FROM nginx:1.12.2
EXPOSE 80
MAINTAINER Huu "[email protected]"
COPY ./nginx/nginx.conf /etc/nginx/conf.d
RUN mkdir -p /usr/share/nginx/html/static && mkdir -p /usr/share/nginx/html/media
docker-compose.yml整合多个image
比较完整的示例,都挂载了日志文件
version: '3'
networks:
net1:
driver: bridge
net2:
driver: bridge
services:
db:
image: mysql:5.7
environment:
MYSQL_DATABASE: polls
MYSQL_ROOT_PASSWORD: password
TZ: Asia/Shanghai
command:
- bash
- '-ec'
- |
mkdir -p /var/log/mysql
chown -R mysql:mysql /var/log/mysql
exec docker-entrypoint.sh mysqld
volumes:
- ./db:/var/lib/mysql
- ./mysql:/etc/mysql/conf.d
- ./logs/mysql:/var/log/mysql
restart: always
networks:
- net1
web:
build:
.
# 容器内不使用nginx的话可以直接映射端口给宿主机的nginx
# ports:
# - "7000:7000"
env_file:
- .env
volumes:
- .:/usr/srv/polls
- ./logs/gunicorn:/var/log/gunicorn
depends_on:
- db
networks:
- net1
- net2
restart: always
nginx:
build:
context: ./
dockerfile: ./nginx/Dockerfile
environment:
TZ: Asia/Shanghai
ports:
- "81:80"
volumes:
- ./static:/usr/share/nginx/html/static
- ./media:/usr/share/nginx/html/media
- ./logs/nginx:/var/log/nginx
depends_on:
- web
networks:
- net2
restart: always
构建并运行
docker-compose build 构建image
docker-compose up -d 后台运行容器
本文来源 爱码网,其版权均为 原网址 所有 与本站无关,文章内容系作者个人观点,不代表 本站 对观点赞同或支持。如需转载,请注明文章来源。
© 版权声明
文章版权归作者所有,未经允许请勿转载。