登陆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