docker单容器部署django项目+移植

说明:此项目部署采用docker下centos7镜像,然后以此镜像创建一个容器,在这里容器里面再安装各种项目所需环境和软件,主要有nginx、python、uwsgi、redis。数据库采用远程连接宿主机的数据库。此次操作跟在宿主机(虚拟机)下操作部署基本一样。只是为了熟悉一下docker操作。不同的是可以打包镜像然后移植到其他服务器上运行。

1、拉取centos7,进入centos7容器
docker pull centos:centos7
docker ps或者docker ps -a查询一下有没有要启动的容器名称或ID号。
没有:运行下面语句:在镜像centos7下创建一个名centos-d的容器并运行
docker run -it --name centos-d centos:centos7

停止,启动,再重新进入容器:

2、这里centos7是裸的啥也没有,安装一些需要的工具:
vim:      文本编辑器
net-tools:网络工具 - 用于查看网络 和 ping其他网络
python36: Python解释器 - 用于安装Django项目的依赖
git:      版本控制工具 - 用于拉取项目
yum install vim -y
yum install net-tools -y
yum install python36 -y
yum install git -y

下载完git后把代码下载到本地。
git clone 地址 或 git clone -b 分支 地址
python36安装后默认软连接那些都建好了,直接可以使用pip3,附带两个命令
pip3 freeze > requirements.txt    列出当前项目所用到的所有的包及版本号
pip3 install -r requirements.txt  下载requirements.txt里所有的库
查询python36默认的安装路径可以使用下面方法。在安装django情况下输入命令就可以知道其路径
python -c "import django;print(django)"

python库都安装之后就可以运行了。

在虚拟环境下
pip freeze > requirements.txt
pip install -r requirements
ifconfig或者docker inspect centos-d 可以查看容器的IP地址,然后浏览器就可以访问了。

3、利用nginx和uwsgi部署,vue打包文件dist已放在django项目目录下面
这里是前后端分离,不分离部署方式也是一样的。

pip3 install uwsgi  
遇到报错Exception: you need a C compiler to build uwsgi
先装yum install gcc,yum install python36-devel(版本有要求),pip3 install wheel之后安装uwsgi成功。接下来新建并编写uwsgi.ini配置项目了,可以从宿主机copy。docker cp 路径/文件名  容器ID: 项目路径.。

我这里没有配置home即python的环境变量, 会自己去找默认的python路径。

一般正常都会创建python的虚拟环境。利用workon命令切换不同的虚拟环境。在宿主机上是这样做的。docker里面可不再使用virtualenv创建python虚拟环境。简单化。因为这里本身就是一个容器。一般这个容器里面就运行一个项目。所以有一个虚拟环境就够了。

 在项目路径下创建这几个文件依次是启动、重启、停止uwsgi。给与可执行权限。然后就可以启动项目了。

接下来继续安装nginx  下载安装包之后./configure,  中间有报错http rewrite  .... PCRE library需要安装依赖 yum install pcre-devel
继续./configuser, 报错HTTP gzip module ... zlib library,需要安装依赖。yum install zlib-devel
然后 make&&make install  OK
然后配置nginx。部分配置。这里没有涉及到域名和证书。都是本地。简单配置。dist下是vue打包后的文件。前端路由默认都以api开头的。所以搞个转发。

 这样启动之后就可以访问了。

4、打包导出容器移植到另外一台linux服务器。

导出: docker  export  容器名或者容器ID > 导出的路径以及tar包的名字

使用MobaXterm或者其他工具上传到另外一台服务器。

导入到该台服务器:

docker import  tar包路径  镜像名  不指定版本默认为latest

docker import  tar包路径  镜像名:版本号

docker images 查看导入成功。

docker load 命令也可以导入一个镜像存储文件,但是跟docker import 命令是有区别的:

docker import:丢弃了所有的历史记录和元数据信息,仅保存容器当时的快照状态。在导入的时候可以重新制定标签等元数据信息。
docker load:将保存完整记录,体积较大。

接下来可以用这个镜像直接生成容器了。,验证项目是否能跑 。

 创建容器进入启动项目:访问成功。

1、查看文本文件头部n行 

head -n 200 filename   #--200可替换为任一数字

2、查看文本文件末尾n行

tail -n 200 filename   #--200可替换为任一数字

下一篇:使用docker-compose部署Django + Uwsgi + Nginx + Redis (多容器组合)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值