说明:此项目部署采用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 (多容器组合)