容器安全 July 04, 2021

Docker相关知识学习

Words count 16k Reading time 14 mins. Read count 0

一、什么是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
#How to use docker!!!
#容器创建的命令大全
sudo docker build -t "helloworld100" . #有dockerfile时
#生成容器helloworld并将镜像的9999端口映射到主机的7777端口
sudo docker run -d -p 7777:9999 --name="helloworld" helloworld100
#创建容器但不使用,和run差不多
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/ #从容器中拷贝文件到宿主机
#文件共享,代码编辑
#先在本地app上载入想要共享的目录,然后apply上去再restart使其生效
sudo docker run -i -t -d --privileged --name=pwn2.23 -v /Users/v1ct0r/Desktop/ctf:/ctf v1ct0rs/dockerpwn:2.23


#有关查看的命令大全
#查看本地已有镜像,加个ubuntu可以过滤函数ubuntu的本地镜像
sudo docker images
#查看当前正在运行的镜像
sudo docker ps -a
#根据镜像名称过滤容器
sudo docker ps --filter ancestor=nginx
#获取镜像的元信息
sudo docker inspect mysql:5.6
#获取镜像的ip地址
sudo docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mymysql
#查看容器中运行的进程的信息
sudo docker top container-id/name
#查看镜像的创建历史
sudo docker history runoob/ubuntu:v3
#查看docker的版本信息
sudo docker version
#显示 Docker 系统信息,包括镜像和容器数等等
sudo docker info
#查看docker镜像发生过的事件,时间线
sudo docker events -f "image"="v1ct0rs/pwn:2.27" --since="2021-06-30"
#查看docker容器的日志
sudo docker logs -f pwn2.27 --since="2021-06-30"
#查看容器的端口映射的情况
sudo docker port cranky_cerf
#查看容器的文件结构更改
sudo docker diff pwn2.23



#有关容器和服务运行的命令大全
#运行镜像v1ct0rs/dockerpwn:2.27并进入,给个特权模式好用!
sudo docker run -i -t --privileged v1ct0rs/dockerpwn:2.27 bash
#后台运行镜像httpd,镜像8080端口映射到主机80端口
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
#直接运行docker里面的runoob脚本,查看1.c文件
sudo docker exec -it mynginx /bin/sh /root/runoob.sh
sudo docker exec -it pwn2.27 cat /ctf/1.c
#有关容器和镜像操作的命令大全
#删除容器,加个-f参数就是强制删除
sudo docker rm container-id/name
#删除镜像,加个-f参数就是强制删除
sudo docker rmi images-id/name
#拉取镜像
sudo docker pull ubuntu18.04
#上传镜像到自己的docker hub中
sudo docker push v1ct0rs/pwn_2.27
#查找docker库中已经有的镜像
sudo docker search pwn
#镜像改名,tag后可以加imagedID也可以不加
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
#将容器打包成tar快照文件
sudo docker export 98ca36> ubuntu.tar
#从tar文件中创建镜像,命名为runoob/ubuntu:v4
sudo docker import my_ubuntu_v3.tar runoob/ubuntu:v4
#将镜像保存为本地tar文件
sudo docker save -o pwn2.27.tar v1ct0rs/pwn:2.27
#将镜像文件载入到docker中
sudo docker load --input pwn2.27.tar
#将docker环境打包好,作为新的镜像,重新push上传才算是更新到了
sudo docker commit -m "pwn 18.04 2.27" 98c01766c4db(容器id) v1ct0rs/pwn:2.27


#登陆到docker hub和登出命令大全,登陆这里踩坑就是,特权模式登陆会失败,切换回普通模式,用sudo就可以成功,可能Mac的问题
sudo docker login
sudo docker logout

五、docker逃逸探索

0%