登陸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
拉取完以後肯定試驗的目錄github
# mkdir /daba0007 # cd /daba0007/ # mkdir mysql redis nginx web
建立容器以前要把原先的數據庫放置到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
完成這一步以後須要將數據庫的數據導入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
# cd redis # cat redis.sh #!/bin/bash docker run --name dabaredis -d daba0007/redis
以後會建立一個名爲dabaredis的容器docker
首先基於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
其中:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'form', 'USER':'root', 'PASSWORD':'123456', #'HOST':'127.0.0.1' 'HOST':'mysql', 'PORT':'3306', } }
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的緩存
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