记录一次使用docker-compose部署django前后端分离项目

使用django写了一个前后端分离的个人博客,正好赶上之前买的阿里云的服务器到期,又重新装了一次环境,总之很麻烦,正好最近在学docker,试一下用docker部署。
个人感觉使用docker部署的好处就在于一次性部署,随处可用,在windows下生成的镜像也可以迁移到Linux。

项目简介

博客使用了django-rest-framework框架进行后端程序编写,缓存用到了redis,数据存储在mysql,使用Nginx做反向代理与静态服务器,uwsgi做后端服务器,elasticsearch做搜索后端,使用了异步框架celery。
myslq,redis,es,python,nginx分别使用独立的容器。

Docker-Compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML
文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

由于这是一个多容器部署,所以使用docker-compose。

python运行环境容器

首先自己制作一个python3.6.8的镜像作为python运行环境的基础镜像,Dockerfile如下

FROM centos:7.6.1810
ENV PATH $PATH:/usr/local/python3/bin/
ENV PYTHONIOENCODING utf-8
RUN set -ex \
	&& mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup \
	&& curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo \
	&& yum makecache \
	&& sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo \
	&& yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make wget \
	&& yum clean all \
	&& mkdir /usr/local/python3 \
    && wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz \
	&& tar -xvJf  Python-3.6.8.tar.xz && rm -f Python-3.6.8.tar.xz \
	&& cd Python-3.6.8 \
	&& ./configure prefix=/usr/local/python3 \
	&& make && make install \
	&& cd .. \
	&& rm -rf Python-3.6.8

CMD ["usr","bin","bash"]

执行 docker build -t python3.6.8:latest .生成镜像

准备python容器
Dockerfile如下

FROM python3.6.8:latest
COPY ./djangoBlog /data/server/djangoBlog
ENV HOME_PATH /data/server/djangoBlog/djangoBlog
WORKDIR $HOME_PATH
RUN set -ex \
	&& yum -y install mysql-devel gcc gcc-devel python-devel \
	&& pip3  install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com -r ../requirements.txt
EXPOSE 8080
CMD ["uwsgi","--ini","uwsgi.ini"]

不需要build

nginx

nginx作为静态服务器,conf本地编辑好放在Dockerfile同级目录下即可,不用Build
Dockerfile如下

FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
COPY ./static_server /data/static_server
EXPOSE 80

编写docker-compose.yml

注意每个:之后都要跟一个空格

version: "2" 

networks: 
  django: 
services: 
  django-blog: 
    build: django
    networks:  
      - django
    depends_on: 
      - db
    ports: 
      - "8080:8080"
  nginx: 
    build: nginx
    networks: 
      - django
    depends_on: 
      - django-blog
    ports: 
      - "80:80"
  db: 
    image: "mysql:5.6.46"
    networks:  
      - django
    environment: 
      MYSQL_ROOT_PASSWORD: mysqlqwb5251314
    volumes: 
      - $PWD/data:/var/libmysql
    ports: 
      - "3306:3306"
  redis: 
    image: "redis:latest"
    networks: 
      - django
    depends_on: 
      - django-blog
    ports: 
      - "6379:6379"
    volumes: 
      - $PWD/data:/var/libredis
  elasticsearch: 
    image: "elasticsearch:2.4.6"
    networks: 
      - django
    depends_on: 
      - django-blog
    ports: 
      - "9200:9200"
    volumes: 
      - $PWD/data:/var/libes
    

目录结构如下(djangoBlog为项目于代码)
在这里插入图片描述
在docker-compose.yml同级目录下执行docker-compose up -d,等待出现以下输出
在这里插入图片描述
docker ps
在这里插入图片描述
共启动了五个容器,且全部运行正常

导入本地测试数据,查看服务是否可用
在这里插入图片描述
结束。

迁移

只需要将主目录打包到另一台安装了docker和docker-compose的机器下,执行docker-compose up -d 即可开启服务。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章