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
- 查看宿主机ip
ifconfig / ipconfig
如果用不了 就执行这个命令
yum install net-tools -y
- 查看mysql容器ip
docker inspect mysql01
...
"IPAddress": "172.17.0.2", # 看这里!
...
- 重点在`NetworkSettings`中的`IPAddress`,这个才是**该容器的真实IP**
- 容器的IP:`172.17.0.2`
- 查看centos容器ip
docker inspect centos01
...
"IPAddress": "172.17.0.3", # 重点在这里!
...
- 重点在`NetworkSettings`中的`IPAddress`,这个才是**该容器的真实IP**
- 容器的IP:`172.17.0.3`
设置mysql容器
- 进入MySQL容器
docker exec -it mysql01 bash
- 登录,创建数据库
blog01
mysql -u root -p123456
create database blog01 default charset utf8;
本机可以使用mysql连接工具连接

- 退出mysql, 退出mysql容器
exit
exit
mysql> exit
Bye
root@e432e4f92efa:/# exit
exit
[root@localhost ~]#
设置centos容器
- 进入centos容器
docker exec -it centos01 bash
- 安装一些需要的工具
- vim:文本编辑器 - 用于编辑文件
- net-tools:网络工具 - 用于查看网络 和 ping其他网络
- python36:Python解释器 - 用于安装Django项目的依赖
- git:版本控制工具 - 用于拉取项目
yum install vim net-tools python36 git -y
- 测试网络
ping www.baidu.com # 测试是否能访问外网
ping 192.168.50.101 # 测试是否能访问宿主机
ping 172.17.0.2 # 测试是否能访问MySQL容器
- 使用git拉取项目
mkdir /django_test
cd /django_test
git clone https://gitee.com/xuexianqi/django_blog.git
ls -l
cd django_blog
ls -l
- 使用pip3安装依赖
pip3 install -r requirements.txt -i https://pypi.douban.com/simple/
修改数据库配置
这个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!
- 数据库迁移
# 切换到上一层目录,因为需要的 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
- 启动项目
- IP和端口号是:
0.0.0.0:8000,这样外部就可以直接访问了
- IP和端口号是:
python3 manage.py runserver 0.0.0.0:8000
外界访问项目:
在本机的浏览器中,输入虚拟机(宿主机)的IP和CentOS容器(运行的Django项目)的端口号:192.168.50.101:8000