docker部署Django项目(前后端分离项目)
第一步切换yum源: https://blog.csdn.net/wangshuminjava/article/details/84380308第二步1. 安装dockerhttps://www.runoob.com/docker/centos-docker-install.html修改docker镜像源:https://blog.csdn.net/l848168/article/de...
·
欢迎加群:1051907485
!!!该博客参考:https://www.dusaiphoto.com/article/detail/74/
第一步
切换yum源: https://blog.csdn.net/wangshuminjava/article/details/84380308
第二步
1. 安装docker
- https://www.runoob.com/docker/centos-docker-install.html
- 修改docker镜像源:https://blog.csdn.net/l848168/article/details/83378298
2. 安装docker-compose
- http://get.daocloud.io/
第三步
1. 把项目放到服务器上
比如: 在 home 目录下建一个 wwwroot文件夹,把项目放在里面
2. 在项目根目录下建 Dockerfile 文件
# 从仓库拉取 带有 python 3.7 的 Linux 环境
FROM python:3.7
# 设置 python 环境变量
ENV PYTHONUNBUFFERED 1
# 添加这两行
RUN apt-get update
RUN apt-get install python3-dev default-libmysqlclient-dev -y
# 创建 code 文件夹并将其设置为工作目录
RUN mkdir /code
WORKDIR /code
# 更新 pip
RUN pip install pip -U -i https://mirrors.aliyun.com/pypi/simple/
# 将 requirements.txt 复制到容器的 code 目录
ADD requirements.txt /code/
# 安装库 并使用阿里源安装
RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 将当前目录复制到容器的 code 目录
ADD . /code/
名称 | 说明 |
---|---|
FROM python:3.7 | 指令从仓库拉取一个包含 python 3.7 的 Linux 操作系统环境 |
RUN 和 WORKDIR | 指令都是针对容器的,功能是在docker容器里创建目录、并将其设置为工作目录;注意宿主机是没有这个目录的 |
ADD requirements.txt /code/ | 意思是将宿主机当前目录(即 Dockerfile 所在目录)的 requirements.txt 文件复制到容器的 /code 目录中 |
ADD . /code/ | 把当前目录所有内容复制到容器 /code/ 目录,注意中间那个点 |
3.在项目根目录下建 docker-compose.yml 文件
version: "3"
services:
app:
restart: always
build: .
command: bash -c "python3 manage.py collectstatic --no-input && python3 manage.py migrate && gunicorn --timeout=30 --workers=4 --bind :8000 django_app.wsgi:application"
volumes:
- .:/code
- static-volume:/code/collected_static
expose:
- "8000"
depends_on:
- db
networks:
- web_network
- db_network
db:
image: mysql:5.7
volumes:
- "./mysql:/var/lib/mysql"
ports:
- "3306:3306"
restart: always
environment:
- MYSQL_ROOT_PASSWORD=your_password
- MYSQL_DATABASE=your_database
networks:
- db_network
nginx:
restart: always
image: nginx:latest
ports:
- "8000:8000"
volumes:
- static-volume:/code/collected_static
- ./config/nginx:/etc/nginx/conf.d
depends_on:
- app
networks:
- web_network
networks:
web_network:
driver: bridge
db_network:
driver: bridge
volumes:
static-volume:
名称 | 说明 |
---|---|
version | 代表 docker-compose.yml 的版本,目前最新版为 3 |
restart | 除正常工作外,容器会在任何时候重启,比如遭遇 bug、进程崩溃、docker 重启等情况 |
build | 指定一个包含 Dockerfile 的路径,并通过此 Dockerfile 来构建容器镜像。注意那个 “.” ,代表当前目录 |
command | 容器运行时需要执行的命令。这里就是我们很熟悉的运行开发服务器了 |
volumes | 卷,这是个很重要的概念。宿主机和容器目录的映射。 |
ports | 定义了宿主机和容器的端口映射;宿主机端口映射到本容器的端口 (宿主机:容器) |
depends_on | 意思是此容器需要等待 db 容器启动完毕才能够启动 |
image | 从仓库拉取 MySQL 5.7镜像。可以自己定版本 |
environment | 定义容器的环境变量,设置了 MySQL 的 root 用户的密码、数据库的名称。 |
your_password | 你的数据库密码 |
your_database | 你的数据库名称 |
4.修改Django的setting.py中配置
......
DEBUG = False
ALLOWED_HOSTS = ['*']
......
#数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django_app',
'USER': 'root',
'PASSWORD': 'mypassword',
'HOST': 'db', #注意 HOST 填写的是docker容器的名称,即 db
'PORT': '3306',
'OPTIONS': {'charset': 'utf8'},
}
}
......
STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static') #不加这个,将无法访问静态文件
STATIC_URL = '/static/'
注意:请先确认没有其他程序占用了 3306 端口,比如宿主机安装的 MySQL。
5.运行docker
docker-compose up
等待安装环境…
第四步修改nginx (注意:前后端分离项目)
1.在项目根目录下新建文件夹
yum install nginx #安装nginx
mkdir config
cd config
mkdir nginx
2.进入容器nginx的目录
cd config/nginx/
3.编辑你的前端项目配置
vi your_name.conf
your_name.conf 是自己随便取的名字,只要是xxx.conf就行
upstream your_domain_name {
ip_hash;
server app:8000;
}
server {
listen 8000;
server_name localhost;
location /static/ {
autoindex on;
alias /code/collected_static/;
}
location / {
proxy_pass http://your_domain_name/;
}
}
名称 | 说明 |
---|---|
your_domain_name | 你的域名,如果没有域名就用app名 |
app | docker-compose中django项目定义的容器名字 |
保存退出编辑;
1.执行: nginx -s reload 重启nginx就好了
2.进入项目根目录 执行 docker-compose up (或者docker-compose up -d)
docker额外命令:
#docker容器停止运行:
docker-compose down
#docker容易后台运行
docker-compose up -d
#docker重构镜像
docker-compose build
更多推荐
已为社区贡献1条内容
所有评论(0)