百度找来的博客,关于docker部署Django的博客一大堆,但是可以说都是垃圾,要么语焉不详、讲的不明不白,要么排版极烂,一看就是复制粘贴,看了也只是浪费时间、自找麻烦。下面的教程是官方教程的翻译和实践(踩坑),写的十分详尽,保证一步步全部解释清楚,实验环境为ubuntu18。
参考官方教程Quickstart: Compose and Django
一、前提准备
1、安装docker
参考 https://github.com/zhongzhh8/Notes/blob/master/docker.md
#安装docker=====
apt install curl
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
#验证docker是否安装成功=====
#查看docker服务是否启动:
systemctl status docker
#若未启动,则启动docker服务:
sudo systemctl start docker
#测试经典的hello world:
sudo docker run hello-world
2、安装docker compose
#安装
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
#验证
docker-compose -v
二、创建项目&配置docker
1、创建项目目录
创建一个空的项目目录,该目录的内容将用于构建应用的镜像
cd /home
mkdir Try_Docker_Project
项目目录为/home/Try_Docker_Project
2、创建Dockerfile文件
在项目目录下创建Dockerfile文件,它描述了如何构建这个web应用的镜像。
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -i https://pypi.doubanio.com/simple/ -r requirements.txt
COPY . /code/
注意这里面我在语句
RUN pip install -i https://pypi.doubanio.com/simple/ -r requirements.txt
里换源使用豆瓣源,目的是安装更快(否则很慢而且有可能因为下载超时而失败)
Dockerfile首先是pull一个python3的镜像作为基础进行修改,接着创建一个code目录作为工作目录,将文件requirements.txt
复制到code目录下,然后安装requirements.txt
中包含的库。最后再把当前项目目录下所有内容复制到code目录下。
3、创建requirements.txt文件
在项目目录下创建requirements.txt文件:
Django>=2.0,<3.0
psycopg2>=2.7,<3.0
4、创建docker-compose.yml文件
version: '3'
services:
db:
image: postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
docker-compose.yml文件描述了web应用所需的服务,在这里需要用到的是一个web服务和一个数据库服务。
docker-compose.yml文件还描述了使用的是哪个Docker镜像、如何将它们关联起来、需要将哪些volumes挂载到容器上以及服务的端口映射关系。
三、创建Django项目
在这一部分,将会通过上面的项目文件来创建一个Django镜像、然后运行成一个容器。
1、docker-compose run
在项目目录下,运行命令
sudo docker-compose run web django-admin startproject composeexample .
注意如果原本就已经是root用户,就不需要使用sudo,否则安装Django部分是会出错。
参考https://stackoverflow.com/questions/34759264/the-command-bin-sh-c-sudo-pip3-install-r-requirements-txt-returned-a-non-ze
这条命令,首先会根据docker-compose.yml文件构造web服务,由于web服务依赖于db服务,所以先构建postgres的镜像,然后构建web的镜像,由于相关命令是build: .
,因此会根据项目目录下的Dockerfile
文件来构建web的镜像,按照Dockerfile
文件中的语句逐个执行。最终会生成两个镜像(其实还有个python):
一旦创建了web的服务镜像,docker-compose就会把它运行成一个容器,并且在容器中执行django-admin startproject composeexample
命令创建一个名为composeexample
的项目。
此时项目目录下的内容为:
2、连接数据库
这里需要修改composeexample/settings.py
文件的配置,但是由于赶时间,而且暂时不需要用到数据库,所以直接跳过这一步。
3、启动项目
在项目目录下执行命令:
docker-compose up
这样Django应该就会在8000
端口上运行了,打开浏览器访问localhost:8000
查看运行的容器
docker ps
4、关闭Django服务
直接Ctrl+C