記錄一次使用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 即可開啓服務。

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