docker创建Webman + MySQL + Nginx容器
目录结构
webman-project/
├── docker-compose.yml
├── Dockerfile # Webman 的 PHP 容器镜像
├── nginx.conf
├── php/ # 存放 PHP 项目代码
│ ├── public/
│ ├── app/
│ ├── start.php
│ └── …
└── mysql_data/ # MySQL 数据持久化目录
- docker-compose.yml
version:'3.8'services:# Nginx(反向代理 + 静态资源)nginx: image: nginx:alpine container_name: webman-nginx ports: -"80:80"-"443:443"volumes: - ./nginx.conf:/etc/nginx/conf.d/default.conf - ./php/public:/var/www/html/public# Webman 的 public 目录depends_on: - webman networks: - webman-net# PHP 容器(运行 Webman)webman: build:.# 使用当前目录的 Dockerfilecontainer_name: webman-app ports: -"8787:8787"# 可选:直连访问 Webman 调试volumes: - ./php:/var/www/html# 项目代码挂载进去environment: -APP_ENV=production depends_on: - mysql networks: - webman-net command:["php","start.php","start"]# 启动 Webman# MySQL 数据库mysql: image: mysql:8.0 container_name: webman-mysql ports: -"3306:3306"environment: MYSQL_ROOT_PASSWORD:123456MYSQL_DATABASE: webman_db MYSQL_USER: webman_user MYSQL_PASSWORD: webman_pass volumes: - ./mysql_data:/var/lib/mysql networks: - webman-net command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci networks: webman-net: driver: bridge- Dockerfile(PHP 8.1 容器)
FROM php:8.1-cli-alpine# 安装系统依赖 + Webman 必需的 PHP 扩展RUN apk update&&apkadd--no-cache\git\unzip\&&docker-php-ext-install -j$(nproc)\pcntl\posix\pdo_mysql\&&apk clean# 安装 ComposerCOPY--from=composer:latest /usr/bin/composer /usr/bin/composer# 设置工作目录WORKDIR /var/www/html# 如果本地还没有 Webman 项目,取消下面两行注释,全新安装# RUN composer create-project workerman/webman:~2.0 .# RUN composer require workerman/redis workerman/think-orm# 暴露 Webman 默认端口EXPOSE8787# 启动命令(注意:pid 文件等需要写入权限)CMD["php","start.php","start"]- nginx.conf
upstream webman{server webman:8787;# 指向 webman 容器,端口 8787keepalive10240;}server{listen80;server_name localhost;root /var/www/html/public;# 静态文件直接由 Nginx 处理location ~*\.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)${expires 30d;add_header Cache-Control"public, immutable";}# 动态请求转发给 Webmanlocation /{try_files$uri@proxy;}location @proxy{proxy_set_header Host$host;proxy_set_header X-Real-IP$remote_addr;proxy_set_header X-Forwarded-For$remote_addr;proxy_set_header X-Forwarded-Proto$scheme;proxy_http_version1.1;proxy_set_header Connection"";proxy_pass http://webman;}}- Webman 数据库配置(连接 MySQL)
在 php/config/thinkorm.php 中配置数据库连接(以 ThinkORM 为例):
return['default'=>'mysql','connections'=>['mysql'=>['type'=>'mysql','host'=>'mysql',// 容器名,Docker 内部 DNS'port'=>3306,'database'=>'webman_db','username'=>'webman_user','password'=>'webman_pass','charset'=>'utf8mb4','collation'=>'utf8mb4_unicode_ci',],],];- 启动完整环境
1. 创建项目目录
mkdir webman-project && cd webman-project
mkdir php mysql_data
2. 创建上面 4 个文件(docker-compose.yml, Dockerfile, nginx.conf, php/…)
3. 构建并启动
docker-compose up -d --build
4. 查看状态
docker-compose ps
5. 查看 Webman 日志
docker-compose logs -f webman
