
1. Pikachu靶场与Docker化部署的优势Pikachu靶场作为国内知名的Web安全实战平台包含了SQL注入、XSS、CSRF等20余种常见漏洞场景。传统部署方式需要手动配置PHPMySQL环境而Docker化部署能带来三大核心优势环境隔离性每个靶场运行在独立容器中避免与宿主机环境冲突。我曾在Windows 10上同时运行三个不同版本的Pikachu靶场传统方式需要反复修改Apache端口而Docker只需简单映射不同端口即可快速部署从拉取镜像到启动服务只需两条命令部署时间从原来的30分钟缩短到2分钟。对于需要频繁重建靶场的教学场景特别实用跨平台一致性相同的镜像可以在Windows、Linux和云服务器上无缝运行。去年给某企业做内训时学员的Mac、Windows和Ubuntu笔记本都通过Docker实现了完全一致的实验环境实测对比数据部署方式平均耗时成功率多实例支持传统PHP环境25min78%困难Docker化部署2min98%简单2. Docker环境准备与镜像获取2.1 安装Docker引擎Windows用户推荐使用Docker Desktop需开启WSL2支持# 检查WSL2状态 wsl --list --verbose # 安装Docker Desktop后验证 docker --version docker-compose --versionLinux环境以Ubuntu为例# 卸载旧版本 sudo apt-get remove docker docker-engine docker.io containerd runc # 安装依赖 sudo apt-get update sudo apt-get install ca-certificates curl gnupg # 添加官方GPG密钥 sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 设置仓库 echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release echo $VERSION_CODENAME) stable | \ sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装Docker sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 验证安装 sudo docker run hello-world2.2 获取Pikachu镜像官方镜像已托管在Docker Hub# 拉取最新镜像 docker pull area39/pikachu # 查看镜像详情 docker inspect area39/pikachu镜像包含的组件PHP 7.4 ApacheMySQL 5.7预配置的Pikachu漏洞代码自动初始化脚本3. 单容器部署实践3.1 基础运行命令# 前台运行调试用 docker run -it -p 8080:80 --name pikachu area39/pikachu # 后台运行生产环境 docker run -d -p 8080:80 --name pikachu area39/pikachu参数说明-p 8080:80将容器80端口映射到宿主机8080--name指定容器名称-v可挂载数据卷后续章节详解3.2 初始化验证访问http://localhost:8080会出现安装引导页面。这里有个坑要注意如果页面显示数据库连接失败需要进入容器手动初始化# 进入容器bash docker exec -it pikachu bash # 执行初始化脚本 cd /var/www/html php install.php初始化完成后所有漏洞模块应该都能正常访问。我建议优先测试以下三个核心漏洞SQL注入 →http://localhost:8080/vul/sqliXSS攻击 →http://localhost:8080/vul/xss文件上传 →http://localhost:8080/vul/upload4. 生产级部署方案4.1 使用Docker Compose创建docker-compose.yml文件version: 3 services: pikachu: image: area39/pikachu ports: - 8080:80 volumes: - ./pikachu-data:/var/www/html - ./mysql-data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORDpikachu123 restart: always启动命令docker-compose up -d这个配置实现了数据持久化源码和数据库自动重启自定义MySQL密码4.2 多实例部署如果需要同时运行多个靶场实例比如教学场景# 实例1 docker run -d -p 8081:80 --name pikachu-team1 area39/pikachu # 实例2 docker run -d -p 8082:80 --name pikachu-team2 area39/pikachu每个团队获得独立环境互不干扰。我在某次CTF培训中为15个小组配置了独立实例通过Nginx反代实现了统一域名访问。5. 云服务器部署指南5.1 阿里云ECS部署安全组开放8080端口通过SSH连接实例后直接运行docker run -d -p 8080:80 --name pikachu -e MYSQL_ROOT_PASSWORDStrongPass123 area39/pikachu5.2 使用云数据库RDS修改config.inc.php配置// 原配置 define(DB_HOST,localhost); // 改为RDS内网地址 define(DB_HOST,rm-bp1xxxx.mysql.rds.aliyuncs.com);优势数据库性能更有保障避免容器重启导致数据丢失方便团队共享数据6. 常见问题排查Q1容器启动后无法访问检查防火墙规则sudo ufw status验证端口映射docker port pikachu查看容器日志docker logs pikachuQ2MySQL服务未启动进入容器手动启动service mysql startQ3文件上传漏洞不可用检查Apache配置# 进入容器修改配置 docker exec -it pikachu bash vi /etc/php/7.4/apache2/php.ini # 修改以下参数 file_uploads On upload_max_filesize 20M post_max_size 20M # 重启Apache service apache2 restart7. 进阶技巧与优化7.1 自定义漏洞模块将靶场代码挂载为数据卷docker run -d -p 8080:80 -v /path/to/custom-pikachu:/var/www/html area39/pikachu修改漏洞代码后无需重建容器实时生效7.2 性能调优对于高并发场景建议docker run -d \ --name pikachu \ --memory2g \ --cpus1.5 \ --ulimit nofile65535:65535 \ -p 8080:80 \ area39/pikachu7.3 备份与迁移完整备份方案# 备份数据库 docker exec pikachu sh -c exec mysqldump --all-databases -uroot -p$MYSQL_ROOT_PASSWORD pikachu-backup.sql # 备份代码 docker cp pikachu:/var/www/html ./pikachu-html-backup迁移到新服务器只需# 恢复数据库 cat pikachu-backup.sql | docker exec -i pikachu mysql -uroot -p$MYSQL_ROOT_PASSWORD # 恢复代码 docker cp ./pikachu-html-backup/. pikachu:/var/www/html8. 安全防护建议虽然Pikachu是靶场系统但仍需注意不要使用默认密码生产环境务必添加HTTP认证docker run -d \ -p 8080:80 \ -e HTTP_USERadmin \ -e HTTP_PASSSecurePass123 \ area39/pikachu定期更新镜像获取安全补丁docker pull area39/pikachu:latest docker-compose down docker-compose up -d我在实际使用中发现配合Traefik反向代理可以方便地添加HTTPS支持提升传输安全性。