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




*注:这里的端口要设置的和 * 或者其他的代理工具所提供的端口一致,不能乱填。



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

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

*注:如果你完全使用国内的镜像站操作,那么也不必配置代理,这部分可跳过(如果没有科学坏境,也请别担心,我在后面 Docker 安装好了之后的部分会提到使用镜像站的方法)

我使用的是 * Verge,这里就以 * 的局域网模式来示例:

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

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

执行以下代码,使得 CentOS 7 的代理指向宿主机的端口(这里我的是 153,你的需要替换成你自己的端口):
export http_proxy=http://192.168.153.1:7897 export https_proxy=http://192.168.153.1:7897
将代理配置永远写入(不建议这么做,这里下载 Docker 也只是临时的,所以临时设置一下即可)可跳过:
步骤一:编辑配置文件
vi ~/.bashrc
步骤二:在文件末尾添加上述两行 export 命令,保存退出后执行以下命令
source ~/.bashrc
即可保存成功。
在终端中使用如下命令查看是否成功连接外网:
curl -I www.google.com
下图即为成功(可以看到这里已经是 200 OK 了,代表已经获取到了响应头):

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
sudo systemctl start docker sudo systemctl enable docker
输入 docker version,看到 Client 和 Server 信息即表示安装成功(如下图所示):

步骤一:创建或编辑 Docker 的配置文件
sudo mkdir -p /etc/docker sudo vi /etc/docker/daemon.json
步骤二:在文件中粘贴以下内容(推荐几个目前较稳定的加速器)
{ "registry-mirrors": [ "https://docker.xuanyuan.me", "https://docker.1ms.run", "https://docker.m.daocloud.io", "https://hub.rat.dev" ] }
步骤三:保存后,重启 Docker 服务使配置生效
sudo systemctl daemon-reload sudo systemctl restart docker
验证国内镜像是否生效
docker info | grep -A 10 "Registry Mirrors"
这里需要配置两处:
- 第一处:解决"Docker 能不能下载镜像"的问题
- 第二处:解决"容器里面能不能上网"的问题
第一处:配置 Docker Daemon(让 docker pull、docker run 下载镜像时走代理)
sudo mkdir -p /etc/systemd/system/docker.service.d sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf
在文件中添加以下内容(把 http://127.0.0.1:7890 改成你自己的代理地址和端口):
[Service] Environment="HTTP_PROXY=http://127.0.0.1:7897" Environment="HTTPS_PROXY=http://127.0.0.1:7897" Environment="NO_PROXY=localhost,127.0.0.1,::1"
这里我的是 7897 端口,所以在后面配置这个 7897。
按下 :,输入 wq,保存后执行:
sudo systemctl daemon-reload sudo systemctl restart docker
验证代理镜像是否生效:
sudo systemctl show --property=Environment docker
第二处:配置 Docker Client(让容器内部默认走代理,新版 Docker 推荐方式)
创建或编辑用户配置文件:
mkdir -p ~/.docker vi ~/.docker/config.json
添加以下内容:
{ "proxies": { "default": { "httpProxy": "http://127.0.0.1:7897", "httpsProxy": "http://127.0.0.1:7897", "noProxy": "localhost,127.0.0.1" } } }
这个配置会让新启动的容器自动继承代理环境变量。
临时测试代理(不想永久配置时)
直接在命令前加环境变量:
HTTP_PROXY=http://127.0.0.1:7890 HTTPS_PROXY=http://127.0.0.1:7890
配置完后,试一下拉取镜像:
docker pull hello-world
可以看到,我这里可以成功拉取镜像(这里仅仅做测试,就不运行了):

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

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

输入以下命令,拉取 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:意思是"永久生效",如果不加这个,你重启服务器后,这扇门又会被锁上
在你的物理机(比如你的 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删掉容器,才能删镜像。
systemctl show –property=Environment docker
查水表:看看 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]
清空仓库:删掉本地存着的镜像原始包 注意:必须先删掉关联容器才能删镜像
感谢您的访问,本章教程到此结束(/ω\)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/258105.html