目录

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相关镜像

1

选择一个没有其他组件的镜像

2

命令行拉取镜像,在下面开启容器时,可以使用这个镜像名或者这个分配的sha256的前5位也可以

docker pull php:8.2.17-apache
1

# 准备src目录

在拉取的镜像中没有图像化界面,vi等编辑器,可以简单用echo临时写个简单php测试一下,写简单靶机题目有点不够用~(实力不够)~
在主机/虚拟机中准备src目录,使用你的编辑器/vi写入题目,配置文件,这样待会可以直接复制到镜像中(没有特殊需求,不用准备配置文件,使用镜像中默认的)

5

配置文件中修改需要的相关参数(选做)

6

# 修改PHP配置

我需要用到PHP配置中include和伪协议,需要打开配置中的allow_url_include,allow_url_fopen,如果你不需要修改配置,忽略此步

在Dockerhub中PHP官方文档下找到配置相关指令

找到配置文件位置

$php_INI_DIR/php.ini      
1

4

# 开启容器

开启容器

docker run -d -p 8080:80 php:8.2.17-apache
1

查看正在运行的容器

docker ps
1

已经开启容器了,进去看看(滑稽) 8

没有权限访问:官方镜像/var/www/html目录下没有准备文件,所以报错了,你需要自己准备

你可以记录下这个容器的id,后面使用更简单 7

# 配置文件复制到容器中

将src下准备的配置文件复制到容器的临时存放目录下

docker cp src/php.ini-development fb204:/tmp/php.ini-development
1

现在你可以将主机/虚拟机src下的ini配置文件删掉了,后面src目录下index.php,flag.php还会用

# 正确配置php.ini文件

上一步将PHP配置文件复制到了/tmp目录下,并不会生效,我们要进容器修改配置到正确的目录下

docker exec -it fb204 /bin/bash    # 进入容器
1

移动配置文件

mv /tmp/php.ini-development $PHP_INI_DIR/php.ini
1

9

现在你已经把配置文件放到正确的目录下了,看起来可以达到预期了(滑稽)

# 将PHP文件复制到工作目录

先退出容器

exit
1

11 将src目录下PHP文件复制到工作目录下,测试php-apache能否正确运行

docker cp src/. fb204:/var/www/html/
1

# 访问测试

再访问网页看看效果,PHP文件正确解析 12

传参查看phpinfo(),发现allow_url_include没有被修改~(慌)~ 13

当然,在容器中修改配置文件并不会立即生效,你需要保存镜像中的修改,所以commit将当前容器构建成新的镜像

docker commit fb204 ajay
1

~下面操作一气呵成~

  • 生成新镜像
  • 停止刚才的容器
  • 运行新生成的镜像(刚才容器的最后状态)

15

现在再次访问测试可以发现参数已经完成修改! 14

# 将镜像推送到dockerhub仓库

登录dockerhub账户

docker login
1

给本地镜像打标签

docker tag myimage:latest  mynamespace/myrepo:1.0
1

推送镜像到dockerhub仓库

docker push mynamespace/myrepo:1.0
1
最后一次更新于: 2024/09/16, 19:43:29