之前部署Web应用,没用docker,直接在服务器上部署,使用了fabric+nginx+supervisor+gunicorn部署,可查看我写过的一篇博客:部署Web应用。但后来了解了docker,为其“Build,Ship and Run Any App,Anywhere”的思想所折服,觉得这个太牛逼了,所以我也尝试一下自己用docker部署Web应用。本篇文章为了记录我用docker部署web应用的过程和心得,其中涉及到多个服务,如Nginx、Gunicorn、Python、Redis、Mysql等,每个服务都对应一个docker镜像,本文使用了docker-compose。
##一、网络架构
我用Visio大概画了一下我的网络架构图:
我构建的容器:
- Nginx容器;
- Web server容器
- Redis容器
- memcached容器
- MySQL容器
如果把所有应用都部署到一个应用中,可能会更简单,但不同容器之间就稍微复杂点。首先你要考虑好容器之间的依赖关系,比如nginx要依赖web服务器,如果web服务器不正常工作,那nginx就不能正常工作;web服务器要依赖于数据库等等;其次,要设置好容器间的数据共享问题。比如对于web应用的静态资源,怎么让nginx实现反向代理。
带着这些疑问,开始部署。
##二、环境:
准备docker的环境。
- Ubuntu 16.04 (主机环境)
- docker 17.06.0
- docker-compose 1.14.0
- compose file 版本: version 3
对于docker的作用和介绍可参考官网,也可参考我自己写的简易介绍:Docker service。
要注意你的docker版本以及composefile版本,因为不同的版本,语法可能略有不同。我之前在配置共享数据卷的时候就遇到过坑,比如在version 3中删掉了volumes_from,我还不知道有版本差异,所以怎么配置都不对。更详细的请看官网:dockerfile 版本。
###1、工程结构
├── blog
│ ├── account
│ ├── blog
│ ├── dailyblog
│ ├── Dockerfile
│ ├── gunicorn.conf
│ ├── manage.py
│ ├── media
│ ├── requirements.txt
│ ├── start.sh
│ └── static
├──