Docker入门记录

因为要准备给队里办比赛,现学了docker技术,之前一直懒着不想学,这次不得不学了。

什么是docker

首先来一波官方的解释。。。。

有点麻烦😂,大概就是个比vm好用的搭建服务的东西。。

pwn题中的docker部署

先是Dockerfile,这里我就用了一下国赛的Dockerfile,然后一步一步的解析一下

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
FROM ubuntu:16.04
# 首先是确定镜像的版本
RUN sed -i "s/http:\/\/archive.ubuntu.com/http:\/\/mirrors.tuna.tsinghua.edu.cn/g" /etc/apt/sources.list
# 更换源
RUN apt-get update && apt-get -y dist-upgrade
RUN apt-get update && apt-get install -y lib32z1 xinetd build-essential
RUN apt-get install xinetd
# 更新apt源,安装32位,安装xinetd
RUN useradd -m ctf
# 添加新用户并创建工作目录
WORKDIR /home/ctf
#改变工作目录
RUN cp -R /lib* /home/ctf
RUN cp -R /usr/lib* /home/ctf
#复制一些lib文件到目录
RUN mkdir /home/ctf/dev
RUN mknod /home/ctf/dev/null c 1 3
RUN mknod /home/ctf/dev/zero c 1 5
RUN mknod /home/ctf/dev/random c 1 8
RUN mknod /home/ctf/dev/urandom c 1 9
# 创建一些设备文件
RUN chmod 666 /home/ctf/dev/*
# 设置权限
#bin files
RUN mkdir /home/ctf/bin
# 创建bin目录
RUN cp /bin/bash /home/ctf/bin
RUN cp /bin/sh /home/ctf/bin
RUN cp /usr/bin/timeout /home/ctf/bin
RUN cp /bin/ls /home/ctf/bin
RUN cp /bin/cat /home/ctf/bin
# 拷贝命令
#remove not have
RUN rm -rf /home/ctf/lib/apt /home/ctf/lib/cpp /home/ctf/lib/gnupg /home/ctf/lib/init /home/ctf/lib/lsb /home/ctf/lib/os-release /home/ctf/lib/rsyslog /home/ctf/lib/tc /home/ctf/lib/udev /home/ctf/lib/binfmt.d /home/ctf/lib/dpkg /home/ctf/lib/gold-ld /home/ctf/lib/initramfs-tools /home/ctf/lib/ldscripts /home/ctf/lib/mime /home/ctf/lib/python2.7 /home/ctf/lib/systemd /home/ctf/lib/terminfo /home/ctf/lib/compat-ld /home/ctf/lib/gcc /home/ctf/lib/ifupdown /home/ctf/lib/insserv /home/ctf/lib/locale /home/ctf/lib/modules-load.d /home/ctf/lib/python3 /home/ctf/lib/tar /home/ctf/lib/tmpfiles.d
# 删除一些不必要的libc

COPY ./ctf.xinetd /etc/xinetd.d/ctf
COPY ./run.sh /home/ctf
COPY ./pwn /home/ctf
COPY ./flag /home/ctf
# 拷贝文件
RUN chmod +x /home/ctf/*
RUN chown -R root:ctf /home/ctf
RUN chmod -R 750 /home/ctf
# 将文件的拥有者设置为root,使用者设置为ctf
RUN touch /home/ctf/*
RUN touch /home/ctf/*/*
RUN touch /home/ctf/*/*/*
# 更新文件的时间标签
RUN echo "Blocked by ctf_xinetd" > /etc/banner_fail
RUN echo 'ctf - nproc 1500' >>/etc/security/limits.conf
# 限制用户最大进程数为1500

CMD exec /bin/bash -c "/etc/init.d/xinetd start; trap : TERM INT; sleep infinity & wait"
#启动xinetd服务
EXPOSE 8888

xinted文件分析

稍微了解了一下xinted是什么东西,大概是一个超级服务器守护进程?。。。。。(大概是一个服务运行工具吧😂)

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
#当有请求到达这些协议端口的时候直接运行
service ctf
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = root
type = UNLISTED
port = 8888
bind = 0.0.0.0
server = /usr/sbin/chroot
# replace helloworld to your program
server_args = --userspec=1000:1000 /home/ctf timeout 50 ./run.sh
banner_fail = /etc/banner_fail
# safety options
per_source = 10 # the maximum instances of this service per source IP address
rlimit_cpu = 60 # the maximum number of CPU seconds that the service may use
rlimit_as = 1024M # the Address Space resource limit for the service
#access_times = 2:00-9:00 12:00-24:00

#Instances=20 #process limit
#per_source=5 #link ip limit

#log warning die
log_on_success = PID HOST EXIT DURATION
log_on_failure =HOST ATTEMPT
log_type =FILE /var/log/myservice.log 8388608 15728640

}

问题提出。。–userspaec=1000:1000这参数森么鬼。。
希望有大佬给我留个言解答下。。。

docker命令

step 1
docker build -t "name" .

step 2

docker images习惯性的查看下创建好了没嘻嘻

step 3

docker run -d -p"0.0.0.0:8888:8888" -h "name" --name="name" name 运行docker就可以了

其他命令记录

docker exec -it “id” bash 进入容器
docker rmi images. -f(强制)
docker stop container….
docker ps 查看正在运行的docker

结语

等后面深入使用了在补充吧,就用到这里足够用啦

这里广告:欢迎参加由De1ta战队出题运维的xctf联赛系列:De1CTF国际赛。