Linux虚拟机 + Docker 部署本地靶场教程(个人博客原创)

作者的个人博客:云泽の小屋
以下内容转自我的个人博客(●'◡'●)


前言

在进行安全测试或靶场练习时,直接在本地物理机上运行相关服务(如 MySQL 等)存在一定风险,可能影响系统稳定性甚至带来安全隐患。因此,更推荐使用"虚拟机 + Docker"的方式来搭建实验环境

通过这种方式,我们可以在隔离的虚拟环境中快速部署和管理多个靶场实例,在保证主机安全的同时,也便于环境的复用与销毁,提高学习与测试效率

需要注意的是,在部署 Docker 之前,请确保当前环境(物理机或虚拟机)具备良好的网络访问能力,否则可能会影响镜像的下载与容器的下载速度

本教程的结尾附上了 Docker 常见的命令表,可供参考(在本文的最后)


在部署 Docker 之前,需要先配置虚拟机的网络模式。本文采用桥接模式,使虚拟机能够直接接入局域网,从而保证后续服务部署与访问的正常进行

环境说明:

  • 虚拟化软件:VMware Workstation Pro 25H2
  • 系统镜像:CentOS-7x86_64-Minimal-2009

CentOS7 镜像:下载地址1(NAS分享链接)下载地址2(种子链接)

如果第一个链接挂了,请使用第二个下载链接(种子使用教程:点我前往

虚拟机桥接设置

打开 VMware 的设置,将网卡模式设置成 NAT:

NAT设置


检查物理机和虚拟机的连通性

输入以下命令查看虚拟机的 IP 地址:

ip addr | more

测试连通性:

连通性测试


在 CentOS 7 的配置

首先确保这个 CentOS 7 能够远程 SSH 连接(后续粘贴命令很方便)

我使用的是 MobaXterm(点我下载,密码:enk9)点我跳转软件官网

MobaXterm

打开 CMD,输入 ipconfig 命令来查看自己的 VMware 里的 IP 地址信息:

ipconfig

验证部分

在终端中使用如下命令查看是否成功连接外网:

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 version


虚拟机 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 搜索与选择)

这里我找到了我需要的靶场,并且和它对应的部署链接:

搜索pikachu

第二步:入库(拉取镜像到本地)

输入以下命令,拉取 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,即可访问:

访问pikachu靶场

第七步:上锁(设置容器"自动复活甲")

即使容器现在跑得欢,如果虚拟机重启,它默认是不会自己活过来的。我们需要给它补上一粒"后悔药",让它学会自救:

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] 清空仓库:删掉本地存着的镜像原始包 注意:必须先删掉关联容器才能删镜像

感谢您的访问,本次的教程到此结束(/ω\)

posted @ 2026-04-12 15:10  zeyun4699  阅读(344)  评论(0)    收藏  举报