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

web搭建

登陸docker hub,申請一個倉庫python

本次試驗環境:阿里雲服務器 Centos7.2 x86_64mysql

所需知識:python,redis,mysql,django,nginx,linux操做知識linux

預備工做

安裝dockernginx

# 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下載所需鏡像(因爲一些鏡像下載速度過慢,我搭建了本身的鏡像倉庫,拉去會快一點)git

  • daba0007/nginx
  • daba0007/redis
  • daba0007/python2.7(若是環境有須要可使用daba0007/python3.6)
  • daba0007/mysql
  • daba0007/django

拉取完以後肯定試驗的目錄github

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

配置

  1. 建立mysql容器

建立容器以前要把原先的數據庫放置到mysql文件夾中,這一步須要把原先的數據從原來的數據庫中導出來,我使用的是mysql,以前數據在form數據庫中,操做以下:web

# 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的容器,其中redis

  • -v指定容器的配置文件目錄與數據目錄
  • -e設置環境變量,在上述腳本中爲初始化數據庫密碼
  • -p指定端口,主機端口:容器內端口
  • -d建立一個守護態的容器,不會由於退出而結束

完成這一步以後須要將數據庫的數據導入dabamysql容器中sql

# 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的容器docker

  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

相關文章
相關標籤/搜索