当前位置 博文首页 > wang785994599的博客:记录一次使用docker-compose部署django前

    wang785994599的博客:记录一次使用docker-compose部署django前

    作者:[db:作者] 时间:2021-09-06 18:52

    使用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: xxxxxx
        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 即可开启服务。

    cs