当前位置 博文首页 > wang785994599的博客:记录一次使用docker-compose部署django前
使用django写了一个前后端分离的个人博客,正好赶上之前买的阿里云的服务器到期,又重新装了一次环境,总之很麻烦,正好最近在学docker,试一下用docker部署。
个人感觉使用docker部署的好处就在于一次性部署,随处可用,在windows下生成的镜像也可以迁移到Linux。
博客使用了django-rest-framework框架进行后端程序编写,缓存用到了redis,数据存储在mysql,使用Nginx做反向代理与静态服务器,uwsgi做后端服务器,elasticsearch做搜索后端,使用了异步框架celery。
myslq,redis,es,python,nginx分别使用独立的容器。
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML
文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
由于这是一个多容器部署,所以使用docker-compose。
首先自己制作一个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作为静态服务器,conf本地编辑好放在Dockerfile同级目录下即可,不用Build
Dockerfile如下
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
COPY ./static_server /data/static_server
EXPOSE 80
注意每个:之后都要跟一个空格
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