一、项目介绍

本项目基于 Docker Compose 部署一个完整的三层 Web 应用环境。

架构:

用户
 |
 |
Nginx
(80端口)
 |
 |
Tornado Web应用
(8888端口)
 |
 |
MySQL数据库
(3306端口)

实现功能:

Docker容器化部署

Docker Compose多服务编排

Nginx反向代理

Tornado Web服务部署

MySQL数据库部署

Docker Volume数据持久化

数据库自动备份

服务日志查看

基础故障排查


二、环境准备

服务器环境

操作系统:

Ubuntu 22.04 LTS

硬件:

CPU > 2核
内存 > 2GB
磁盘 > 20GB

软件环境

检查 Docker:

docker --version

检查 Docker Compose:

docker compose version

如果没有安装:

sudo apt update

sudo apt install docker.io docker-compose-plugin -y

启动 Docker:

sudo systemctl start docker

sudo systemctl enable docker

三、项目目录结构

docker-web-project/


├── app

│   ├── Dockerfile

│   ├── main.py

│   └── requirements.txt


├── nginx

│   └── nginx.conf


├── mysql

│   └── init.sql


├── mysql-backup


├── backup_mysql.sh


├── docker-compose.yml


└── README.md

四、部署流程

1. 获取项目

下载项目:

git clone 项目地址

进入目录:

cd docker-web-project

查看文件:

ls

五、启动服务

执行:

docker compose up -d --build

参数说明:

-d

后台运行


--build

重新构建镜像

查看运行状态:

docker ps

正常状态:

nginx-web

tornado-app

mysql-db

六、查看容器日志

Nginx日志

docker logs nginx-web

Tornado日志

docker logs tornado-app

MySQL日志

docker logs mysql-db

实时查看:

docker logs -f 容器名

七、服务测试

查看服务器IP:

hostname -I

例如:

192.168.146.143

1. 测试首页

访问:

curl http://192.168.146.143/

返回:

{
 "status":"success",
 "message":"Docker Tornado Running"
}

说明:

Nginx → Tornado

通信正常。


2. 测试数据库连接

访问:

curl http://192.168.146.143/db

返回:

{
 "status":"success",
 "database":"webdb"
}

说明:

Tornado → MySQL

通信正常。


3. 测试用户接口

访问:

curl http://192.168.146.143/users

返回:

{
"status":"success",
"data":[]
}

八、MySQL数据库管理

进入MySQL容器:

docker exec -it mysql-db bash

登录:

mysql -uroot -p123456

查看数据库:

show databases;

进入数据库:

use webdb;

查看数据表:

show tables;

查询数据:

select * from users;


九、数据持久化

MySQL使用Docker Volume保存数据。

docker-compose.yml:

volumes:

  - mysql_data:/var/lib/mysql

查看Volume:

docker volume ls

查看详细信息:

docker volume inspect docker-web-project_mysql_data

作用:

即使删除MySQL容器:

docker rm mysql-db

数据仍然保留。


十、数据库备份

手动备份

执行:

docker exec mysql-db mysqldump \
-uroot -p123456 webdb \
> mysql-backup/webdb.sql

查看:

ls mysql-backup

生成:

webdb.sql


十一、自动备份

备份脚本:

backup_mysql.sh

内容:

#!/bin/bash
DATE=$(date +%F)
docker exec mysql-db mysqldump \
-uroot -p123456 webdb \
> mysql-backup/webdb-$DATE.sql

增加权限:

chmod +x backup_mysql.sh

添加定时任务:

crontab -e

每天凌晨2点执行:

0 2 * * * /home/k8s2/docker-web-project/backup_mysql.sh

查看:

crontab -l


十二、服务停止与删除

停止服务:

docker compose down

重新启动:

docker compose up -d

重新构建:

docker compose up -d --build


十三、故障排查记录

1. MySQL启动失败

错误:

data directory has files in it

原因:MySQL Volume存在旧数据。

解决:

测试环境:

docker compose down
docker volume rm docker-web-project_mysql_data
docker compose up -d


2. Nginx 502 Bad Gateway

排查流程:

查看Nginx:

docker logs nginx-web

查看Tornado:

docker logs tornado-app

确认:

Tornado是否运行。8888端口是否监听。Nginx代理地址是否正确


3. Docker Compose YAML错误

检查:

docker compose config

常见原因:

缩进错误。volumes位置错误。services层级错误


十四、项目总结

通过本项目完成:

Linux服务器部署

Docker容器管理

Docker Compose编排

Nginx反向代理

Python Web服务部署

MySQL数据库维护

Volume数据持久化

自动备份

日志查看

常见故障排查

配置文件:app  docs  nginx  .gitignore backup_ mysql.sh docker-compose.yml

更多推荐