Web笔记 | docker常用指令 --搭建测试靶场

关键词:docker, compose.yml

1. docker,容器

docker 是现代容器技术中最经典、最具代表性的实现。容器是操作系统级虚拟化的一种隔离方案,依赖于宿主机内核的特定功能(命名空间Namespace、控制组Cgroups)来创建隔离空间,多个容器共享同一个宿主机操作系统内核。

  • 最常见、使用最广泛的容器实现是docker,通常提到容器的时候指的就是docker;
  • docker是一种轻量级的隔离方案,启动速度快;
  • 适合用于搭建漏洞验证测试的靶场环境,通过docker-compose.yml配置文件,可以完整描述靶场的网络、服务、卷、环境等依赖变量,提供干净的可快速重置的环境。(相较于虚拟机,每次docker run或docker compose up指令后都会基于容器镜像创建一个全新的、与初始状态完全一致的环境,没有历史操作残留。)

docker镜像与虚拟机镜像的对比

|----------|---------------------------------------------------|----------------------------------------------------|
| 维度 | 虚拟机镜像(如 .iso, .vmdk) | Docker 镜像 |
| 包含内容 | 完整的操作系统(内核 + 完整系统文件)+ 应用 | 不含内核,只包含应用及其依赖的用户空间文件(如库、配置、二进制文件) |
| 底层原理 | 基于硬件虚拟化,每个虚拟机有独立的 Guest OS,通过 Hypervisor 模拟硬件 | 基于容器化,所有容器共享宿主机的内核,通过 Namespace 和 Cgroups 实现隔离 |
| 大小 | 通常 几百 MB 到几 GB | 通常 几十 MB 到几百 MB |
| 启动速度 | 分钟级(需启动整个操作系统) | 秒级(本质是进程级启动) |

2. docker 常用指令

关键指令:

  • 拉取镜像 docker pull
  • 启动容器 docker run
  • 构建并启动容器环境 docker compose up -d
  • 验证环境 docker compose ps
  • 清理环境 docker down -v

启动靶场环境时,常用的docker指令合集(一)

|------------------------------------------------|------------------|
| 命令 | 说明 |
| docker compose up -d | #启动环境(后台) |
| docker compose ps | #启动环境验证:查看运行状态 |
| docker compose logs docker compose logs -f web | #查看日志 #查看某个服务的日志 |
| docker compose down | #停止并删除环境(保留卷) |
| docker compose down -v | #完全清除(包括卷) |
| docker exec -it lab_attacker_1 /bin/bash | #进入某个容器(如攻击机) |

2.1 docker compose

💡Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个docker-compose.yml 文件,可以配置应用的服务、网络、卷等,然后使用一条命令启动或停止整个应用栈。

启动靶场时,最常用的指令:

bash 复制代码
sudo docker compose up -d

参数:-d,detach,后台运行,

加上该参数后,容器会在后台启动,终端不会附着到容器的日志输出,命令行会立即返回。这对于在服务器上长期运行靶场环境非常实用,避免因 SSH 断开导致容器终止。

指令含义:docker compose up 会根据 docker-compose.yml文件,

  • 检查并创建所需的网络、卷;
  • 拉取或构建镜像;
  • 按照定义的顺序启动服务容器。

其他变体、关联指令:

  • docker compose up(不加 -d):前台运行,日志直接输出,按 Ctrl+C 会停止所有容器。
  • docker compose down:停止并删除所有容器、网络(默认保留卷)。
  • docker compose down -v:同时删除卷,彻底清理环境。

(可以将docker compose up理解为一个"声明式"的启动脚本)

2.2 compose.yml

靶场的docker文件通常包含(1)docker-compose.yml;(2)可能的dockerfile;(3)配置文件;

  • docker-compose.yml:核心编排文件;
  • dockerfile:如果需要构建自定义镜像;
  • 其他配置文件:例如.env, docker-entrypoint.sh等;

2.3 docker pull, run, compose up

什么时候使用docker pull拉取镜像,什么时候使用docker run启动容器,什么时候使用docker compose up运行靶场环境?

  1. docker pull
  • 作用:从镜像仓库(如 Docker Hub)下载镜像到本地。
  • 在靶场部署中:如果使用的是现成的镜像(例如 VulHub 提供),无需构建,只需拉取即可。
  1. docker run
  • 作用:基于一个镜像创建并启动单个容器。
  • 使用场景 :启动一个独立的容器,不依赖其他服务。docker run 往往用于调试或临时运行工具容器(如攻击机)。
  1. docker compose up
  • 作用 :根据 docker-compose.yml 文件,以声明式的方式管理多个容器的生命周期(创建、启动、网络、卷等);
  • 使用场景
    • 多容器应用,服务之间存在依赖关系(如 Web 依赖数据库);
    • 需要统一管理网络、卷,确保容器之间能够互相通信;
    • 需要可重复、可移植的环境部署(只需携带 docker-compose.yml 和相关文件,即可在任何有 Docker Compose 的机器上复现)。
  • 在靶场部署中 :大多数漏洞靶场(如 VulHub、DVWA 的多容器版本、Splunk 等)都提供 docker-compose.yml,因此使用 docker compose up 是最便捷的方式;

💡 回顾思考:为什么docker适合用来搭建靶场?

  • 环境一致性:同一个镜像在任何机器上运行时,行为完全一致;
  • 免配置 :用户不需要知道漏洞环境需要装什么软件、改什么配置,一条 docker-compose up 即可启动;
  • 可复现:如果靶场需要自定义,用户可以修改 Dockerfile 后重新构建,保证了灵活性;

3. 应用:Vulhub靶场

Vulhub快速入门指南参考 https://vulhub.org/zh/getting-started

1. 选择漏洞环境:每个目录代表一个不同的漏洞应用程序

2. 启动环境:使用docker Compose构建并启动漏洞环境(可以理解为编排式快速启动)

bash 复制代码
cd vulhub/spring/CVE-2022-22947
docker compose up -d

docker compose 命令默认读取当前目录下的 docker-compose.yml(或 compose.yaml)文件。

3. 访问应用程序:环境运行后,通过浏览器访问漏洞应用程序;

4. 测试完成后清理环境:

bash 复制代码
docker compose down -v

前置准备阶段:在本地任意目录下使用git克隆vulhub仓库

bash 复制代码
git clone --depth 1 https://github.com/vulhub/vulhub.git

💡其他 | 管理Vulhub环境时可能会需要用到的docker指令

**1. 检查环境状态:**显示当前漏洞环境中所有容器的状态,包括访问漏洞服务所需的端口映射。

bash 复制代码
docker compose ps

2. 检查Web服务器或应用程序配置(检查容器内的配置文件):

  • 在Web容器中检查Apache配置
bash 复制代码
docker compose exec web cat /etc/apache2/apache2.conf
  • 查看PHP配置
bash 复制代码
docker compose exec web php -i

3. 其他环境管理操作

  • 查看日志
bash 复制代码
docker compose logs -f
  • 重建环境
bash 复制代码
docker compose build --no-cache
  • 访问容器的shell
bash 复制代码
docker compose exec [service_name] bash

💡其他 | docker-compose.yml的修改可调整:

  • 更改暴露的端口
  • 添加持久卷
  • 修改环境变量
  • 与其他容器链接

附:其他docker指令

镜像操作、容器操作、网络与卷、日志与卷

|----------|-----------------------------------------|--------------------------------------------------------|
| 指令类型 | 命令 | 说明 |
| 镜像操作 | docker pull <image> | 从仓库拉取镜像 |
| | docker images | 列出本地镜像 |
| | docker rmi <image> | 删除镜像 |
| | docker build -t <name> . | 基于 Dockerfile 构建镜像 |
| 容器操作 | docker run <image> | 创建并启动容器(常用参数:-d 后台运行,-p 端口映射,-v 挂载卷,--name 命名) |
| | docker ps | 列出运行中的容器 |
| | docker ps -a | 列出所有容器(包括停止的) |
| | docker stop<container> | 停止容器 |
| | docker start <container> | 启动已停止的容器 |
| | docker restart <container> | 重启容器 |
| | docker rm <container> | 删除容器(加 -f 强制删除运行中的容器) |
| | docker exec -it <container> /bin/bash | 进入容器内部执行命令 |
| 网络与卷 | docker network ls | 列出网络 |
| | docker network create <name> | 创建自定义网络 |
| | docker volume ls | 列出卷 |
| | docker volume rm <name> | 删除卷 |
| 日志与资源 | docker logs <container> | 查看容器日志(加 -f 实时跟踪) |
| | docker stats | 实时查看容器资源占用 |
| | docker inspect <container> | 查看容器的详细信息(IP、配置等) |

附:docker 镜像与仓库

docker镜像、docker hub与Github、从虚拟机镜像与docker镜像的对比理解

Docker Hub:远程镜像仓库,用于存储和分发(分享)镜像。

  • Docker Hub 是远程的 。是一个由 Docker 公司托管的公共镜像仓库,可以把它理解为 Docker 官方的"应用商店"或 GitHub 的镜像版。
  • 核心作用是存储和分发镜像: 开发者可以将自己构建的镜像推送到 Docker Hub,其他人则可以从上面拉取现成的镜像(如 nginxmysqlubuntu),无需自己从零搭建环境。(类似于 Maven 中央仓库 之于 Java,或者 npm 仓库 之于 Node.js,只不过它存放的不是代码包,而是完整的、可运行的软件环境。)

安装docker后本地没有默认的基础镜像,需要主动拉取: 安装 Docker 本身不会 自动提供任何基础镜像(如 ubuntualpine)。第一次运行 docker run hello-world 时,Docker 会从 Docker Hub 拉取 hello-world 镜像,然后运行它。如果需要某个基础镜像(比如 ubuntu),必须显式执行 docker pull ubuntu 或在 docker run 时自动拉取。

拉取后的镜像会保存到本地,可重复使用: 执行 docker pull 时,Docker 会将镜像下载到本地,并存储在 Docker 的缓存目录中(通常是 /var/lib/docker/ 下)。之后再运行容器时,会直接使用本地已保存的镜像,不会再次下载(除非指定了 --pull always 强制重新拉取)。可以通过指令docker images查看本地已保存的镜像。

**虚拟机镜像与docker镜像:**虚拟机镜像包含完整 OS(含内核),Docker 镜像不含内核,更轻量,依赖宿主机内核。

附:其他容器技术

  • Windows Server Container/Hyper-V Isolation:微软原生支持的容器技术,让容器可以在 Windows 生态中运行 .NET 应用等;
  • Podman :Red Hat 开发,最大的特点是无守护进程兼容 Docker 命令, 采用 fork/exec 模型,在容器直接作为用户进程的子进程运行,拥有更好的权限隔离,默认支持无根模式,安全性更高;
  • LXC/LXD :LXC 是 Linux 上最早的容器技术之一,可以看作是一种轻量级虚拟机。它启动一个完整的系统环境,更接近传统虚拟机的体验。

小结:大多数成熟项目的做法是,将构建好的镜像推送到Docker Hub,用户只需要拉取。在安装Vulhub的时候第一步是使用git克隆仓库到本地:git clone --depth 1 https://github.com/vulhub/vulhub.git,下载的文件目录中,每个目录代表一个不同的漏洞应用程序,每个目录下通常有每个漏洞对应的docker-compose.yml和dockerfile文件,快速启动漏洞容器环境的方法是在目标漏洞目录下使用docker compose up -d命令启动容器。docker compose 命令默认读取当前目录下的 docker-compose.yml(或 compose.yaml)文件。此时会基于compose.yml文件从docker hub拉取镜像。

参考

1\] 《Web漏洞解析与攻防实战》 \[2\] [https://vulhub.org/zh/getting-started](https://vulhub.org/zh/getting-started "https://vulhub.org/zh/getting-started")

相关推荐
不灭锦鲤2 小时前
网络安全学习第162天
学习·安全·web安全
ノBye~2 小时前
Docker Compose
运维·docker·容器
释怀不想释怀2 小时前
安装Docker(Centos)
docker·eureka·centos
m0_738120723 小时前
渗透测试——Ripper靶机详细横向渗透过程(rips扫描文件,水平横向越权,Webmin直接获取root权限)
linux·网络·数据库·安全·web安全·php
搬砖魁首3 小时前
Fabric系列 - HSM之2 容器化
docker·fabric·hsm·bccsp·pkcs11
难搞哦~3 小时前
绿联NAS一键部署SQMusic免费下载无损音质(FLAC/APE)+高码率MP3(320kbps)音乐,搭建个人高品质音乐库
docker·nas·绿联nas·sqmusic
全栈攻略3 小时前
老版本Docker Desktop for Mac 历史版本下载大全(macOS 10.15/11/12)
macos·docker·容器
kobe_OKOK_3 小时前
docker run 一系列中间件命令
运维·docker·容器
Java小白,一起学习3 小时前
Docker快速入门(ubuntu环境下)
ubuntu·docker·容器