使用docker部署django项目
http://www.xuexianqi.top/archives/686.html 安装所需的镜像 安装centosos7.9 这里用的是CentOS7.9,具体版本是centos:7.9.2

使用docker部署django项目

发布时间:2023-10-12 (2023-10-12)

http://www.xuexianqi.top/archives/686.html

安装所需的镜像

安装centosos7.9

这里用的是CentOS7.9,具体版本是centos:7.9.2009

之后会把这个当做Django项目启动的容器,再安装Python

docker pull centos:7.9.2009

安装mysql5.7

docker pull mysql:5.7.32

查看本地已有镜像

docker images

[root@localhost ~]# docker images
REPOSITORY       TAG              IMAGE ID         CREATED          SIZE
mysql            5.7.32           ae0658fdbad5     2 weeks ago      449MB
centos           7.9.2009         8652b9f0cb4c     3 weeks ago      204MB

启动容器

启动mysql容器 映射端口为3306 密码为123456

docker run -dit -p 3306:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.32

运行centos容器

docker run -dit -p 8000:8000 --name centos01 centos:7.9.2009

查看正在运行的端口

docker ps


[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
7c65c2fc3ddc        centos:7.9.2009     "/bin/bash"              1 minutes ago       Up 1 minutes        0.0.0.0:8000->8000/tcp              centos01
e432e4f92efa        mysql:5.7.32        "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:3306->3306/tcp, 33060/tcp   mysql01

查看宿主机ip即容器ip

  1. 查看宿主机ip
ifconfig / ipconfig
如果用不了 就执行这个命令
yum install net-tools -y
  1. 查看mysql容器ip
docker inspect mysql01

...
"IPAddress": "172.17.0.2",    # 看这里!
...
- 重点在`NetworkSettings`中的`IPAddress`,这个才是**该容器的真实IP**
- 容器的IP:`172.17.0.2`
  1. 查看centos容器ip
docker inspect centos01

...
"IPAddress": "172.17.0.3",    # 重点在这里!
...
- 重点在`NetworkSettings`中的`IPAddress`,这个才是**该容器的真实IP**
- 容器的IP:`172.17.0.3`

设置mysql容器

  1. 进入MySQL容器
docker exec -it mysql01 bash
  1. 登录,创建数据库 blog01
mysql -u root -p123456
create database blog01 default charset utf8;
本机可以使用mysql连接工具连接

![](http://python.fengfengzhidao.com/pic/20220618094351.png)
  1. 退出mysql, 退出mysql容器
exit
exit
mysql> exit
Bye
root@e432e4f92efa:/# exit
exit
[root@localhost ~]#

设置centos容器

  1. 进入centos容器
docker exec -it centos01 bash
  1. 安装一些需要的工具
    • vim:文本编辑器 - 用于编辑文件
    • net-tools:网络工具 - 用于查看网络 和 ping其他网络
    • python36:Python解释器 - 用于安装Django项目的依赖
    • git:版本控制工具 - 用于拉取项目
yum install vim net-tools python36 git -y
  1. 测试网络
ping www.baidu.com    # 测试是否能访问外网

ping 192.168.50.101    # 测试是否能访问宿主机

ping 172.17.0.2        # 测试是否能访问MySQL容器
  1. 使用git拉取项目
mkdir /django_test
cd /django_test


git clone https://gitee.com/xuexianqi/django_blog.git


ls -l

cd django_blog

ls -l
  1. 使用pip3安装依赖
pip3 install -r requirements.txt -i https://pypi.douban.com/simple/
  1. 修改数据库配置

    这个Django项目本身的数据库配置为本地,也就是127.0.0.1

    但是现在的项目是跑在CentOS容器中的,但是MySQL却在另一个容器中

    所以,要修改数据库配置,把127.0.0.1替换成MySQL容器的IP:172.17.0.2

vim Django_Blog/settings.py

# 按 i 进入插入模式
i


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "blog01",
        "HOST": "172.17.0.2", 
        "PORT": 3306,
        "USER": 'root', 
        "PASSWORD": '123456', 
    }
}



# 按 Esc 退出插入模式
Esc

# 按 :wq! 强制保存并退出
:wq!
  1. 数据库迁移
# 切换到上一层目录,因为需要的 manage.py 这个文件在上一层
cd ..

# 执行数据迁移命令(注意:这里会报错!)
python3 manage.py makemigrations

# 根据报错提示 修改文件:/usr/local/lib/python3.6/site-packages/django/db/backends/mysql/operations.py 的第146行
vim /usr/local/lib/python3.6/site-packages/django/db/backends/mysql/operations.py


# 输入命令,显示行号
:set nu

# 用方向键↓找到146行,按 i 进入插入模式
i

# 把:query = query.decode(errors='replace') 的decode 换成 encode
query = query.encode(errors='replace')

# 按 Esc 退出
Esc

# 按 :wq! 强制保存 并退出
:wq!

# 再次执行数据迁移命令
python3 manage.py makemigrations
python3 manage.py migrate
  1. 启动项目
    • IP和端口号是:0.0.0.0:8000,这样外部就可以直接访问了
python3 manage.py runserver 0.0.0.0:8000

外界访问项目:

在本机的浏览器中,输入虚拟机(宿主机)的IP和CentOS容器(运行的Django项目)的端口号:192.168.50.101:8000