一、什么是Docker?
之前一直用的虚拟机打pwn题,但是遇到不同架构时,要多开虚拟机就觉得听离谱的,占用太多内存,还贼麻烦其实,偶然间见识了docker搭建的pwn环境,觉得非常实用,而且命令行操作其实就是以后的趋势,所以决定好好学习一下docker的操作和使用。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 docker技术比虚拟机技术更为轻便、快捷。
二、docker的下载与安装
linux下安装docker非常简单:
1
| sudo apt install docker.io
|
Mac下安装也一样:
1
| brew cask install docker
|
但是mac下还可以直接下载一个dmg轻量级的图形用户界面管理工具,方便我们管理docker
1
| https://docs.docker.com/docker-for-mac/install/
|
三、docker命令的相关参数一览
关于参数的说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| -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: 绑定一个卷 -s :向容器发送一个信号
|
四、docker的常用命令整合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
sudo docker build -t "helloworld100" .
sudo docker run -d -p 7777:9999 --name="helloworld" helloworld100
sudo docker create --name myrunoob nginx:latest
sudo docker cp uuu aded663b997c:/home/ctf/ sudo docker cp aded663b997c:/home/ctf/chunk /home/dell/V1ct0r/chunk/
sudo docker run -i -t -d --privileged --name=pwn2.23 -v /Users/v1ct0r/Desktop/ctf:/ctf v1ct0rs/dockerpwn:2.23
sudo docker images
sudo docker ps -a
sudo docker ps --filter ancestor=nginx
sudo docker inspect mysql:5.6
sudo docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mymysql
sudo docker top container-id/name
sudo docker history runoob/ubuntu:v3
sudo docker version
sudo docker info
sudo docker events -f "image"="v1ct0rs/pwn:2.27" --since="2021-06-30"
sudo docker logs -f pwn2.27 --since="2021-06-30"
sudo docker port cranky_cerf
sudo docker diff pwn2.23
sudo docker run -i -t --privileged v1ct0rs/dockerpwn:2.27 bash
sudo docker run -d -p 80:8080 httpd
sudo docker exec -it container-id/name bash sudo docker attach container-id/name
sudo docker stop container-id/name
sudo docker start container-id/name
sudo docker kill -s KILL mynginx
sudo docker pause db01
sudo docker unpause db01
sudo docker exec -it mynginx /bin/sh /root/runoob.sh sudo docker exec -it pwn2.27 cat /ctf/1.c
sudo docker rm container-id/name
sudo docker rmi images-id/name
sudo docker pull ubuntu18.04
sudo docker push v1ct0rs/pwn_2.27
sudo docker search pwn
sudo docker tag ubuntu:15.10 runoob/ubuntu:v3
sudo docker rename ubuntu18 pwn_2.27
sudo docker wait CONTAINER
sudo docker export -o mysql-2021.tar pwn2.27
sudo docker export 98ca36> ubuntu.tar
sudo docker import my_ubuntu_v3.tar runoob/ubuntu:v4
sudo docker save -o pwn2.27.tar v1ct0rs/pwn:2.27
sudo docker load --input pwn2.27.tar
sudo docker commit -m "pwn 18.04 2.27" 98c01766c4db(容器id) v1ct0rs/pwn:2.27
sudo docker login sudo docker logout
|
五、docker逃逸探索