Docker入门简明教程
Docker简介
概念
Docker是基于Go语言实现的云开源项目,是基于Linux的多项开源技术提供高效、敏捷和轻量级的容器方案。创建于2013年初。自从开源后就受到了广泛的关注,从长远的眼光来看,Docker是未来虚拟化的一个发展的趋势。
优势
1.一次构建,处处运行,带来了更快速的交付和部署和更轻松的迁移和扩展。
2.对系统内核进行抽象,带来了更轻量快捷的的体验,一台主机可以同时运行数千个Docker容器,而且在性能上几乎不会损耗。
Docker1.1.2中Ubuntu14.04主机与Ubuntu14.04Docker容器性能测试
参数 | 性能测试工具 | 物理主机 | Docker |
---|---|---|---|
CPU | sysbench | 1 | 0.9945 |
写内存 | sysbench | 1 | 0.9826 |
读内存 | sysbench | 1 | 1.0025 |
磁盘I O | dd | 1 | 0.9811 |
网络 | iperf | 1 | 0.9626 |
从数值上看,物理主机与Docker容器之间的性能差异不大,二者速度几乎一样。
基本组件
镜像:镜像是构建Docker世界的基石。用户的一切操作都是基于镜像来运行自己的容器的。同时镜像也是Docker的“构建”部分,也可以把镜像当作容器的"源代码",镜像体积很小,便携性高,易分享、存储和更新。
容器:容器是基于镜像启动起来的,用户只需要把自己的应用程序或服务打包放进容器即可。容器中可以运行一个或多个进程,是Docker的启动和执行阶段。
Docker安装
安装Docker的前提条件
运行64位CPU架构的计算机(这意味着一些较老的机器可能无法安装Docker)
Linux系统的话,得运行Linux3.8内核及其以上的版本,一些老版本的2.6x内核运行可能会出现一些无法预料的bug
windows安装Dokcer
官网直接下载安装包: https://download.docker.com/win/stable/InstallDocker.msi
然后直接运行来安装Docker,开启Hyper-V(这个阶段可能需要重启),有可用更新的话,就安装 更新。
小提示:windows下的Docker启动貌似有点慢,不知道是不是我这龟速的机械硬盘的原因。
dokcer完全启动后,是这样样子的:
验证docker是否安装成功:在命令提示符下输入:docker
出现下面这张图即安装成功:
Mac OS安装Docker
首先安装Virtual Box,官网下载:https://www.virtualbox.org
Virtual box安装完了再安装Docker
Docker官网直接下载安装包: https://download.docker.com/mac/stable/Docker.dmg
Mac下安装启动就很快了。
然后在终端下输入:
docker
注意:Mac和Linux下必须得以root身份才可以稳定运行docker,
效果如下:
Ubuntu安装Docker
Linux安装要简单的多,毕竟Docker一开始就是基于Linux提出来的。
首先以root身份终端下输入:
apt-get install docker.io
然后就没有然后了,1条命令即可安装
root身份终端下输入:docker
查看安装是否成功:
Dokcer入门
搜索镜像
Dokcer通过Dokcer Hub搭建镜像共享生态系统,这意味着我们可以直接下载其他人已经打包好的镜像。
使用docker search 命令在Docker HUB中搜索镜像
这里我们以搜索Ubuntu镜像为例:
docker search ubuntu
一般我们下载靠前面的镜像,一般带有Ubuntu、centos并且靠前的镜像都是官方镜像,其他的都是用户自己创建并共享的镜像。
下载镜像
下面从Docker Hub下载Ubuntu镜像
终端输入:
docker pull ubuntu
Docker默认是下载最新版本的Ubuntu镜像
镜像一般都很小的,网速快的话可以分分钟下载完。
列出下载的镜像
下面列出本地主机中已经下载的docker镜像
终端输入:
docker images
可以看到我们刚刚下载的Ubuntu镜像,大小才129MB,是4周前更新的版本
创建并使用容器
使用run命令即可用镜像来创建一个容器
docker run -i -t --name hellodocker ubuntu /bin/bash
命令格式为:docker run <选项参数> <镜像名称> <要运行的文件>
>使用 -i、-t选项可以在运行的Bash shell中进行输入与输出
>使用—name可以指定容器的名称。如果不指定的话,docker默认会自动生成随机的名称进行指定。
再回看这行命令大概就明白了它的意思:使用ubuntu这个镜像来创建一个 名为hellodocker 的容器
当我们创建容器后,默认就进入了容器,此时使用cd、ls等命令发现已经不是我们物理机上的ubutu了。
退出容器
终端输入:
exit
从Bash shell退出,因为在Ubuntu镜像中直接运行/bin/bash 可执行文件,所以退出后 容器也会终止(stop)
就这样我们创建运行并退出了一个容器,现在自己再亲手创建个容器试试看吧.-v-
查看容器列表
终端输入:
docker ps -a
查看本地的所有容器的详细信息
可以看到,除了我们第一个创建的名为 hellodocker外,还发现了我后来新建的GG容器,他们都是Exited(退出状态),这里还可以看到他们的ID、所使用的镜像、创建时间、端口等信息
使用start命令来启动容器
到这里机智的小伙伴们可能产生疑问了:第一次创建容器是默认就进入了容器,那么在我们 exit 退出容器之后如何唤醒我们的容器呢?
表急,其实docker早已考虑到了这个,我们在终端下输入:
docker start hellodocker
来启动名为hellodocker的容器,所以启动docker容器的命令就是:
docker start 容器名
来启动名为hellodocker的容器,所以启动docker容器的命令就是:
docker start 容器名
使用restart命令来重启容器
与重启系统一样,也可以直接使用如下命令来重启某个容器:
docker restart hellodocker
使用attach命令连接容器
前面我们start了一个容器,但是还是默认不进入容器,我们使用
docker ps -a
来查看容器的运行情况:
可以看到hellodocker这个容器已经启动了4秒多了,说明容器已经在运行了,那么我们怎么来连接启动的docker容器呢?
终端输入:
docker attach hellodocker
来连接已经在后台启动的docker容器
小提示:这里得 按下 回车 才进入容器,不要傻等,几分钟内都没有什么反应的(不要问我怎么知道的,心酸。。。)
Docker系统统计信息
终端下输入:
docker stats
用来显示一个或多个容器的统计信息,可以看到容器的ID、CPU占用率、内存使用率、网速等信息
终止容器
要终止容器的话,首先docker ps -a列出后台正在运行的容器
然后终端输入:
docker stop hellodocker
终止了我们刚启动不久的hellodocker 容器
删除容器
如果容器不再使用可以使用如下命令删除:
docker rm GG
删除了GG的容器(你要删除的容器必须已经停止运行了)
删除镜像
如果镜像不再使用可以使用如下命令删除:
docker rmi ubuntu
删除了本地的ubuntu镜像(此刻必须删除所有运行在这个镜像上的容器)
OK Docker的入门命令就教到这里了,下面我们来实战一把吧。
打造属于你自己的Kali
一般我们搞信息安全的难免都会用到Kali Linux,如果不想安装累赘的虚拟机或者不想折腾更新源等那么该肿么办呢?现在有了Docker,这一切的问题都不再是问题,使用Docker来运行Kali,更加轻便快捷,而且可以ping通物理机的C段,用来实战的话再合适不过了。
秀个主题先:
安装了Mac OS的主题后,Ubuntu也感觉不再那么难用了。(嘿嘿 不扯了 赶紧步入正题了)
首先搜索下可用的Kali镜像
docker search kali
出来了一大堆,根据名字可以大概判断出第二个镜像是带有meatsploit的,所以为了日后配置的方便我们这里直接来下载第二个镜像。
下载Kali 镜像
docker pull linuxkonsult/kali-metasploit
下载带有msf的kali镜像(镜像不大,我这边下载完不到10分钟)
创建Kali 容器
下载带有msf的kali镜像(镜像不大,我这边下载完不到10分钟)
用下载的kali镜像创建个名为msfkali的容器
进入容器查看基本信息
可以看到kali使用的是默认源,这里我要说一下,kali 2016.X版本的kali使用这个默认官方源就好,
这个默认的官方源会自动选择速度最快的镜像站点来下载的,切记:不要换这个更新源。
root@42e13a2e4c0d:/# cat /etc/apt/sources.list
deb http://http.kali.org/kali kali-rolling main contrib non-free
deb-src http://http.kali.org/kali kali-rolling main contrib non-free
终端输入:
msfconsole
可以看到默认是带metasploit的,看来我们之前猜的没错
除此之外还带了nmap、wget、git等
但是这些工具还不够我们完成一次渗透测试
安装自己需要的工具
首先先刷新下更新缓存列表:
apt-get update
然后就可以直接安装工具了
apt-get install 工具名
这里你需要什么工具就安装什么工具,速度很快的,用什么就安装什么,没有什么比这个更DIY的了。
举个例子:你想安装个aircrack来破解WiFi密码,那么就直接:
apt-get install aircrack-ng
总之,这个Kali Docker就是Kali的命令行,和正常是Kali一模一样,该怎么折腾就怎么折腾吧。
小结:Docker从长远眼光来看是一个趋势,虽然起初刚刚学习需要投入些时间,但是当你熟练Docker的时候,才会发现它的真正强大之处,从现在来看已经可以完全替代PentestBox了,当然Docker的作用不仅仅这么简单,博客以后会继续更新Docker更加深入的文章的。
Mac OS下Kali Docker效果演示
Docker入门简明教程的更多相关文章
- 2013 duilib入门简明教程 -- 第一个程序 Hello World(3)
小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...
- 2013 duilib入门简明教程 -- 部分bug (11)
一.WindowImplBase的bug 在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题, 1.最大化按钮的样式 ...
- 2013 duilib入门简明教程 -- 部分bug 2 (14)
上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃 如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口 ...
- 2013 duilib入门简明教程 -- 自绘控件 (15)
在[2013 duilib入门简明教程 -- 复杂控件介绍 (13)]中虽然介绍了界面设计器上的所有控件,但是还有一些控件并没有被放到界面设计器上,还有一些常用控件duilib并没有提供(比如 ...
- 2013 duilib入门简明教程 -- 事件处理和消息响应 (17)
界面的显示方面就都讲完啦,下面来介绍下控件的响应. 前面的教程只讲了按钮和Tab的响应,即在Notify函数里处理.其实duilib还提供了另外一种响应的方法,即消息映射DUI_BEG ...
- 2013 duilib入门简明教程 -- FAQ (19)
虽然前面的教程几乎把所有的知识点都罗列了,但是有很多问题经常在群里出现,所以这里再次整理一下. 需要注意的是,在下面的问题中,除了加上XML属性外,主窗口必须继承自WindowImpl ...
- 2013 duilib入门简明教程 -- 总结 (20)
duilib的入门系列就到尾声了,再次提醒下,Alberl用的duilib版本是SVN上第个版本,时间是2013.08.15~ 这里给出Alberl最后汇总的一个工程,戳我下载,效 ...
- DUILIB入门简明教程
电子书下载: DUILIB入门简明教程.chm 文章作者: Alberl 电子书制作: 邓学彬 目录: 2013 duilib入门简明教程 -- 前言(1) 2013 duilib入门简明教程 ...
- duilib入门简明教程 -- 第一个程序 Hello World(3)
小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...
随机推荐
- fopen()函数文件模板中w,w+,a,a+的区别
"w" 写入方式打开,将文件指针指向文件头并将文件大小截为零.如果文件不存在则尝试创建之. "w+" 读写方式打开,将文件指针指向文件头并将文件大小截为零.如果 ...
- Javascript通过bind()掌控this
Javascript通过bind()掌控this: http://blog.csdn.net/rznice/article/details/26134201 bind能为我们做些什么,同时它的好处在哪 ...
- Django学习笔记第八篇--实战练习四--为你的视图函数自定义装饰器
零.背景: 对于登录后面所有视图函数,都需要验证登录信息,一般而言就是验证cookie里面的一些信息.所以你可以这么写函数: def personinfo(request): ": retu ...
- 利用MFC实现浏览器的定制与扩展(JavaScript与C++交互)
原文地址:http://www.vckbase.com/document/viewdoc/?id=1486 浏览器的定制与扩展 作者:李汉鹏 下载源代 码 本文分如下章节: 前 言 在 ...
- PHP 基础知识代码总结
一.PHP基础语法 变量到数组 <?php //phpinfo(); /* 变量 $a=1;//不分配空间 echo "\$a=".$a; echo "<br ...
- [Android Tips] 29. 如何判断当前编译的是哪个 Flavor ?
背景说明 应用需要针对不同的市场集成不同的第三方 SDK ,比如:面向海市场的版本需要集成 google-service apply plugin: 'com.google.gms.google-se ...
- 任务调度quartz整理
一张图,了解quartz运行机制: 此图表示:Scheduler是容器,Trigger是多个触发器,jobDetail是多个任务,Calendar是多个日历. jobDetail任务,需要指定类实现J ...
- 背景图片拉伸显示CSS
.divbackimg{ width:150px; height:50px; background-image:url(./btn.png); -moz-background-size: 100% 1 ...
- Mustache 中的html转义问题处理
避免在使用Mustache引擎是发生html字符转义 1,模板代码示例: var xml= " <?xml version="1.0" encoding=&q ...
- 剑指Offer——数组中的逆序对
题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%100 ...