docker初体验

前言

老师让搭个 sql 注入靶场,因为是靶场所以肯定不能直接架在服务器上。所以采用 docker 来进行部署。因为之前学习过一点 docker 。感觉不会有什么难度。但当我开始写 Dockerfile 之后我才发现,好难呀…

部署过程

我一直弄了一天半才搞定,中间遇到了各种问题。

一开始我是想自己用 ubuntu 镜像,然后自己安装 Apache 、Mysql 、PHP,但是当我开始写 Dockerfile 之后,我才意识到。要在 Dockerfile 里面写安装 Mysql 的命令这么写,因为 Mysql 在安装过程中会跳出来输入 root 密码的界面,apt -y 并不能一步到底…这让我很郁闷

之后突然想到我可以直接 pull 一个 lamp 的镜像就好了,pull 了 search 到的第一个镜像,开始确实很顺利。但最后php查询数据库的时候没有显示数据。

连报错信息也没有,就是没显示,这时突然想到 php.ini 的报错信息可能没开,把报错信息开起来之后,还是什么报错都没有…这就很无语了。

之后又尝试换了个镜像,换了镜像之后,嗯,都很顺利,但用 run 镜像的时候,shell 脚本又报错了… 看了眼 shell 脚本,每行后面都多了一个乱码,查了之后才知道,我的 shell 脚本是 windows 下写的,直接拖到 linux 下会有问题…

修改完,重新run,发现又卡住了..我以为是我 shell 脚本写的有问题,因为没有学过 shell 脚本编写,完全凭着对 linux 的直觉写的。

既然这样就不用 shell 脚本启动了,直接进行容器把 Mysql 和 Apache 启动起来好了,进容器,Apache 一下子就启动成功了,但 Mysql 报错了,启动不了。看来之前不是我 shell 脚本的问题。

感觉问题太复杂,继续换镜像试试,这次这个镜像 PHP 版本是7的,但是靶场用的函数是 mysql ,在7版本被弃用了…这个镜像又不行了…

搞到这里,有点崩溃,求助学长。学长自己尝试搭了下,告诉我之前 PHP 查询不到 Mysql 数据可能是因为 mysql 拓展没装…以前都用 phpstudy 这种一键部署开发环境的工具。以为 mysql 拓展默认就有了。

重新来过,这次不直接用 lamp 镜像了,直接 pull 个空的 Ubuntu:16.04 服务自己装了。run 起来之后发现容器真的干净。vi 和 nano 都没。用默认源艰难的安装了个 nano 然后跟换了阿里云的源。阿里云的源在安装 mysql 的时候提示缺少依赖。

一番 google,发现换源可以解决。更换了中科的源后,顺利安装。

但安装 PHP 时 ,发现默认是 7,但是靶场需要 7 以下的环境,又一番艰苦的搜索。发现添加这个 add-apt-repository ppa:ondrej/php 这个源就可以安装 7 以下的版本了。

装完 php 装 mysql 拓展,然后终于结束了。靶场总算是跑起来了。

接下来我想的是把容器 commit 成 镜像,然后把镜像 push 到 dockerhub 上,服务器从 dockerhub 上直接拉取镜像,run 起来就可以了。

这一步从 push 到 dockerhub 为止都很顺利。但服务器 pull 的时候就卡住了。重试了几次都拉不下来。

然后我就想能不能把我本地的镜像直接导出,然后通过 ftp 传到服务器上。查了下,还真的可以,通过 saveload 可以保存和加载镜像。

最后,靶场总算是跑起来了。搞了一天半,本来之前看的一点 docker 基础都忘记了。通过一次又好好回忆了下。而且印象更深刻了(笑哭)