CentOS7基于docker部署django

简介

docker部署Django比传统部署会更灵活一点,如果没有了解过docker的朋友,在中间有些命令不懂的可以先百度

环境介绍

CentOS7.4 基础服务器版本
Docker
Django 此为docker镜像
Nginx 此为docker镜像
MySQL 此为docker镜像

Docker安装配置

下载安装docker

 yum -y install docker vim

启动docker,并设置开机启动

systemctl start docker
systemctl enable docker

下载所需镜像

docker pull centos
docker pull nginx
docker pull mysql # 如果下载别的版本MySQL加写成,如:mysql:5.6

centos镜像进行配置Django

  • 为方便以后使用这里分为SSH和Django两步来做

SSH镜像制作

  1. 新建ssh_image文件夹并进入
mkdir -p create_docker_image/ssh_image
cd create_docker_image/ssh_image

在这里插入图片描述

  1. 新建Dockerfile、run.sh两个文件,并附于run.sh执行权限
touch Dockerfile run.sh
chmod +x run.sh

在这里插入图片描述

  1. run.sh写入内容(vim不会使用的自行百度)
vim run.sh
#! /bin/bash
/usr/sbin/sshd -D

在这里插入图片描述

  1. Dockerfile写入内容
vim Dockerfile
# 设置继承镜像
FROM centos:latest

# 提供一些作者的信息
MAINTAINER wallie@910

# 开始运行命令
RUN yum install -y openssh-server
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key
RUN echo "123456" | passwd --stdin root
ADD run.sh /run.sh
EXPOSE 22

CMD ["/run.sh"]

在这里插入图片描述

  1. 创建镜像
docker build -t sshd:centos .

在这里插入图片描述

Django镜像制作

“ m y s i t e ” 的 项 目 建 议 自 己 提 前 搭 建 好 , 直 接 拷 贝 过 来 用 , 但 针 对 有 路 径 需 要 做 一 些 调 整 \color{red}{“mysite”的项目建议自己提前搭建好,直接拷贝过来用,但针对有路径需要做一些调整} mysite
可以参考我的Django+uwsgi+Nginx部署(制作中…)

  1. 新建django_centos文件夹并进入
cd
mkdir -p create_docker_image/django_centos
cd create_docker_image/django_centos
  1. 新建Dockerfile、run.sh两个文件,并附于run.sh执行权限
touch Dockerfile web_run.sh
chmod +x run.sh

在这里插入图片描述

  1. run.sh写入内容(vim不会使用的自行百度)
vim web_run.sh
#! /bin/bash

# 同步数据库
python manage.py makemigrate --noinput
python manage.py migrate --noinput
# uwsgi启动django
uwsgi mysite.ini

/usr/sbin/sshd -D
tail -f /dev/null

在这里插入图片描述
4. Dockerfile写入内容

vim Dockerfile
# 指定操作的镜像
FROM sshd:centos

# 创建文件夹
RUN mkdir -p /data/wwwroot  # 项目存放路径
RUN mkdir -p /data/static
RUN mkdir -p /data/media

# 拷贝文件, 
COPY mysite /data/wwwroot/mysite # “mysite” 为你自己的django项目可以自行更改
COPY web_run.sh /data/wwwroot/mysite/web_run.sh	

#这句指令相当与:cd /data/wwwroot/mysite
WORKDIR /data/wwwroot/mysite

# 安装软件
RUN yum install epel-release -y
RUN yum -y install gcc python36 net-tools
RUN yum -y install python36-devel mysql-devel
RUN ln /usr/bin/python3.6 /usr/bin/python -f
RUN cp /usr/bin/yum /usr/bin/yum.bak
RUN cp /usr/libexec/urlgrabber-ext-down /usr/libexec/urlgrabber-ext-down.bak
RUN cp /usr/bin/yum-config-manager /usr/bin/yum-config-manager.bak
RUN sed 's/python/python2/g' /usr/bin/yum.bak > /usr/bin/yum
RUN sed 's/python/python2/g' /usr/libexec/urlgrabber-ext-down.bak > /usr/libexec/urlgrabber-ext-down
RUN sed 's/python/python2/g' /usr/bin/yum-config-manager.bak > /usr/bin/yum-config-manager
RUN pip3 install --upgrade pip
RUN pip3 install django
RUN pip3 install django_crontab
RUN pip3 install pymysql
RUN pip3 install mysqlclient
RUN pip3 install uwsgi
RUN pip3 install cryptography

EXPOSE 8080

# linux运行会报错修复
RUN cp /usr/local/lib64/python3.6/site-packages/django/db/backends/mysql/operations.py /usr/local/lib64/python3.6/site-packages/django/db/backends/mysql/operations.py.bak
RUN cp /usr/local/lib64/python3.6/site-packages/django/db/backends/mysql/base.py /usr/local/lib64/python3.6/site-packages/django/db/backends/mysql/base.py.bak
RUN sed 's/query.decode/query.encode/g' /usr/local/lib64/python3.6/site-packages/django/db/backends/mysql/operations.py.bak > /usr/local/lib64/python3.6/site-packages/django/db/backends/mysql/operations.py
RUN sed '35,36d' /usr/local/lib64/python3.6/site-packages/django/db/backends/mysql/base.py.bak  > /usr/local/lib64/python3.6/site-packages/django/db/backends/mysql/base.py

在这里插入图片描述

  1. 创建镜像
docker build -t web:django .

Nginx镜像制作

  1. 新建django_nginx文件夹并进入
cd
mkdir -p create_docker_image/django_nginx
cd create_docker_image/django_nginx

在这里插入图片描述

  1. Dockerfile写入内容
vim Dockerfile
# 指定操作的镜像
FROM docker.io/nginx

# 作者
MAINTAINER zhoufan

# 系统部署
RUN mkdir -p /data/static

在这里插入图片描述

  1. 创建镜像
docker build -t web:nginx .

在这里插入图片描述

MySQL镜像制作

  1. 新建django_nginx文件夹并进入
cd
mkdir -p create_docker_image/django_nginx
cd create_docker_image/django_nginx

在这里插入图片描述

  1. 新建Dockerfile、setup.sh两个文件,并附于setup.sh执行权限
touch Dockerfile setup.sh
chmod +x setup.sh
  1. Dockerfile写入内容
    在这里插入图片描述
  2. setup.sh写入内容
vim setup.sh
#!/bin/bash

set -e

# 启动mysql
service mysql start

# 用来检测问题
echo '导入开始'
# 输入数据库project.sql
mysql < /root/project.sql
echo `service mysql status`

# 用来检测问题
echo '开始修改密码'
# 导入数据库privileges.sql
mysql < /root/privileges.sql
echo `service mysql status`
tail -f /dev/null

在这里插入图片描述

  1. project.sql数据库

这 个 可 以 使 用 自 己 的 数 据 库 进 来 , 如 果 是 从 别 的 数 据 库 导 出 来 的 , 必 须 确 认 数 据 库 文 件 开 关 是 否 有 创 建 库 文 件 和 使 用 库 文 件 的 语 句 \color{red}{这个可以使用自己的数据库进来,如果是从别的数据库导出来的,必须确认数据库文件开关是否有创建库文件和使用库文件的语句 } 使使
就 是 p r o j e c t . s q l , 前 两 句 。 不 懂 s q l 语 句 请 自 行 百 度 吧 \color{red}{就是project.sql, 前两句。不懂sql语句请自行百度吧} project.sqlsql

vim project.sql
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `project` default character set utf8 collate utf8_general_ci;
USE `project`;

DROP TABLE IF EXISTS `abc`;

CREATE TABLE `abc` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(25) DEFAULT NULL,
  `deptid` int(11) DEFAULT NULL,
  `salary` float DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

LOCK TABLES `abc` WRITE;

UNLOCK TABLES;

在这里插入图片描述

  1. privileges.sql数据库

这 个 库 文 件 是 设 置 本 地 和 远 程 r o o t 帐 号 和 密 码 的 , “ t e s t ” 为 密 码 \color{red}{这个库文件是设置本地和远程root帐号和密码的,“test”为密码 } roottest

vim privileges.sql
use mysql;
/*修改root密码*/
update user set password=password('test') where user='root' and host='localhost'; 
/*添加root远程登陆*/
grant all privileges on *.* to root@'%' identified by 'test';
flush privileges; 

在这里插入图片描述
好了镜像三个主程序的镜像已经做完了,可以进行容器运行了

容器的启动配置

把启动命令分别写到不用的sh文件中,方便修改

cd
mkdir django_run
cd django_run

在这里插入图片描述

数据库容器启动

  1. 配置启动文件
    start_db.sh
vim start_db.sh
#!/bin/bash
docker run --restart=always -d --name db  --privileged=true web:mysql 

--restart=always    这是保持容器自动启动
--name db       容器的别名改为db
--privileged=true   获取mysql容器权限
-v          指定映射文件夹,这里指定的是库文件到本地
web:mysql      镜像名

在这里插入图片描述

  1. 运行启动文件
sh start_db.sh
docker ps

如下图显示就正常运行了,如指定容器为空,请查看最后的命令操作查看错误和删除容器
在这里插入图片描述

Django启动

因 为 d j a n g o 与 数 据 库 d b 有 链 接 , 所 以 数 据 库 运 行 成 功 后 , d j a n g o 才 能 运 行 , 不 然 会 报 错 \color{red}{因为django与数据库db有链接,所以数据库运行成功后,django才能运行,不然会报错} djangodbdjango

  1. 配置启动文件
vim start_web.sh
#!/bin/bash

docker run --restart=always -d --name web --link db -p 8000:8000 -v /data/nginx/static/:/data/static web:django

--restart=always    这是保持容器自动启动
--name web     容器的别名改为web
--link db      指定db的关联,django中连接数据的IP地址可以直接写成“db”
-p 8000:8000     映射端口到主机,可不用加
web:django     镜像名

在这里插入图片描述

  1. 运行启动文件
sh start_web.sh
docker ps

在这里插入图片描述

Nginx启动

因 为 N g i n x 与 d j a n g o 有 链 接 , 所 以 d j a n g o 运 行 成 功 后 , N g i n x 才 能 运 行 , 不 然 会 报 错 \color{red}{因为Nginx与django有链接,所以django运行成功后,Nginx才能运行,不然会报错} NginxdjangodjangoNginx

  1. 配置启动文件
vim start_nginx.sh
#!/bin/bash

docker run --restart=always -d --name nginx --privileged=true -p 80:80 -v /data/nginx/conf.d/web.conf:/etc/nginx/nginx.conf -v /data/nginx/logs:/var/log/nginx -v /data/nginx/statc:/data/static --link web web:nginx

--restart=always    这是保持容器自动启动
--name web     容器的别名改为nginx
--link db      指定django的关联,nginx中连接django的IP地址可以直接写成“web”
-p 80:80     映射端口到主机
web:django     镜像名

在这里插入图片描述
2. 运行启动文件

sh start_nginx.sh
docker ps

这时,你的Django搭建没有问题的话你基本就可以看到你自己的网页了
在这里插入图片描述

参考资料:
docker_mysql选择版本:https://hub.docker.com/_/mysql/


本人的经验分享,希望可以帮助到你们,如何不对的地方,可以评论留言,帮我指正一下,如果帮助了你,请给我点个赞吧

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值