Linux虚拟机 + Docker 部署本地靶场教程(个人博客原创)
作者的个人博客:云泽の小屋
以下内容转自我的个人博客(●'◡'●)
前言
在进行安全测试或靶场练习时,直接在本地物理机上运行相关服务(如 MySQL 等)存在一定风险,可能影响系统稳定性甚至带来安全隐患。因此,更推荐使用"虚拟机 + Docker"的方式来搭建实验环境
通过这种方式,我们可以在隔离的虚拟环境中快速部署和管理多个靶场实例,在保证主机安全的同时,也便于环境的复用与销毁,提高学习与测试效率
需要注意的是,在部署 Docker 之前,请确保当前环境(物理机或虚拟机)具备良好的网络访问能力,否则可能会影响镜像的下载与容器的下载速度
本教程的结尾附上了 Docker 常见的命令表,可供参考(在本文的最后)
在部署 Docker 之前,需要先配置虚拟机的网络模式。本文采用桥接模式,使虚拟机能够直接接入局域网,从而保证后续服务部署与访问的正常进行
环境说明:
- 虚拟化软件:VMware Workstation Pro 25H2
- 系统镜像:CentOS-7x86_64-Minimal-2009
CentOS7 镜像:下载地址1(NAS分享链接)下载地址2(种子链接)
如果第一个链接挂了,请使用第二个下载链接(种子使用教程:点我前往)
虚拟机桥接设置
打开 VMware 的设置,将网卡模式设置成 NAT:

检查物理机和虚拟机的连通性
输入以下命令查看虚拟机的 IP 地址:
ip addr | more
测试连通性:

在 CentOS 7 的配置
首先确保这个 CentOS 7 能够远程 SSH 连接(后续粘贴命令很方便)
我使用的是 MobaXterm(点我下载,密码:enk9)点我跳转软件官网

打开 CMD,输入 ipconfig 命令来查看自己的 VMware 里的 IP 地址信息:
验证部分
在终端中使用如下命令查看是否成功连接外网:
curl -I www.baidu.com
(看到这里是 200 就 OK 了,代表已经获取到了响应头)
开始部署 Docker
步骤一:安装 Docker 引擎
CentOS 7 自带的软件包版本通常较低,建议通过 Docker 官方的仓库进行安装,以确保版本最新
卸载旧版本(可选)——如果系统之前安装过旧版 Docker,请先清理:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
步骤二:设置存储库
执行以下命令,安装必要的工具包并添加阿里云仓库源:
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
步骤三:生成缓存并安装
第一次安装不用清理缓存,不过我还是建议清理一下,避免出错
执行以下命令,清理旧缓存:
sudo yum clean all
建立新缓存并安装:
sudo yum makecache fast
sudo yum install -y docker-ce docker-ce-cli containerd.io
步骤四:启动 Docker 并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
验证 Docker 是否部署成功
输入 docker version,看到 Client 和 Server 信息即表示安装成功(如下图所示):

虚拟机 Docker 的代理设置
使用国内镜像站的配置
步骤一:创建或编辑 Docker 的配置文件
sudo mkdir -p /etc/docker
sudo vi /etc/docker/daemon.json
步骤二:在文件中粘贴以下内容(这里是一些国内的镜像地址)
{
"registry-mirrors": [
"https://docker.1panel.live",
"https://hub.rat.dev/",
"https://docker.chenby.cn",
"https://docker.kubesre.xyz",
"https://huecker.io",
"https://dockerhub.timeweb.cloud",
"https://dockerproxy.com",
"https://docker.anyhub.us.kg",
"https://dockerhub.icu",
"https://docker.aws19527.cn",
"https://registry.dockermirror.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com",
"https://docker.m.daocloud.io",
"https://docker.mirrors.ustc.edu.cn"
]
}
步骤三:保存后,重启 Docker 服务使配置生效
sudo systemctl daemon-reload
sudo systemctl restart docker
验证国内镜像是否生效
docker info | grep -A 10 "Registry Mirrors"
配置完后,试一下拉取镜像:
docker pull hello-world
可以看到,我这里可以成功拉取镜像(这里仅仅做测试,就不运行了):

Docker 镜像部署
访问 Docker Hub,寻找我们需要的镜像:点我前往
这里我会使用 pikachu 网络安全靶场,作为从零开始部署整个靶场的全流程(包含每一步的详细原理)从而带你认识 Docker 的部署与使用
具体流程图如下

第一步:寻宝(Docker Hub 搜索与选择)
这里我找到了我需要的靶场,并且和它对应的部署链接:

第二步:入库(拉取镜像到本地)
输入以下命令,拉取 area39/pikachu 的镜像文件(如果下载失败,请检查之前的环境配置):
docker pull area39/pikachu:latest
- Pull(拉取):这就是从云端把"零件包"下载到你服务器的仓库里(
/var/lib/docker) - 检查动作:下载完后,输入
docker images,如果你能看到area39/pikachu出现在列表里,说明"零件"已经到货了
第三步:开工(运行容器)
这是最关键的一步,把静态的"零件"变成动态的"程序":
docker run -d -p 8765:80 --name my_pikachu area39/pikachu:latest
-d:后台运行,不占用你的终端窗口-p 8765:80:把服务器的 8765 端口连到容器内部的 80 端口--name my_pikachu:给你的容器起个名字叫my_pikachu,以后管理它(停止或重启)就不用背那串长长的 ID 了
第四步:巡查(确认容器状态)
命令运行完会返回一串长字符(容器 ID),但这不代表程序真的跑稳了
输入以下命令,查看当前正在运行的容器:
docker ps
- ps (Process Status):查看当前正在运行的容器
- 看什么?:看 STATUS 是不是
Up ... seconds(启动中),看 PORTS 是不是0.0.0.0:8765->80/tcp
第五步:破壁(放行系统防火墙)
即便 Docker 内部映射好了端口,CentOS 7 自带的 firewalld 防火墙默认通常只开启了 22 端口(SSH)。你需要手动推开 8765 这扇大门。
输入以下命令,永久放行 8765 端口(如果你觉得麻烦,也可尝试关闭虚拟机的防火墙,一劳永逸):
sudo firewall-cmd --zone=public --add-port=8765/tcp --permanent
使用以下命令,重新加载防火墙配置,让刚才的修改立即生效:
sudo firewall-cmd --reload
firewall-cmd:这是 CentOS 7 的防火墙管理工具--permanent:意思是"永久生效",如果不加这个,你重启服务器后,这扇门又会被锁上
或者也可以使用以下命令,永久关闭防火墙
# 停止防火墙服务
systemctl stop firewalld
# 禁止开机自启(永久关闭)
systemctl disable firewalld
第六步:验收(在浏览器中与它见面)
在你的物理机(比如你的 Windows 电脑)浏览器地址栏输入:http://服务器IP:8765
我这里的是 192.168.153.128,那就直接输入 http://192.168.153.128:8765,即可访问:

第七步:上锁(设置容器"自动复活甲")
即使容器现在跑得欢,如果虚拟机重启,它默认是不会自己活过来的。我们需要给它补上一粒"后悔药",让它学会自救:
docker update --restart=always my_pikachu
update:这是 Docker 的"动态修改器",它允许你在不删除、不停止容器的情况下,直接修改它的运行规则--restart=always:这是"自启策略"——它的含义:只要 Docker 服务在运行,无论容器是因为程序崩溃停了,还是因为服务器重启关了,Docker 都会立刻、无条件把它重新拉起来
给容器加了"复活甲"还不够,如果你的 CentOS 7 开机时根本没启动 Docker 软件(那个总管),那容器也无从谈起
输入以下命令,让 Docker 服务开启自启动:
sudo systemctl enable docker
第八步:善后(停止与清理)
如果你练习完了,不想让这个容器继续占用资源:
停止容器:
docker stop my_pikachu
删除容器(*注意:删除后,你在容器里做的改动会消失,但镜像还在):
docker rm my_pikachu
stop只是让程序"关机"休息,rm则是把这个"组装好的零件"彻底拆散扔掉
如果你以后不打算再玩这个镜像了,需要把它从磁盘上抹掉:
docker rmi my_pikachu
rmi就是 remove image。注意:如果这个镜像还在被某个容器(哪怕是停止的容器)使用,Docker 会报错不允许你删除。必须先执行上面的docker rm删掉容器,才能删镜像
Docker 常用命令(超实用清单,建议收藏)
| 动作分类 | 命令部分 | 通俗解释 | 实战案例 |
|---|---|---|---|
| 入库/下载 | docker pull [镜像名] |
下订单:从云端仓库把零件包拉到本地 | docker pull area39/pikachu |
| 给容器取名 | --name [自定义名称] |
起绰号:给你的容器起个名字,方便以后点名 | 在 run 命令中加上 --name my-pikachu |
| 开工/运行 | docker run -d -p [端口映射] --name [名] [镜像] |
组装并开机:后台运行并分配名字和端口 | docker run -d -p 8080:80 --name pikachu area39/pikachu |
| 查看状态 | docker ps -a |
点名:看看有哪些容器在干活,哪些在偷懒 | 检查名为 pikachu 的容器是否状态为 Up |
| 停止/拆除 | docker stop/rm [名字/ID] |
下班/拆迁:让容器停止或直接销毁 | docker rm -f pikachu |
| 清理零件 | docker rmi [镜像ID] |
清空仓库:删掉本地存着的镜像原始包 | 注意:必须先删掉关联容器才能删镜像 |
感谢您的访问,本次的教程到此结束(/ω\)


浙公网安备 33010602011771号