本帖最后由 Grav1ty 于 2021-11-18 18:20 编辑
新手Docker学习
惭愧,一直没更新(为了减轻内心的谴责,这几天一直有转发文章!!我可没偷懒不学习) 原因是这两周在搞自行车(不务正业),那车得有4年没骑了,各种零部件都得修,得换,我不愿推去修车店,全自己手动修..虽然麻烦,但我就比较爱折腾 再就是一直在熟悉新搞的linux,从小到大都用的win图形化界面,改linux太不习惯了,很多操作都得重新学习。
进入正题
最近弄好了事情就开始弄vulfocus了。虽然说,有在线的靶场,但我还是想自己搭建,折腾的过程也在学习吧,也就这样,有了这篇
首先安装就不说了,说些搭建的过程,前前后后有些细节比较重要: 其中还存在一个docker hub的东西,大家找的镜像名其实都是docker hub里面的公共镜像,有兴趣的还可以去用一些私有的镜像 (其实pull的时候还没感觉有很明显的速度慢的问题) Pull下来之后就可以启动 还可以添加自启动 之后就可以直接docker run,但是需要加一些参数,因为如果直接 - Docker run vulfocus/vulfocus
复制代码环境能打开,但是里面会有问题: 比如:
像这样一直会报错,而且下载也会有问题,一是无法显示实时进度,二是我目前还不确定他能不能完整的下载下来,至少我还没成功过
这里附上docker run参数列表(完整可输入docker run –help查看):
语法 - docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
复制代码OPTIONS说明: · -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项; · -d: 后台运行容器,并返回容器ID; · -i: 以交互模式运行容器,通常与 -t 同时使用; · -P: 随机端口映射,容器内部端口随机映射到主机的端口 · -p: 指定端口映射,格式为:主机(宿主)端口:容器端口 · -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用; · --name="nginx-lb": 为容器指定一个名称; · --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致; · --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致; · -h "mars": 指定容器的hostname; · -e username="ritchie": 设置环境变量; · --env-file=[]: 从指定文件读入环境变量; · --cpuset="0-2" or--cpuset="0,1,2": 绑定容器到指定CPU运行; · -m :设置容器使用内存最大值; · --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型; · --link=[]: 添加链接到另一个容器; · --expose=[]: 开放一个端口或一组端口; · --volume , -v: 绑定一个卷
还需要指出的是: - Docker run=docker create+docker start
复制代码其会自动生成一个容器并启动。
我们需要的命令是: - docker run -d -p [需要映射的端口]:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=[本机IP] vulfocus/vulfocus
复制代码这样操作之后就可以正常使用了:
正常的下载是可以实时显示进度的 (很慢很慢,这个之后再说) 拉取环境也没有问题:
添加完成后就可以在首页看到了:
之后每次启动直接打开创建好的容器就好了,就不要傻傻的还加那么多参数,记也记不住
打开之后环境也能保持上次关闭时的配置 甚至还能继续下载上次没下载好的任务
然后就是下载环境贼慢,巨慢,甚至会卡死的问题。 其实vulfocus下载环境的过程就是从docker hub上下载所以只要提高了docker pull的速度,下载环境的速度自然也上来了
这就要给docker挂一个国内源了,有两个方法 - 方法一:修改或创建/etc/docker/daemon.json
复制代码之后重启docker服务即可
方法二:直接复制命令: - curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io\n
复制代码这个就比较简单粗暴 同样需要重启docker服务 之后下载就非常快了
按照上面所说,vulfocus下载环境其实就是下载了一个新的镜像,然后通过部署实现在vulfocus这个容器里面也能打开那个环境的镜像而言 所以如果下次如果想要有针对性的做某个靶场的时候,可以直接在docker命令里面创建容器打开这个镜像,就不用vulfocus了: 比如我们这里打开一个已经下载好的某cms的环境: 直接访问给定的端口就行了: 这样简单方便很多。
Ok,以上就是可以基本满足正常使用vulfocus的所有docker命令了
再深入了解一点docker的常用命令: - Docker ps:查看正在运行的容器
- Docker ps -a:查看所有容器,不论是否在运行
- Docker kill [容器名]:强行关闭容器
- Docker stop [容器名]:温柔的关闭容器
- Docker rm [容器名]:删除容器(需要容器已关闭,否则报错)
- Docker rm $(docker ps -a -p):删除所有容器
- Docker creat [参数]:创建容器
- Docker start [容器名]:启动容器
- Docker restart [容器名]:重新启动容器
- (现在也就明白docker run=docker creat+docker start是什么意思了)
- Docker commit [容器名] [新名字]:保存容器现有状态,并创建一个新的容器保存
复制代码还有rename之类重命名的命令,就不细说了,具体可以翻看docker官方文档。
备注一下:容器名可以是名字,也可以是docker给他的随机名(也就是小写字母+数字组成的那串字符),也可以是随机名的前几个字符(到能区分别的容器的位数即可)
21.11.7更新:
- Docker exec -it [容器名] /bin/bash或者直接bash
复制代码 进入容器,可以查看容器内容
找到一个博客,里面记录的docker学习比我详细多了。
见贤思齐
https://yeasy.gitbook.io/docker_practice/ |