Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操做系统层面的虚拟化技术。因为隔离的进程独立于宿主和其它的隔离的进程,所以也称其为容器。php
Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等的,极大的简化了容器的建立和维护。使得Docker技术比虚拟化技术更为轻便、快捷。html
传统的虚拟机技术是虚拟出一套硬件以后,在其上运行一个完整的操做系统,在该系统上再运行其所须要的应用进程;而容器的应用进程直接运行与宿主的内核,容器内没有本身的内核,并且没有进行硬件虚拟。所以容器要比传统虚拟机更为轻便。python
鉴于Docker上面的这些特性,很适合在Web安全中搭建各类环境,包括php代码审计的环境和各类漏洞的环境。在Github上面目前有人就使用Docker来搭建各类漏洞环境,作得比较好的是P牛的vulhub和Medicean的VulAppsmysql
Docker的入门能够参考书籍docker_practicenginx
下面就以一个最简单的php的环境为例来进行说明。
通常状况下,使用Docker环境都会存在两个文件Dockerfile
和docker-compose.yml
Dockerfile
,主要就是在搭建环境时须要运行的一些命令
docker-compose.yml
,主要就是用来组织多个容器的。例如常见的lamp环境就涉及到了nginx,mysql和php环境,这些容器组织在一块儿就须要靠docker-compose.yml
这个文件了。
建立文件夹dockerlearn
(在实际环境中,此文件夹的名字能够任意),在文件夹中分别建立文件index.php
,Dockerfile
,docker-compoer.yml
git
index.php
github
<?php phpinfo(); ?>
Dockerfile
web
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的环境sql
RUN docker-php-ext-install mysqli
,安装额外的组件mysqli
docker
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的容器的相关信息。
下面是以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
,出现以下的结果,则表示环境安装成功。