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
,出現以下的結果,則表示環境安裝成功。