Docker简介
Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等的,极大的简化了容器的创建和维护。使得Docker技术比虚拟化技术更为轻便、快捷。
传统的虚拟机技术是虚拟出一套硬件之后,在其上运行一个完整的操作系统,在该系统上再运行其所需要的应用进程;而容器的应用进程直接运行与宿主的内核,容器内没有自己的内核,而且没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
鉴于Docker上面的这些特性,很适合在Web安全中搭建各种环境,包括php代码审计的环境和各种漏洞的环境。在Github上面目前有人就使用Docker来搭建各种漏洞环境,做得比较好的是P牛的vulhub和Medicean的VulApps
Docker入门使用
Docker的入门可以参考书籍docker_practice
下面就以一个最简单的php的环境为例来进行说明。
一般情况下,使用Docker环境都会存在两个文件Dockerfile
和docker-compose.yml
Dockerfile
,主要就是在搭建环境时需要运行的一些命令
docker-compose.yml
,主要就是用来组织多个容器的。例如常见的lamp环境就涉及到了nginx,mysql和php环境,这些容器组织在一起就需要靠docker-compose.yml
这个文件了。
创建文件夹dockerlearn
(在实际环境中,此文件夹的名字可以任意),在文件夹中分别创建文件index.php
,Dockerfile
,docker-compoer.yml
index.php
<?php
phpinfo();
?>
Dockerfile
FROM vulhub/php:5.6-apache
MAINTAINER spoock <me@spoock.com>
RUN docker-php-ext-install mysqli
COPY index.php /var/www/html/index.php
-
FROM vulhub/php:5.6-apache
,从https://hub.docker.com/r/vulhub
上面拉取php5.6和apache的环境 -
RUN docker-php-ext-install mysqli
,安装额外的组件mysqli
-
COPY index.php /var/www/html/index.php
,将当前目录下的index.php
拷贝到docker容器中的/var/www/html/index.php
中。
docker-compose.yml
version: '2'
services:
web:
build: .
depends_on:
- mysql
ports:
- 8080:80
mysql:
image: mysql:5
environment:
- MYSQL_ROOT_PASSWORD=root
depends_on
,说明web服务需要的mysql容器的支持
ports
,表达将容器中的80端口映射到宿主主机的8080端口
mysql
,表示的就是mysql的容器的相关信息。
环境搭建
Docker安装
下面是以ubuntu16.04为例来说明docker的安装和使用。
在ubuntu16.04下安装docker和docker-compose
# 安装pip,如果有则不需要进行安装
curl -s https://bootstrap.pypa.io/get-pip.py | python3
# 安装docker
apt-get update && apt-get install docker.io
# 建立docker用户组
sudo groupadd docker
sudo usermod -aG docker $USER
# 启动Docker
service docker start
# 安装compose
pip install docker-compose
漏洞搭建
成功安装docker之后,就可以搭建上面的那个示例程序了。
# 进入到dockerlearn文件夹中
cd /path/to/dockerlearn
# 自动化编译环境
docker-compose build
# 启动整个环境
docker-compose up -d
编译完成之后,在浏览器中访问localhost:8080
,出现如下的结果,则表示环境安装成功。