docker-web搭建(mysql,redis,django,nginx)

怎甘沉沦 提交于 2019-12-05 04:16:12

web搭建

登录docker hub,申请一个仓库

本次试验环境:阿里云服务器 Centos7.2 x86_64

所需知识:python,redis,mysql,django,nginx,linux操作知识

预备工作

安装docker

# vim /etc/yum.repos.d/docker.repo
[dockerrepo]

name=Docker Repository

baseurl=https://yum.dockerproject.org/repo/main/centos/7/

enabled=1

gpgcheck=1

gpgkey=https://yum.dockerproject.org/gpg

 

# yum install docker-engine -y

systemctl restart docker

docker安装成功之后,使用docker下载所需镜像(由于一些镜像下载速度过慢,我搭建了自己的镜像仓库,拉去会快一点)

  • daba0007/nginx
  • daba0007/redis
  • daba0007/python2.7(如果环境有需要可以使用daba0007/python3.6)
  • daba0007/mysql
  • daba0007/django

拉取完之后确定试验的目录

# mkdir /daba0007
# cd /daba0007/
# mkdir mysql redis nginx web

配置

  1. 创建mysql容器

创建容器之前要把原先的数据库放置到mysql文件夹中,这一步需要把原先的数据从原来的数据库中导出来,我使用的是mysql,之前数据在form数据库中,操作如下:

# cd mysql
# mkdir conf.d
# cd conf.d
# mysqldump -u root -p --database form > form.sql
# cd ..
# cat mysql.sh
#!/bin/bash

docker run --name dabamysql \
-v $(pwd)/conf.d:/etc/mysql/conf.d \
-v $(pwd)/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3307:3306 \
-d daba0007/mysql

之后会创建一个名为dabamysql的容器,其中

  • -v指定容器的配置文件目录与数据目录
  • -e设置环境变量,在上述脚本中为初始化数据库密码
  • -p指定端口,主机端口:容器内端口
  • -d创建一个守护态的容器,不会因为退出而结束

完成这一步之后需要将数据库的数据导入dabamysql容器中

# docker inspect --format "{{.State.Pid}}" dabamysql
8971
# nsenter --target 8971 --mount --uts --ipc --net --pid
root@3d85f4c9f4f8:/# cd /etc/mysql/conf.d/
root@3d85f4c9f4f8:/etc/mysql/conf.d# mysql -uroot -p form < form.sql
  1. 创建redis容器
# cd redis
# cat redis.sh
#!/bin/bash

docker run --name dabaredis -d daba0007/redis

之后会创建一个名为dabaredis的容器

  1. 创建 django 容器

首先基于daba0007/python2.7的镜像使用dockerfile来安装 django 所需的环境并生成一个新的镜像,需要一个编写完成的django项目(不要纠结我的django,我就花了两个钟头随便写了一个能够实现连接mysql实现查询的django,难看就难看吧T^T),可以使用tar进行压缩比如我的mysql目录

# cd mysql
# ls
dabaweb.tar.gz dockerfile start.sh 

dockerfile在生成新的镜像时会解压这个tar包,所以不用担心解压问题。需要关心的是这个requirements.txt文件,在之前编写django的时候会有许多通过pip安装的服务,写入requirement中,然后在脚本执行时会在新容器中安装,编写dockerfile文件

FROM daba0007/python2.7

MAINTAINER daba0007

ADD dabaweb.tar.gz /usr/src/

WORKDIR /usr/src/dabaweb

RUN pip install --no-cache-dir -r requirement.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

然后编写执行脚本

#!/bin/bash
#
docker exec -d dabamysql mysql -uroot -p123456 -e "create database form;"
docker build -t daba0007/django-app .
docker run --name dabadjango \
-v /usr/src/dabaweb \
-v /usr/src/dabaweb/static \
--link dabamysql:mysql \
--link dabaredis:redis \
-p 12000:8000 \
-d daba0007/django-app  /usr/local/bin/uwsgi --http :8000 --chdir /usr/src/dabaweb -w dabaweb.wsgi

其中:

  • -link能够进行容器间的通信,容器名:别名,然后启动一个uwsgi来启动django程序。
  • django中setting的参数需要注意,因为我使用的mysql是通过容器端口来连接的,连接的数据库是mysql,所以host也是写的mysql(因为这个500的问题搞了我一个晚上T^T)
    DATABASES = {
    
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'form',
            'USER':'root',
            'PASSWORD':'123456',
            #'HOST':'127.0.0.1'
            'HOST':'mysql',
            'PORT':'3306',
        }
    
    }
    
    
  • 之后就可以通过访问网址http://你的ip:12000看到网站,不过这时候的网站是没有加载样式的,还需要nginx来帮忙处理静态文件
  • cache使用
    from django.core.cache import cache         # 引入缓存模块
    cache.set('k', '12314', 30*60)              # 写入key为k,值为12314的缓存,有效期30分钟
    cache.has_key('k')                          # 判断key为k是否存在
    cache.get('k')                              # 获取key为k的缓存
    
  1. 创建 nginx 容器

nginx容器首先要配置好conf文件,放置在nginx-conf中

cd nginx
mkdir nginx-conf
cat django_project.conf
server {

    listen 80;
    server_name localhost;
    charset utf-8;
    root   /usr/src/dabaweb;
    access_log  /var/log/nginx/django.log;

    location ^~ /static {
        alias /usr/src/dabaweb/static;
    }

    location / {
        proxy_pass http://web:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

然后编写dockerfile文件,使用daba0007/nginx创建一个nginx配置完毕的容器

FROM daba0007/nginx

MAINTAINER daba0007

RUN rm /etc/nginx/conf.d/default.conf
ADD nginx-conf/ /etc/nginx/conf.d/

然后再编写脚本

#!/bin/bash

docker build -t daba0007/dabanginx .
docker run --name dabanginx-server \
--link  dabadjango:web  \
-v /www/static \
--volumes-from dabadjango \
-p 8888:80 \
-d daba0007/dabanginx

至此,所有的容器都创建完毕,之后通过访问http://你的ip:8888/就可以看到网址了(前提是你的django的url不要写错)

我的代码都保存在github上,有兴趣的朋友可以下载指导https://github.com/daba0007/mydocker

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!