docker
Docker 是一个 容器化工具。
在不同的环境下,程序可能因为处于不同的环境无法正常运行, docker能把 程序 + 依赖环境 一起打包成一个标准的“盒子”(镜像),然后在任何地方都能运行(容器),容器就是镜像的动态实例.
组成部分
docker主要有四部分:
镜像 (Image)
相当于一个“安装包”或者“模版”。里面写明了操作系统、依赖库、程序文件。
容器 (Container)
镜像运行后的实例,就像“安装包”安装出来并运行的程序。容器是活的,可以改动、运行、停止、删除。
Dockerfile
就是一份“说明书”,写清楚镜像怎么制作。
仓库 (Registry)
存放镜像的地方,比如:
- Docker Hub(公共仓库)
- 阿里云容器镜像服务
基础操作
1.查看本地镜像
1 | docker images |

2.构造镜像
生成一个镜像 (Image),存在于本地的 Docker 镜像库里。
1 | docker build -t <镜像名[:tag]> (构建上下文目录) |

3.上传镜像
1 | docker push <IMAGE>([<仓库名>/]<命名空间>/<REPO>:<TAG>) |

4.查看本地镜像
1 | docker images |

5.删除镜像
1 | docker rmi -<版本号> |

pwn部署
首先要创建自己的阿里云

这些操作好之后在虚拟机中执行以登录自己的阿里云账号(一般登陆一次之后会一直保持登录状态)
配置代理
1.开启小猫的Allow LAN (允许局域网连接)

默认情况下,Clash 只监听 本机回环地址(127.0.0.1:7890),只有 Windows 自己能用代理。勾选了 Allow LAN,Clash 会监听 0.0.0.0:7890,也就是允许 局域网内其他设备(虚拟机、Docker 容器、手机等)通过你的电脑的 IP 地址来使用代理
2.然后去查看Windows 宿主机上的虚拟网卡
1 | ipconfig.exe |

3.文本编辑器打开,写入
1 | sudo vim /usr/bin/dockerproxy |
4.改宿主机ip和端口输入
1 | #!/bin/bash |
然后赋执行权限
1 | sudo chmod +x /usr/bin/dockerproxy |
- 网卡(模糊化处理)→ 宿主机的 IP(在虚拟网络环境下 VM/容器可达的地址)
7890→ 代理软件提供的服务端口(通常是 HTTP/HTTPS 代理,常见于 Clash)- 作用:让 Docker 的网络请求走代理,加速/绕过网络限制。
1 | DEFAULT_PROXY="网卡:7890" |
在宿主机(Windows)上跑 Clash,开了一个代理:
但是在 Kali 虚拟机里跑 Docker,要让 Docker 用这个代理:
- 在 VM 里写
127.0.0.1:7890是不对的,因为那是 VM 自己。 - 要写宿主机在 VM 眼中的地址,比如
网卡:7890。这样 Docker 请求才会正确发到宿主机的代理。
使用
1 | sudo dockerproxy set#使用代理 |

也可以自定义代理
1 | sudo dockerproxy set 172.27.16.1:7890 |
验证是否走代理
1 | docker info | grep -i proxy |

HTTP Proxy / HTTPS Proxy → Docker Daemon 的全局网络请求会走 Windows 宿主机上的 Clash 代理
No Proxy → 这些地址不走代理(本机回环和 Docker 内部域名)
(warning是宿主机内核缺少 blkio(块设备限速)的支持,跟代理没关系,可以忽略)
镜像操作
1.先要拉取镜像
1 | docker pull ubuntu:22.04 |
很多时候,Dockerfile 里开头写的是:
1 | FROM ubuntu:22.04 |
那么在 docker build 时,如果本地没有 ubuntu:22.04,Docker 就会自动去拉。
这个操作其实就是提前把它保存在本地,因为它也需要配置代理,刚好测试你的 代理配置是否生效。
2.从Github上下载打包好的项目
链接(也需要链接代理)
然后把对应版本的附件重命名之后替换src中的文件就好了

3.最后就是build镜像

push上去

之后在镜像库里就可以找到这个镜像了

最后把这个镜像的完整引用放入网站就可以了



