最新消息:

我的不归路之重新认识Docker(完整版)

Kali Linux demon 3350浏览 0评论

0x01 Docker简介

前段时间写了一份Dcoker_kali,docker对我来说可以使用docker_kalil inux,也可以部署我们安全工作的靶机环境,如前段时间,在我的msf系列课程中就用到了,如何部署docker-s2-046的靶机环境。它对我来说应用不止这么一点,可以部署DVWA、WebGoat等渗透环境,可当做一个渗透演练平台。之前留了一部分坑在那,这次我打算好好的完善此Docker_kali使用内容。

重新认识Docker

Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的运行效率,降低了云计算资源供应的成本! 使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!

无论是应用开发者、运维人员、还是其他信息技术从业人员,都有必要认识和掌握 Docker,以在有限的时间内做更多有意义的事。

在安装前,先了解一些主要的概念:

Docker 在Linux上安装过程里,你的物理机器既是本地主机也是Docker的宿主机。在网络里,本地主机的意思是你的计算机。Docker的宿主机是托管这容器运行的计算机。

在一个标准的Linux安装中,Docker客户端、Docker Daemon和一些运行中的容器会直接寄托在你的本地主机上。这意味着你可以使用标准的本地地址和端口去访问容器。

为什么要使用 Docker?

作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势:

更高效的利用系统资源

由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

更快速的启动时间

传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。

一致的运行环境

开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 “这段代码在我机器上没问题啊” 这类问题。

持续交付和部署

对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。

使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。

而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

更轻松的迁移

由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

更轻松的维护和扩展

Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

参考资料:https://yeasy.gitbooks.io/docker_practice/content/introduction/why.html

0x02 windows下docker的安装

Docker for Windows的安装与使用

在Windows 10中,下载Docker for Windows的安装包,然后开始安装。正如上面所述,如果Hyper-V没有启用,安装过程会自动启用Hyper-V,这将需要重新启动Windows系统。安装完成后,就可以在Windows下使用Docker了。

在安装docker for windows 之后不能安装vm、vbox等虚拟机,如需安装vbox、vm等虚拟机可采用下一个docker tools box 安装方法。

启动Docker for Windows,会在系统托盘部分显示一条小鲸鱼的图标:

在Docker完全启动之前,小鲸鱼背上的小方块会不停地闪烁变化,等小方块稳定不变后,表示系统完全启动成功,此时就可以对Docker的环境进行设置,或者开始执行Docker命令了。

在Docker for Windows成功启动后,就可以在CMD下执行Docker命令了。

Docker tools box的安装与使用

因为Docker Engine守护程序使用特定于Linux的内核功能,因此无法在Windows上本机运行Docker Engine。相反,你必须使用docker命令 docker-machine,创建并连接到一个小型的Linux VM您的计算机上。该VM在Windows系统上为您托管Docker Engine。

要运行Docker,您的计算机必须具有运行Windows 7或更高版本的64位操作系统。另外,您必须确保在您的计算机上启用虚拟化。

0x001

0x002

安装完会有VirtualBox/Docker Quickstart Terminal /kitematic (GUI图形化管理工具)

0x003

启动Dcoker tools box 报错该解决?

解决方案:(Windows环境下手动更新boot2docker.iso)下载boot2docker.ISO替换该C盘当前用户目录下的 .docker/machine/cache\boot2docker.iso 的boot2docker.iso这个镜像文件。

下载错误解决:

0x03 linux下安装docker

linux下安装docker最低系统安装要求为: Ubuntu 版本最低为 12.04 LTS,但从稳定性上考虑,推荐使用 14.04 LTS 或更高的版本。Debian 7 Wheezy (64-bit)(必须启用 backports)。linux下安装docker 使用以下命令即可进行安装,我这边就使用深度linux64位 作为演示。

apt-get install docker.io

建立docker用户组

默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。

安装docker.io 的时候已经自动添加了docker用户组,只需将当前非root权限的用户 添加docker组即可。

usermod -aG docker $USER

0x04 Mac os X 下 安装

苹果系统安装我这里就没什么好说的了,苹果系统下的都是一键安装的。Docker for mac 下载链接:https://www.docker.com/docker-mac 。去官网下载docker安装即可!

将安装包下载后,拖放至应用程序即可。

安装后,启动docker后可在,右上角看到docker -小鲸鱼的图标。

安装后可在终端下直接使用docker命令。

0x10 Docker常用命令简单使用实例

1.搜索镜像

docker search 镜像名称

kali官方docker镜像拉取说明:https://www.kali.org/news/official-kali-linux-docker-images/

搜索kali镜像:

docker search kali

2.docker_kali镜像拉取下载

docker pull kalilinux/kali-linux-docker

不过在这里会产生一个问题,镜像下载慢!!因为镜像在国外,所以下载过程可能会延迟掉线这样会非常不友好。

3.使用国内的docker镜像加速器阿里云&DaoCloud加速器

如果你使用的docker是docker for windows 、或者docker for mac 的话 推荐可使用‘DaoCloud 加速器’ https://www.daocloud.io/mirror#accelerator-doc

一、在‘DaoCloud 加速器’ 注册登录后 进行复制镜像地址,到docker下进行设置。

二、右键点击桌面顶栏的 docker 图标,选择 Preferences,找到Daemon,在registy mirrors 中添加,并应用重启docker(apply&restart)

4.linux或者docker tools box可以选择阿里云加速器–docker镜像仓库。

https://account.aliyun.com/login/login.htmoauth_callback=https%3A%2F%2Fcr.console.aliyun.com%2F&lang=zh#/accelerator

查看阿里云加速器操作文档,以及docker的版本,进行对应操作。

配置完之后,镜像开启加速下载如下图:

5.创建并连接容器、端口映射、绑定随机id

docker run -i -t –name kali  -p 8081:80  -p 8080:8080  -p 4444:4444  -p 5555:5555  -p 2222:22  kalilinux/kali-linux-docker  /bin/bash

命令详解:

一、run命令简单使用

docker run -i -t //创建并连接容器, run命令参数使用    -i: 以交互模式运行容器,通常与 -t 同时使用;-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用

在这里我们使用docker ps -a 查看docker容器运行、创建的历史记录,可以发现你每次创建一个容器的时候都会生成一个随机id、容器名称,在81324e6f0059我们可以看到,这是我们之前生成的,也是指定了容器的名称,将ID、名称附着在容器上。

docker  ps -a

二、Docker 会为我们创建每一个容器自动生成一个随机ID、名称,如果想为容器指定一个名称,而不是使用自动生成的,则可以使用 –name 如:

–name kali  //指定容器名称为kali

三、容器端口映射

docker指令:docker run -p ip:hostPort:containerPort redis

  • 使用-p参数会分配宿主机的端口映射到虚拟机。
  • IP表示主机的IP地址。
  • hostPort表示宿主机的端口。
  • containerPort表示虚拟机的端口。

以下为端口映射实例图片对比:

我们也可以采用指定容器端口,映射本机随机端口防止本机端口占用等情况。格式为-p <空>:容器需映射端口(可指定物理机的随机端口映射容器端口。)

docker run -i -t  -v /Users/demon:/root  -p :4444 -p :5555 -p :22 kali /bin/bash

端口被占用

指定随机端口为空

映射为随机端口

四、使用-v 参数实现目录共享挂载,docker可以支持把一个宿主机上的目录挂载到镜像里

通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。现在镜像内就可以共享宿主机里的文件了。然而我这边不打算采用目录共享,可用ssh的特性进行文件传输上传下载等功能。

docker run -i -t  -v /Users/demon:/root  -p :4444 -p :5555 -p :22 kali /bin/bash

6.查看列举本地镜像

docker images

7.开启容器

start命令:

docker start 容器ID or 容器名称

docker start  e8d612658eb0

容器名称可指容器随机生成的名称亦可是–name 指定过的名称 如之前指定的是kali 这里就可以使用 docker start kali

8.连接容器

attach 命令:

docker attach 是Docker自带的命令。下面示例如何使用该命令。

但是使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。

同样docker attach 可以接上容器名称or 容器ID


使用attach窗口占用解决方案:

  1. 使用kimtematic GUI管理工具 点击exec。
  2. 使用命令行 exec命令。

docker exec -it kali /bin/bash

9.停止容器

在容器内使用exit即停止容器。

或在容器外使用stop命令即停止容器。

10.删除容器

rm命令:

使用rm命令之前必须停止该运行的容器。

docker rm 容器id or 容器名称

11.批量删除停止容器

docekr ps -a -q 查看容器停止或者正在运行的容器id

docker rm 之前也说到过 是删除容器的意思,但是docker rm 本身默认的是不会删除正在运行的容器。如此一来 docker rm $(docker ps -a -q) 的意思就是 批量删除停止的容器。

12.删除本地镜像

docker rmi 镜像名or 镜像ID 删除之前需停止容器并删除和该镜像关联的容器。

13.将容器做备份快照迁移。

Docker是基于镜像的。镜像类似于已经包含了文件、配置和安装好的程序的虚拟机镜像。同样的,你可以像启动虚拟机一样启动多个镜像实例。运行中的镜像称为容器。你可以修改容器(比如删除一个文件),但这些修改不会影响到镜像。不过,你使用docker commit 命令可以把一个正在运行的容器变成一个新的镜像。

docker save : 将指定镜像保存成 tar 归档文件。

Export命令用于持久化容器(不是镜像)。

以上同样都是导出,但是区别在于save 是导出镜像而不是导出容器,export是导出容器,历史记录但不能历史层回滚。反而使用export命令导出保存快照,你将无法回滚到之前的层(layer)。以下是使用导入save的镜像以及export的镜像,导入镜像的大小。

docker load -i  kali.tar

docker import kali.tar kali

14 .docker 资源占用之内存

docker stats可以观察到此时的资源使用情况是固定不变的。

docker stats

使用-m 参数可指定内容(m、g)使用docker -m操作会使内存被限制为输入大小的两倍,内存上限为400m

可使用内存压力测试工具:stress,对内存进行测试。若运行后在几秒内被杀死说明内存被限制为400M

15.尝试写一份简单的Dockerfile

FROM kalilinux/kali-linux-docker
# 拉取官方kali镜像

MAINTAINER Demon
#注明作者

RUN apt-get update && apt-get install -y \
  sqlmap \
  ssh \
  –no-install-recommends && rm -rf /var/cache/apt/archives/*.deb
#使run 命令 执行 要安装的软件如安装ssh 、sqlmap 以及清理缓存


ADD sshd_config /etc/ssh/
#添加本地文件到容器的/etc/ssh/sshd_config 进行替换。

dockerfile实现了自动拉去镜像、构建镜像、自动更新源、下载安装sqlmap、配置ssh等动作。

docker build -t kalil . //编写完成 Dockerfile 后可以使用docker build来生成镜像。

创建并连接容器:

docker run -i -t –name=kali -p 8081:80 -p 8080:8080 -p 4444:4444 -p 5555:5555 -p 2222:22 kalil /bin/bash

实现sqlmap ssh等配置

实现已配置ssh

下载链接:

https://github.com/boot2docker/boot2docker/releases
https://www.docker.com docker
https://www.docker.com/docker-windows docker for windows
https://www.docker.com/docker-mac docker for mac
https://www.docker.com/products/docker-toolbox docker tools box

参考资料:

https://my.oschina.net/aixiaohua/blog/651171 Windows环境下手动更新boot2docker.iso
http://www.cnblogs.com/franson-2016/p/6412971.html 解决非root用户使用docker的办法
https://yeasy.gitbooks.io/docker_practice/content/install/ubuntu.html docker入门实践

http://www.tuicool.com/articles/EBNZBjJ 安全相关Docker Image收集
https://my.oschina.net/zjzhai/blog/225112 Docker的save和export命令的区别
http://blog.csdn.net/u010472499/article/details/52994454 Docker 资源限制之内存
http://www.jb51.net/article/103483.htm Docker容器内存限制的方法
http://os.51cto.com/art/201507/485007.htm Dockerfile命令介绍及实例

亦可参考我的好基友国光的博客:

http://www.sqlsec.com/2017/docker.html docker入门简明。

本文由即刻安全Demon原创发布,转载请注明来源!

转载请注明:即刻安全 » 我的不归路之重新认识Docker(完整版)

您必须 登录 才能发表评论!



合作伙伴