欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

docker部署Python Django前后端分离项目

程序员文章站 2022-06-13 16:58:15
...

一、部署准备

1、创建项目目录,将资源都放在该目录下

tree docker/
docker/
├── backend
│   ├── Dockerfile
│   └── start.sh
├── docker-compose.yaml
└── front
    ├── Dockerfile
    └── nginx

3 directories, 4 files

2、安装docker(centos)

#将yum包更新至最新
$ sudo yum update
#卸载旧版本docker(如果之前有安装)
$ sudo yum remove docker  docker-common docker-selinux docker-engine
#安装依赖包
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#获取docker-ce的yum源
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#筛选自己所需要的docker版本
$ yum list docker-ce --showduplicates | sort -r
#安装docker
$ yum install -y docker-ce-版本号
#启动并设置开机自启
$ systemctl start docker && systemctl enable docker
#配置镜像加速
$ vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://yeopv49g.mirror.aliyuncs.com"]
}
$ systemctl daemon-reload && systemctl restart docker

二、制作镜像

1、制作后端程序镜像

$ cd docker/backend/
$ vim Dockerfile
FROM python:3.7-alpine #设置基础镜像
#更换安装源并安装基础依赖包
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories\
    && apk --update add --no-cache libxml2-dev libxslt-dev libffi-dev gcc musl-dev libgcc \
    && apk add --no-cache openssl-dev curl jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev

WORKDIR /app   #设置工作目录

COPY . /app   #将代码全部放到容器上
#安装pipenv并根据pipfile.lock安装程序所需依赖包
RUN pip install  pipenv --no-cache-dir -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com \
    && cd senguocashier-backend/ \
    && pipenv install --deploy  --system --ignore-pipfile \ 
    && rm -fr ~/.cache/pip* \   #删除pip缓存,缩小镜像
    && rm -fr /tmp
RUN chmod +x /app/start.sh
CMD ["./start.sh"]   #用脚本启动程序

    start.sh启动脚本内容:

$ cat start.sh
python ./code/manager.py runserver

   Dockerfile关键点说明:

docker本身就是虚拟环境,所以在制作镜像的时候使用pipenv install --system将依赖安装到容器的python环境中,不需要创建虚拟环境进行安装。

   制作镜像过程中无法安装pillow的问题请参照pillow报错处理方式

   启动容器:    

$ docker build -t 镜像name .
$ docker run --name 容器name -d 镜像name

  (未完待续)