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效果演示

转载于:https://www.cnblogs.com/sqlsec/p/docker.html

Docker入门简明教程相关推荐

  1. duilib入门简明教程 -- 部分bug (11) (转)

    原文转自:http://www.cnblogs.com/Alberl/p/3344886.html 一.WindowImplBase的bug 在第8个教程[2013 duilib入门简明教程 -- 完 ...

  2. DuiLib入门简明教程

           Duilib 是一款强大的界面开发工具,可以将用户界面和处理逻辑彻底分离,极大地提高用户界面的开发效率. 国内首个开源 的directui 界面库,开放,共享,惠众,共赢,遵循bsd协议 ...

  3. 2013 duilib入门简明教程 -- 总结 (20)

    原文地址为: 2013 duilib入门简明教程 -- 总结 (20) duilib的入门系列就到尾声了,再次提醒下,Alberl用的duilib版本是SVN上第 387个版本,时间是2013.08. ...

  4. python3简明教程第二版答案_python入门简明教程?求最新的python简明教程,最好是python3的...

    本人对于计算机没有任何基础,只是简单的操作.过两天要学习python语言的基础课,需要如何准备.跪谢! 先看python的简明教程,然后可以再看<dive into python>中文版( ...

  5. Docker入门学习教程

    Docker入门学习 文章目录 Docker入门学习 1.简介 2 基本概念 2.1 镜像(Image) 2.2 容器(Container) 2.3 仓库(Repository) 3.Windows ...

  6. Docker入门详细教程,全网最全!

    Docker Docker学习 Docker概述 Docker安装 Docker命令 Docker镜像 容器数据卷 DockerFile Docker网络原理 IDEA整合Docker Docker ...

  7. duilib 子窗口位置_duilib入门简明教程 -- 界面布局(9)

    上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayout,这样 ...

  8. duilib教程之duilib入门简明教程9.界面布局

    上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayout,这样 ...

  9. duilib教程之duilib入门简明教程 -- 界面布局(9)

    上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayout,这样 ...

最新文章

  1. 样本不均衡SMOTE算法代码实列
  2. java基本数据类型_老杜带你学Java【第六课】
  3. 数据挖掘十大经典算法之——C4.5 算法
  4. 合工大五套卷_2021森哥五套卷(五)
  5. Silverlight 2学习笔记一:初识Silverlight
  6. java web 耗时请求_javaweb应用中出现了一个耗时异常长的数据查询,寻求帮助
  7. ESB文件调用,windows服务
  8. 数据结构与算法之选择排序
  9. 《Java 高并发》02 多线程的特性
  10. python open ascii codec cant_Python3.6 报错问题:'ascii' codec can't encode character
  11. [译]Kinect for Windows SDK开发入门(八):骨骼追踪进阶 上
  12. MySQL中with rollup的用法
  13. 作业,输入名字密码,按dict插入到list,非法字符显示*
  14. SM4国密标准 GB/T 32907-2016
  15. [C++] C/C++ 取整函数ceil(),floor()
  16. c语言 自动答题器,单片机原理作业—电子答题器(课程及设计).doc
  17. 恒指赵鑫:04.11今日恒指早盘思路
  18. 计算机网络之IP协议与以太网
  19. 计算机视觉基础知识:射影变换,仿射变换,相似变换(比例变换),刚性变换
  20. SQL注入学习日记(一)

热门文章

  1. VirtualBox Network设置的NAT和Bridged Adapter模式区别
  2. ABAP, Java和JavaScript三种语言的比较
  3. c语言 编程 牛顿迭代,C语言编写牛顿迭代法的跟踪
  4. mysql中存储gis数据类型_mysql 中的数据类型
  5. plsql导出表结构到excel_plsql 将表结构导出到excel中的两种方式
  6. postgresql参数化查询_一个能融会贯通PostgreSQL监控的人,大概率是高手
  7. 二叉树的锯齿形层序遍历Python解法
  8. php css错乱,css,html_css多行布局错乱,css,html - phpStudy
  9. HBase读写流程、flush、文件合并、region拆分
  10. UE4学习-打包失败 缺失UE4Game二进制文件