最近由于工作的原因,需要在内网用docker环境搭建靶场来复现一些漏洞的attack。
特此简单记录自己docker的学习过程。
准备
操作系统:虚拟机 ubuntu 16.04 LTS
我收集的Docker资料包下载
Docker简介
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs)。
Docker是为开发者和系统管理员设计的,用来发布和运行分布式应用程序的一个开放性平台。
Docker相对于VM虚拟机的优势十分明显,那就是轻量和高性能和便捷性。
Docker 架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
应用场景
在docker的网站上提到了docker的典型场景:
1.Automating the packaging and deployment of applications(使应用的打包与部署自动化)
2.Creation of lightweight, private PAAS environments(创建轻量、私密的PAAS环境)
3.Automated testing and continuous integration/deployment(使连续的集成/部署、测试自动化)
4.Deploying and scaling web apps, databases and backend services(部署、衡量网页app、数据库和后台服务)
局限
Docker并不是全能的,设计之初也不是KVM之类虚拟化手段的替代品,简单总结几点:
1.Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用
2.LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的
3.隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库
4.网络管理相对简单,主要是基于namespace隔离
5.cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)
6.docker对disk的管理比较有限
7.container随着用户进程的停止而销毁,container中的log等用户数据不便收集。
Docker安装
本教程只针对 ubuntu 16.04 LTS,我是在虚拟机上面安装的。
将下载好的资料包拷贝到ubuntu的文件系统中去。
在当前目录空白处点击右键,选择Opern in Terminal。
安装vim。
在命令行输入
|
|
如果报错
|
|
在前面加上sudo意为用管理员权限操作,重新输入
|
|
依次安装
|
|
安装AUFS文件系统。
|
|
安装cgroup工具。
想详细了解cgroup的同学可以看看下面两个链接:
cgroup介绍、安装和配置文件解析
cgroups介绍.pdf
安装liberror-perl(可用来以后配置git)。
|
|
安装docker-engine(Docker 引擎)
The Docker Engine is a lightweight container runtime and robust tooling that builds and runs your container. Docker allows you to package up application code and dependencies together in an isolated container that share the OS kernel on the host system. The in-host daemon communicates with the Docker Client to execute commands to build, ship and run containers.
Docker引擎是一个轻量级容器运行时和强大的工具,构建和运行您的容器。Docker允许将应用程序代码和依赖关系打包在一个隔离的容器中,这些容器共享主机系统上的操作系统内核。主机内守护程序与Docker客户端进行通信,以执行命令来构建,运送和运行容器。
Docker Engine runs on both Linux and Windows operating systems on any infrastructure to create the operating environment for your applications. From a single container on a single host to a multi-container application networked across a cluster of hosts, Docker Engine delivers powerful tooling with a very simple user interface.
Docker Engine在任何基础架构上的Linux和Windows操作系统上运行,为应用程序创建操作环境。从单个主机上的单个容器到跨群集主机联网的多容器应用程序,Docker Engine提供了具有非常简单的用户界面的强大的工具。
|
|
到这里Docker容器已经安装好了。
查看Docker版本。
如果返回Docker version 1.12.5, build 7392c3b
,证明前面的操作顺利。
查看Docker镜像。
|
|
如果报错Cannot connect to the Docker daemon. Is the docker daemon running on this host?
,在前面加上sudo意为用管理员权限操作,重新输入
|
|
观察到返回:
|
|
都是空即为没有镜像的意思,下面我们来导入一个镜像。
资料里的bwapp.tar.gz是一个demo,它是一个漏洞环境的镜像。
|
|
稍微等一小会儿。
查看Docker镜像。
|
|
结果:
|
|
修改镜像的标签。
查看Docker镜像。
结果:
查看docker镜像所占用的端口。
|
|
如图查看docker镜像所占端口。
启动镜像bwapp。
|
|
前面的”0.0.0.0:”是为了方便局域网中其他ip访问,可以省略。省略后”0.0.0.0:”仅虚拟机的宿主机(物理机)可以访问。8000是物理机中的端口号,80是虚拟机中docker镜像占用的端口号。
返回一长串code即为启动成功。3d23ce867614b04ae7fb7e438fb5676b73e6f9fbc42f232d994a39cbdf6d1621
检查docker占用的线程号确认docker镜像是否启动。
我的运行结果:
|
|
到这里docker镜像已启动且已做好端口映射。可以在物理机的浏览器中根据虚拟机的ip+刚才给物理机设置的端口号8000即http://192.168.183.131:8000来访问。
注意:第一次在浏览器中访问要在ip和端口号后面输入”/install.php初始化一下”。
bwapp是仅我上传的一个demo镜像,用作方便docker的讲解,不属于docker的插件。
让你的Docker连上服务器仓库
|
|
如果提示没权限,输入
|
|
接着输入root用户的密码即可保持root权限操作。
如果忘记root用户密码,用以下命令重置root用户密码:
|
|
拉取服务器仓库中的镜像
|
|
总结
因本人水平有限,故此文只作为自己学习过程中的记录。并不是什么教程,如有纰漏,还望指正,定当不胜感激。
参考文献
百度百科
版权声明:本文为博主原创文章,转载请注明出处 Leezp’s Blog