Docker 搭建 apache-php-mysql web环境


前言

最近帮学校的新生出一个sql注入的题目(19级甚至20级都开始入门了,我一个18级的还是个菜鸡,要我帮他们出题,真难为我了),然后 pull 了两个 docker 镜像,php:5.6.11-apache 和 mysql:5.7,问题来了

1. 一开始,我用 127.0.0.1:3306 去访问,结果出错了,还半天不知道原因在哪

2. php mysqli 扩展未安装

3. docker run -v 的路径问题


一、容器互访

1. docker run --link

使用 docker run 命令的时候添加参数 --link 已存在的容器名:自定容器别名,如图:

在这里插入图片描述
这样运行的容器会在 /etc/hosts 文件中加入一条记录,包含 ip 地址,容器别名,id,容器名(在容器名与容器别名相同的时候为只有前三项),至于 ip 可以使用 docker inspect mysql|grep IPAddress 查看,如下:
在这里插入图片描述
所以第二种方法也出来了

2. 修改 /etc/hosts

直接使用命令 echo "ip 容器名 id " >> /etc/hosts,将记录添加进 /etc/hosts 也可

3. docker-compose.yml

在 yml 文件中添加 linksdepends_on 标签,如下图:
在这里插入图片描述


二、php 扩展安装

在 docker 容器的 /usr/local/bin 文件夹下有个程序 docker-php-ext-install 可以用于php扩展的安装
在这里插入图片描述
可以直接进入容器内安装或在 Dockerfile 中写入如下内容:
Dockerfile
直接在 docker-compose.yml 中用 command 执行该命令,命令执行完后容器会自动退出,使用多行命令又会出错,没有找到解决的办法,望师傅们指点指点

三、docker run -v 路径问题

一开始,我是这样写的 -v www:/var/www/html,结果不知道在哪个地方创建了一个 www 文件,但是使用相对路径 -v ./www:/var/www/html 会报错,最后使用绝对路径解决

之所以想记录一下这个问题,是因为在百度的时候发现有个师傅的操作很骚,他是这么写的

-v `pwd`/www:/var/www/html


四、完整文件

我把它放到了 github 中了,可以直接 clone 下来搭建一个 sql 注入的环境,https://github.com/y0un9er/php-mysql

docker-compose.yml

version: '2'
services:
  mysql:
    image: mysql:5.7
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=123456

  web:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: web
    ports:
      - "10080:80"
    links:
      - mysql
    volumes:
      - ./www:/var/www/html      
                          

Dockerfile,其实就一句 RUN 而已,真的超想写到 docker-compose.yml 中去

FROM php:5.6.11-apache

RUN /usr/local/bin/docker-php-ext-install mysql mysqli

总结

出个题真不容易啊,不过遇到问题到解决问题真的能给人一种很充实的感觉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值