docker实现多容器配置Django+MySQL+NGINX
2018-07-18 本文已影响185人
蕤秋
一、安装docker并pull合适的Ubuntu镜像
需要修改docker的镜像源进行加速,修改之后建议pull Ubuntu的版本为14.04(trusty),这个版本的进行MySQL和NGINX安装时不容易出现错误,16.04会出现修改完容器镜像源无法update,update之后无法安装MySQL的问题
sudo docker pull ubuntu:trusty
二、创建三个容器分别命名为MySQL-node,NGINX-node,Django-node
对于这三个容器,Django-node会调用MySQL-node的数据库服务,所以需要在创建django-node容器的时候添加link参数链接到MySQL-node上,同样的,对于NGINX-node,NGINX要代理Django的服务,所以需要在创建NGINX-node的时候添加link参数链接到Django-node上
sudo docker run -itd --name mysql-node ubuntu:trusty
sudo docker run -itd --name django-node --link mysql-node:mysql ubuntu:trusty
sudo docker run -itd --name nginx-node --link django-node:django ubuntu:trusty
三、修改容器的镜像源提升安装和更新速度(以MySQL-node为例
从宿主机将sources.list文件复制到容器上
sudo docker cp /etc/apt/sources.list mysql-node:/home
进入容器备份好原本的sources.list文件,并使用新的sources.list进行替换
mv /etc/apt/sources.list /etc/apt/sources.list.backup
cp /home/sources.list /etc/apt/sources.list
清理无用包
apt-get clean
开始更新
apt-get update
四、配置MySQL-node容器的MySQL服务
安装MySQL服务
apt-get install mysql-server
安装MySQL客户端
apt-get install mysql-client
安装MySQL依赖
apt-get install libmysqlclient-dev
到这里MySQL安装完毕,使用以下命名查看服务是否启动
netstat -tap
设置远程登录权限,youpassword为设置的密码
grant all privileges on *.* to root@'%' identified by 'youpassword';
flush privileges;
创建一个测试用数据库
create database `testdb`;
五、配置Django-node容器的服务
安装pip工具
apt-get install pip3
安装django
pip3 install django -i https://pypi.douban.com/simple/
下载pymysql包
git clone https://github.com/PyMySQL/PyMySQL
docker容器中自带的setuptools需要进行更新才可以使用,否则会出现版本过低的问题
pip3 install --upgrade setuptools
安装pymysql
python3 setup.py install
创建一个测试用Django项目
django-admin.py startproject testfile
编辑init.py文件,添加以下内容,使用pymysql替换mysqldb作为MySQL驱动
import pymysql
pymysql.install_as_MySQLdb()
修改setting文件的db设置
DATABASES = {
'default':{
'ENGINE':'django.db.backends.mysql',
'NAME':'testdb',
'HOST':'mysql',
'USER':'root',
'PASSWORD':'youpassword',
'PORT':'3306';
}
}
需要注意的是host部分使用的是mysql-node在本容器下的主机名,可以通过cat /etc/hosts文件查看运行Django项目
cat /etc/hosts
运行Djangoxiangmu
python3 ./manage.py runserver
在做反向代理的时候,NGINX代理的是Django的uwsgi,所以需要现在Django-node上安装uwsgi
pip3 install uwsgi
新建一个名为uwsgi.ini的文件
vim uwsgi.ini
在文件中写入uwsgi的配置信息,这样做可以更好的进行维护
[uwsgi]
chdir = /home/PyMySQL/testfile#chdir用来跳转到Django的目录下
module = testfile.wsgi
socket = :80
processes = 4
threads = 10
enable-threads
master-as-root
使用uwsgi启动Django项目
uwsgi --ini /home/PyMySQL/testfile/uwsgi.ini
六、NGINX-node服务配置
使用宿主机下载NGINX包
wget http://nginx.org/download/nginx-1.15.1.tar.gz
拷贝到容器中
sudo docker cp ./nginx-1.15.1.tar.gz nginx-node:/home/
解压
tar -zvxf nginx-1.15.1.tar.gz
安装编译器
apt-get install gcc
安装支持正则的pcre库
apt-get install libpcre3 libpcre3-dev
安装处理http的zlib库
apt-get install zlib1h-dev
安装支持openssl的库
apt-get install openssl libssl-dev
安装make工具
apt-get install make
开始编译
./configure
生成安装文件
make
开始安装
make install
启动并查看是否启动成功
netstat -tap
进入安装目录下的conf文件夹,首先对nginx.conf进行备份修改conf文件的location,使其指向uwsgi这里暴露的端口要和uwsgi.ini的配置的一致
location / {
include uwsgi_params;
uwsgi_pass django:80;
}
启动NGINX的服务
./usr/local/nginx/sbin/nginx