准备工作
我用的操作系统是:deepin 15,参考了 https://wiki.deepin.org/wiki/Docker 的安装说明。
我的历史命令:
sudo apt-get install apt-transport-https ca-certificates curl python-software-properties software-properties-common
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/debian wheezy stable"
sudo apt-get update
sudo apt-get install docker-ce
docker version
sudo docker run hello-world
sudo service docker restart
只要是纯净的系统,网络上没有问题,基本上不会报错。
概念
- 仓库:存放了很多别人上传上去的镜像
- 镜像:没有被运行时是一个镜像,运行后会启动一个容器
- 容器:一个镜像可以运行多个容器
镜像
一般我们要运行一个应用在docker中,都会先从仓库中去拉取镜像。
这里我从仓库里搜索了关键字为:vulhub的镜像。
docker search xxxx
找到我们想要的 docker 镜像后,就可以 pull (拉取)下来,这里以 metasploit 为例。
docker pull metasploitframework/metasploit-framework
第一次下载的时候因为我网络的原因超时了,当全部状态变成 pull complete(拉取完成)就可以运行docker images
来看是否拉取到了本地。
[email protected]:~/Desktop$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
metasploitframework/metasploit-framework latest 644b96152120 11 hours ago 456MB
hello-world latest fce289e99eb9 8 weeks ago 1.84kB
然后直接运行这个镜像
docker run REPOSITORY:TAG 或者 docker run IMAGEID
e.g:
docker run metasploitframework/metasploit-framework 或者 docker run 644b96152120
容器
刚才演示了最基本的一些命令,这里再多补充一些。
如果英语水平过关的话可以直接看 docker 命令的文档,这里的比较全面。
e.g:
docker --help
docker run --help
docker exec --help
中文的可以参考:http://www.runoob.com/docker/docker-command-manual.html
sudo docker run -dit --name msf metasploitframework/metasploit-framework
比如这条,-dit 同等于 -d -i -t
-i: 以交互模式运行容器,通常与 -t 同时使用;
-d: 后台运行容器,并返回容器ID;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
上面那条命令,我用到了这些参数。不懂什么意思可以参考参数说明。
当镜像被 run 之后就会启动一个容器实例。
如果想要进入终端操控,可以使用 exec 命令
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
e.g:
[email protected]:~/Desktop$ sudo docker exec -it msf /bin/bash
bash-4.4# ./msfconsole
再来说 commit 命令,它的作用是把一个容器在转成镜像。
举个例子:我现在要安装溯光,所以我们需要的条件包括。jdk、maven、python、nmap、sqlmap等...,然后我创建一个基础容器,把这些环境按部就班的装好。再把溯光放进去。最后通过 commit 命令来转换成一个镜像,想使用溯光时直接运行镜像,这样就省去了很多的安装步骤。
为了省事我直接创建了一个 test 文件在 msf 这个容器,然后关闭,执行以下命令。
[email protected]:~/Desktop$ sudo docker commit msf blue/msf:new
sha256:fc1674bef6a5dd795f43d8269a465b920e5e2ff8358c91615ef636628b50c653
[email protected]:~/Desktop$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
blue/msf new fc1674bef6a5 9 seconds ago 466MB
metasploitframework/metasploit-framework latest 644b96152120 13 hours ago 456MB
hello-world latest fce289e99eb9 8 weeks ago 1.84kB
可以看到本地又多出了一个 bluemsf 的镜像。
[email protected]:~/Desktop$ sudo docker run -dit --name bluemsf blue/msf:new
4d33a4c572820065d9dd60c2c7e74c563390159414ac14de6b720de07367b751
[email protected]:~/Desktop$ sudo docker exec -it bluemsf /bin/bash
bash-4.4# ls | grep test
test
进入终端就能找到我在 msf
容器中创建的 test
文件。
其他关于 docker 生命周期管理的命令就不再赘述了,参考文档就行。
Dockerfile
这里解释一下什么是 dockerfile ,用过 maven 的同学应该知道 pom.xml ,他的作用就是用来构建项目,做到简化部署流程的一个目的。dockerfile 也是同理,__就是将一个程序所需要的依赖环境通过 dockerfile 的指令下载、安装、部署,然后生成一个镜像,来达到简化操作的目的。__
Dockerfile 的指令主要分为以下几部分
部分 | 命令 |
---|---|
基础镜像信息 | FROM |
维护者信息 | MAINTAINER |
镜像操作指令 | RUN、COPY、ADD、EXPOSE、WORKDIR、ONBUILD、USER、VOLUME等 |
容器启动时执行指令 | CMD、ENTRYPOINT |
这里我给出一份 dockerfile 参考,是以安装溯光为例的,不过没有在本地测试,但也八九不离十了。
FROM ubuntu:14.04 #基础镜像,这里我用Ubuntu 14.04版本
MAINTAINER blue "[email protected]" # 维护者信息
ADD http://mirrors.163.com/.help/sources.list.trusty /etc/apt/sources.list # 添加国内源
RUN apt-get update # 更新源
RUN apt install -y software-properties-common
RUN add-apt-repository -y ppa:webupd8team/java
RUN apt-get update
RUN apt-get -y install curl # 安装 curl
RUN apt-get -y install oracle-java8-installer # 安装 jdk8
RUN apt-get -y install python2.7 python2.7-dev # 安装 py2.7
RUN apt-get -y install nmap # 安装 nmap
RUN apt-get -y install maven # 安装 maven
RUN apt-get -y install git # 安装 git
WORKDIR /opt/ # 设定工作目录为 /opt/
RUN git clone https://github.com/rapid7/metasploit-framework.git # clone MSF项目
RUN git clone https://github.com/sqlmapproject/sqlmap.git # clone sqlmap 项目
RUN git clone https://github.com/iSafeBlue/TrackRay.git # clone 溯光项目
RUN cd TrackRay && mvn package # 进入溯光目录 ,使用 maven 打包
CMD python /opt/sqlmap/sqlmapapi.py -s # 容器启动时启动 sqlmapapi 服务
CMD ./opt/metasploit-framework/msfrpcd -U msf -P msf -S -f # 容器启动时启动 msfrpc 服务
CMD java -jar /opt/TrackRay/web/target/web-0.0.1-SNAPSHOT.jar # 容器启动时启动溯光
最后构建镜像 blue/trackray 是镜像名,后面是 dockerfile 的路径。
docker build -t blue/trackray /home/blue/xxxx
参考
http://how2j.cn/k/docker/docker-docker/2005.html
https://www.jianshu.com/p/10ed530766af