docker是一个开源的商业产品,有两个版本:社区版(Community Edition,简称CE)和 企业版(Enterprise Edition,简称EE)。
一般个人都是用CE版本,接下来介绍一下Docker的架构。

 

一、Docker的架构

 

Docker系统有两个程序:docker的服务端(DOCKER_HOST)和 docker的客户端(Client)。
看上图我们可以发现,docker的服务端是一个进程叫做Docker daemon的进程管理着所有容器,而docker的客户端则控制着docker的服务端。一般情况下,docker的服务端和客户端运行在一台机器上。
通过docker version的命令我们可以看到客户端和服务端的版本。

 

 

二、docker镜像
细心的朋友可能会发现刚才上面那张Docker架构图中有个叫Registry的部分没有提及,这部分就是docker的镜像市场。
使用docker最简单方式就是直接从现有的镜像开始,用别人打包好的镜像一键部署,这也是docker的精髓。

 

1、搜索镜像
docker有一个网站专门用来放这些镜像,这个网站叫做Docker Hub,https://hub.docker.com/
我们可以在网站中,搜索Kali。

 

 

也可以通过docker命令来搜索镜像,命令格式:docker search xxxxxx

 

 

2、下载镜像
docker的镜像都是按照 用户名/镜像名 的方式存储。
命令:docker pull 用户名/镜像名

 

 

3、运行镜像
docker容器类似沙盒,这个沙盒包含了该进程所需的文件系统、系统类库、shell环境等等。
这个进程是容器的唯一进程,当该进程结束的时候,容器也会完全停止。
命令:docker run 用户名/镜像名 需要执行的命令
这里我们在kali的纯净镜像中安装nmap。

 

 

4、更改容器
通常我们pull下来的镜像或多或少缺少了一些我们需要的组件,这就需要我们自己安装。
可以使用刚才学到的docker run 命令进行安装。
安装完之后,我们可以通过docker commit命令产生一个新的版本。
首先使用docker ps -l查看容器的id。

 

 

然后使用docker commit 命令。

5、查看所有image
使用docker images命令查看所有安装过的镜像。

 

 

三、如何交互式的创建一个Docker容器

通过刚才的一些操作,大家肯定发现了一些问题,当我使用docker run命令的时候平白无故产生了许多容器。
每执行一句语句,便生成一个容器,这样看来很难受,那怎么办?
我们可以通过交互式的方式创建一个Docker容器。

docker run -i -t nickistre/centos-lamp bash

 

 

这里我们直接拉取了一个lamp的环境,参数-i -t代表弹出一个交互式的shell出来。
当我们需要安装有一些软件的时候,通过交互式的方式可以避免过多的容器产生。
退出时使用exit即可

 

随后我们可以根据上面所描述的,commit一个新的Image出来以便下次使用。