云Linux下安装docker+部署Django前后端项目,完整保姆级教程

这里楼主使用的是centos7环境。

1、如果大家环境上还有旧版本docker的,需要先去卸载执行如下:

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

2、然后使用如下脚本命令安装:

curl -sSL https://get.docker.com/ > get-docker.sh
sh get-docker.sh --mirror Aliyun                                #使用阿里云源

或者使用:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

3、等待安装完成之后,设置docker开机启动,以及启动docker服务:

systemctl enable docker  #设置默认开机启动
systemctl start docker   #启动docker

4、然后检查docker是否安装成功

docker --version

5、紧接着配置国内镜像源,加快下载镜像速度,在

vi /etc/docker/daemon.json

写入如下,输入 :wq 保存退出。

{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn", 		
    "https://registry.docker-cn.com",					
    "https://hub-mirror.c.163.com",      
    "https://mirror.ccs.tencentyun.com",     
    "https://reg-mirror.qiniu.com"         
  ]
}

6、然后执行此配置,重启docker服务。

systemctl daemon-reload  
systemctl restart docker

7、开始拉取镜像,这里先拉取mysql的镜像,输入如下,等待安装完成。

docker pull mysql:5.7.36

8、使用如下命令查看,出现下图则已拉取成功。

docker images

9、先创建一个目录,然后填写配置my.cnf文件。

mkdir docker_mysql_server              #创建一个目录
vi /root/docker_mysql_server/my.cnf      #进入配置
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 作用是禁止域名解析:在mysql的授权表中就不能使用主机名了,只能使用IP
skip-name-resolve
# 设置3306端口
port = 3306
#设置远程访问ip
bind-address=0.0.0.0
# 设置mysql数据库的数据的存放目录
datadir=/var/lib/mysql
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#设置查询操作等不区分大小写
lower_case_table_names=1

10、然后使用如下命令启动一个mysql镜像容器:

docker run -it -d -p 3306:3306 \
-v /root/docker_mysql_server/log:/var/log/mysql \
-v /root/docker_mysql_server/data:/var/lib/mysql \
-v /root/docker_mysql_server/my.cnf:/var/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name the_mysql \
-e TZ=Asia/Shanghai \
--privileged=true \
--restart=always \
mysql:5.7.36

其中

-it -d     -i指的是用于控制台交互,-t支持终端登录,通常和-i参数一起使用,-d为后台运行
-p         用于对外映射容器端口,用法:-p 宿主机端口:容器端口
-v         用于挂载容器目录路径,内外共享目录,用法:-v 宿主机路径:容器路径
-e         用于设置容器环境变量相关配置,用法 -e 环境变量名=变量值
--name      用于指定容器的名称,不是必填项,但是这里需要填写,方便后面配置参数
-e TZ=Asia/Shanghai   设置时区为国内
--privileged=true    使root用户在容器内真正具有root权限
--restart=always     设置容器开机自启
--rm 		   设置停止容器后删除掉容器
如果已经启动了没有开启自启动,可以追加命令 docker update --restart=always 容器名/id

11、输入如下,出现如下,则成功启动。

docker ps

12、然后输入如下,进入容器内部。

docker exec -it 容器名/容器id bash

使用 mysql -uroot -p 然后输入刚刚设置的密码123456登录。

13、这时候可以输入命令,建立后端数据库,输入

CREATE DATABASE `your_db_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

mysql容器默认root带有远程权限,如果还需要创建远程用户的可以输入

grant all privileges on *.* to '用户名'@'%' identified by '密码';

开始拉取nginx镜像

1、输入

docker pull nginx

拉取最新的nginx镜像,等待安装完成。

2、输入

docker images

查看是否拉取下来。

3、然后开始启动nginx容器,创建一个存配置的文件夹,

mkdir docker_nginx_server

4、这里先是启动容器,参数带好--rm,停止容器时删掉,然后去容器内部查看配置文件目录,然后复制出来,再重新启动新容器挂载文件夹,输入:

docker run -it -d -p 80:80 --rm -e TZ=Asia/Shanghai --name the_nginx nginx

5、输入如下,查看是否启动成功。

docker ps

6、浏览器输入云主机ip,出现如下,则证明启动成功。

7、然后进入容器内部查看配置文件,方便配置环境,这里楼主直接写出了。

/etc/nginx         		 #nginx内部配置文件目录
/usr/share/nginx/html    #静态文件目录
/var/log/nginx			 #运行日志目录

8、然后开始配置,从容器内目录复制到本地来。

docker cp the_nginx:/etc/nginx/ /root/docker_nginx_server/nginx_conf   #映射配置环境
docker cp the_nginx:/usr/share/nginx/html ./docker_nginx_server/html   #映射静态文件目录
docker cp the_nginx:/var/log/nginx ./docker_nginx_server/log           #映射运行日志目录

其中命令格式为: docker cp 容器名/ID:容器目录 本地目录

开始重新挂载目录,实现实时共享目录。

9、停止掉nginx容器,输入命令:

docker stop the_nginx

然后再重新启动,以挂载目录方式。

docker run -it -d -p 80:80 --name the_nginx  \
-v /root/docker_nginx_server/nginx_conf:/etc/nginx \
-v /root/docker_nginx_server/html:/usr/share/nginx/html \
-v /root/docker_nginx_server/log:/var/log/nginx \
-e TZ=Asia/Shanghai \
--restart=always  \
nginx

10、然后把前端文件拷贝到

cp -r /本地前端文件路径/* /root/docker_nginx_server/html

11、配置后端服务,

vi /root/docker_nginx_server/nginx_conf/conf.d/default.conf

输入如下到server块中

location  /api/ { 
 include    /etc/nginx/uwsgi_params;          #注意,这里填的是容器内部的绝对路径
 uwsgi_pass   127.0.0.1:9001;              	#后面还要改
 }

开始配置后端服务:

这里使用的是py3环境+uwsgi,所以先拉取python3镜像。

1、输入

docker pull python:3.9.9

2、然后使用

docker images

查看是否下载成功。

3、开始运行py3容器。输入如下

docker run -it -d --name the_uwsgi \
-v /pycode_s1/pytestcode:/py_code \
-e TZ=Asia/Shanghai \
--restart=always  \
python:3.9.9

其中  -v 是把本地存放后端代码目录映射到py3容器内部的新开辟的目录,这里不需要对外映射端口,前端服务器  和   数据库  对外映射即足够。

4、输入

docker ps

查看是否运行成功。

5、这里记得把后端代码的  uwsgi.ini  文件里,通信模式改为   socker = 0.0.0.0:9001

6、使用  git pull  拉取一下更新,嫌麻烦的同学可以直接本地自己vim改了。

7、进入后端容器配置需要的依赖库,输入

docker exec -it the_uwsgi bash

进入到刚刚挂载的目录  cd py_code

8、然后执行如下,用的是国内的清华源。

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn

成功安装。

9、安装完依赖包后使用,(代码里的settings下的数据库ip要对准好mysql容器的ip,查看容器ip: docker network inspect bridge  the_mysql的ip,然后vi进入代码修改)

python manage.py makemigrations                  #生成迁移文件
python manage.py migrate                         #执行迁移文件
python manage.py runserver                       #启动

生成迁移文件,在执行迁移文件,最后输入测试是否能启动。

10、然后开始安装uwsgi服务,输入

​
pip install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn
​

等待安装成功,如下图。

11、然后使用

uwsgi uwsgi.ini         #启动uwsgi服务
ps -ef |grep uwsgi      #查看进程是否启动

启动uwsgi服务。然后使用查看是否启动成功。(配置文件uwsgi.ini可参考另一篇Django本地部署教程

12、查看

tail -n 20 uwsgi.log

查看是否成功启动服务。

这里楼主为了防止关机后容器启动,容器的ip改变,所以自定义一个bridge网络模式。

13、输入

docker network create mynet

创建一个自定义网络。

14、输入

docker network ls

查看是否建立成功。

15、然后把运行的容器加入到此网络中,依此执行命令如下

docker network connect mynet the_nginx    #加入到新网络
docker network connect mynet the_uwsgi
docker network connect mynet the_mysql
docker network disconnect  bridge the_nginx    #从原网络断开
docker network disconnect  bridge the_uwsgi
docker network disconnect  bridge the_mysql

16、查看新网络是否加入成功。

 docker network inspect mynet              #查看某个容器网络
 docker network ls                         #查看所有的容器网络

出现则加入成功。

17、查看原网络是否断开连接执行

docker network inspect bridge

18、然后修改配置,然后修改配置,后端连接数据库ip改成此时的数据库的容器名the_mysql,本地ide修改 git push ,然后云主机 git pull 即可, 然后nginx也配置改成后端服务的容器名即可,如下。docker会自动去解析这个容器别名到对应的容器ip,所以不用担心重启容器ip改变的问题。(嫌麻烦同学本地vim修改即可,不用在修改拉取)

abaaf0a2c1a2dd6d43c60bbb249fb7cc.png 

19、重新启动,即可。

docker restart the_nginx

20、访问云服务主机ip看到前端页面,能交互即可成功。

可能出现的问题:

1、启动uwsgi发现端口被占用

2、执行如下,杀掉进程。

pkill -9 -f uwsgi

3、也可以执行如下。

apt-get install -y psmisc          #容器内先下载该命令
fuser -k 9001/tcp                  #杀死占用端口进程

希望我的教程可以帮助到你,祝你每天开心。

猜你喜欢

转载自blog.csdn.net/sasafa/article/details/125677824