django作为项目后台的docker-compose部署

django作为项目后台的docker-compose部署

准备

Linux下安装docker

1
2
sudo apt-get install docker
sudo apt-get install dock

Linux下安装docker-compose

1
2
$ sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

dockerfile编写
1
2
3
4
5
6
7
FROM python:3  #python 版本
ENV PYTHONUNBUFFERED 1 #环境变量
RUN mkdir /code #创建文件夹code
WORKDIR /code #设置工作目录
ADD requirements.txt /code/ #requirements.txt为项目额外需要的依赖包,将其添加到code文件夹
RUN pip install -r requirements.txt #code文件夹下运行pip install安装依赖包
ADD . /code/ #将当前目录文件添加到code文件夹
requirements.txt编写
1
2
3
4
Django>=2.0  #下载django对应版本
djangorestframework
dwebsocket
Pillow #需要的依赖包,前面三个是我项目需要的包,实际编写应根据自己项目需要的,写不全也不要紧,docker-compose build的时候会提示缺少什么包的
docker-compose.yml编写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: '3'  #版本

services: #各个服务
db: #数据库服务名
image: postgres #数据库镜像,根据需要可以选择sql,若是sqlite3则不用数据库镜像
web: #后端服务名
build: . #docker-compose build时在当前目录build
command: python3 manage.py runserver 0.0.0.0:8000 #docker-compose up时执行的命令
volumes:
- .:/code #路径映射
ports:
- "8000:8000" #端口映射
depends_on:
- db #服务依赖
Django默认数据库设置

修改settings.py中的数据库默认设置

1
2
3
4
5
6
7
8
9
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres', #数据库
'USER': 'postgres',
'HOST': 'db', #主机名,即在docker-compose中的db服务
'PORT': 5432, #服务器端口
}
}

具体可参考
https://shenxgan.gitbooks.io/django/content/publish/2015-07-13-django-mysql.html
最终你的django项目里应该有

  • Dockerfile
  • requirements.txt
  • docker-compose.yml

处于同一目录下

后台部署

将项目文件夹拷贝到服务器上,进入项目文件夹,执行
sudo docker-compose up
即构建并启动项目
sudo docker-compose build
为构建项目
sudo docker-compose restart
为重启项目

紧张刺激的掉坑环节

sudo docker-compose up的时候可能会报错

1
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

这个报错应该是跟docker和docker-compose是否以管理员权限开启有关,遇到报错可以尝试
先关掉docker,管理员权限,非管理员权限和系统的docker
service docker stop
sudo service docker stop
systemctl stop docker
再以管理员权限重启或开启docker
sudo service docker start/restart
sudo systemctl start docker
sudo systemctl restart docker
最后
sudo docker-compose up
应该就可以了