docker制作web镜像
# 使用Docker搭建CTF简单镜像
推荐
如果你在找lnmp相关ctf web基础镜像,推荐Github这个项目ctf-docker-template (opens new window),很多现成web镜像,感谢大佬们的贡献
需求:一个可以快速上手,简单配置搭建CTF靶机的镜像(php+apache)
我要打的靶机需要修改一些PHP配置,以我的过程为例了
中间php.ini配置部分按需求选做
# 拉取镜像
确定需求,在Dockerhub官网中搜索PHP,官方给出很多镜像,在标签页找php-apache相关镜像
选择一个没有其他组件的镜像
命令行拉取镜像,在下面开启容器时,可以使用这个镜像名或者这个分配的sha256的前5位也可以
docker pull php:8.2.17-apache
# 准备src目录
在拉取的镜像中没有图像化界面,vi等编辑器,可以简单用echo临时写个简单php测试一下,写简单靶机题目有点不够用~(实力不够)~
在主机/虚拟机中准备src目录,使用你的编辑器/vi写入题目,配置文件,这样待会可以直接复制到镜像中(没有特殊需求,不用准备配置文件,使用镜像中默认的)
配置文件中修改需要的相关参数(选做)
# 修改PHP配置
我需要用到PHP配置中include和伪协议,需要打开配置中的allow_url_include,allow_url_fopen,如果你不需要修改配置,忽略此步
在Dockerhub中PHP官方文档下找到配置相关指令
找到配置文件位置
$php_INI_DIR/php.ini
# 开启容器
开启容器
docker run -d -p 8080:80 php:8.2.17-apache
查看正在运行的容器
docker ps
已经开启容器了,进去看看(滑稽)
没有权限访问:官方镜像/var/www/html目录下没有准备文件,所以报错了,你需要自己准备
你可以记录下这个容器的id,后面使用更简单
# 配置文件复制到容器中
将src下准备的配置文件复制到容器的临时存放目录下
docker cp src/php.ini-development fb204:/tmp/php.ini-development
现在你可以将主机/虚拟机src下的ini配置文件删掉了,后面src目录下index.php,flag.php还会用
# 正确配置php.ini文件
上一步将PHP配置文件复制到了/tmp目录下,并不会生效,我们要进容器修改配置到正确的目录下
docker exec -it fb204 /bin/bash # 进入容器
移动配置文件
mv /tmp/php.ini-development $PHP_INI_DIR/php.ini
现在你已经把配置文件放到正确的目录下了,看起来可以达到预期了(滑稽)
# 将PHP文件复制到工作目录
先退出容器
exit
将src目录下PHP文件复制到工作目录下,测试php-apache能否正确运行
docker cp src/. fb204:/var/www/html/
# 访问测试
再访问网页看看效果,PHP文件正确解析
传参查看phpinfo(),发现allow_url_include没有被修改~(慌)~
当然,在容器中修改配置文件并不会立即生效,你需要保存镜像中的修改,所以commit将当前容器构建成新的镜像
docker commit fb204 ajay
~下面操作一气呵成~
- 生成新镜像
- 停止刚才的容器
- 运行新生成的镜像(刚才容器的最后状态)
现在再次访问测试可以发现参数已经完成修改!
# 将镜像推送到dockerhub仓库
登录dockerhub账户
docker login
给本地镜像打标签
docker tag myimage:latest mynamespace/myrepo:1.0
推送镜像到dockerhub仓库
docker push mynamespace/myrepo:1.0