Contents

Ubuntu16.04 docker环境搭建

为获取2.27libc下pwn环境,虚拟机过于麻烦,遂启用docker。

安装docker

执行这个命令后,脚本就会自动的将一切准备工作做好,并且把Docker CE 的Edge版本安装在系统中

1
2
3
sudo apt install curl
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun

启动docker服务

1
2
sudo systemctl enable docker
sudo systemctl start docker

建立docker用户组

这一步是必须的,并且必须将当前用户加入docker用户组,否则权限不够。

1
2
sudo groupadd docker
sudo usermod -aG docker $USER

然后log out注销当前ubuntu用户,再log in,使其生效。

换源加速

1
sudo vi /etc/docker/daemon.json

按i进入插入模式后,在其中添加如下代码

1
2
3
4
5
{
    "registry-mirrors": [
        "https://registry.docker-cn.com"
    ]
}

再重新启动服务即可

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

将镜像pull到本地

以pwndocker为例,https://github.com/voidzhakul/pwndocker

1
docker pull registry.cn-shenzhen.aliyuncs.com/zhakul/docker:pwndocker

检查是否pull到本地,使用docker images命令查看本地镜像

1
2
3
$ docker images
REPOSITORY                                        TAG                 IMAGE ID            CREATED             SIZE
registry.cn-shenzhen.aliyuncs.com/zhakul/docker   pwndocker           cffec5c49ab5        2 months ago        1.66GB

将本地目录挂载到镜像中

将我们需要在docker中执行的文件挂载,并运行docker

1
docker run -it -v /home/dock/Downloads:/usr/Downloads images /bin/bash

通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径,images使用上述提到的REPOSITORY:TAG格式。

退出、进入容器

退出容器

1
root@c8cb9d4168c7:## exit

查看所有产生的容器

1
2
3
4
5
$ docker ps -a
CONTAINER ID        IMAGE                                                       COMMAND             CREATED             STATUS                      PORTS               NAMES
c8cb9d4168c7        registry.cn-shenzhen.aliyuncs.com/zhakul/docker:pwndocker   "/bin/bash"         16 minutes ago      Exited (0) 6 minutes ago                        crazy_kilby
f140ab8db11d        registry.cn-shenzhen.aliyuncs.com/zhakul/docker:pwndocker   "/bin/bash"         49 minutes ago      Exited (0) 46 minutes ago                       upbeat_davinci
b43caf8776df        registry.cn-shenzhen.aliyuncs.com/zhakul/docker:pwndocker   "/bin/bash"         59 minutes ago      Exited (0) 19 minutes ago                       frosty_easley

镜像是静态的。而容器是动态的,类似于镜像的一个实例。如果要重新进入某个容器crazy_kilby

1
docker start crazy_kilby

其容器会在后台运行,attach后即可交互

1
docker attach crazy_kilby