Docker 学习笔记

准备工作

我用的操作系统是: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的镜像。

1551253750(1).jpg

docker search xxxx

找到我们想要的 docker 镜像后,就可以 pull (拉取)下来,这里以 metasploit 为例。

1551253782(1).jpg

docker pull metasploitframework/metasploit-framework

第一次下载的时候因为我网络的原因超时了,当全部状态变成 pull complete(拉取完成)就可以运行docker images来看是否拉取到了本地。

blue@blue-PC:~/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

然后直接运行这个镜像

1551253820(1).jpg

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:

blue@blue-PC:~/Desktop$ sudo docker exec -it msf /bin/bash
bash-4.4# ./msfconsole

再来说 commit 命令,它的作用是把一个容器在转成镜像。

举个例子:我现在要安装溯光,所以我们需要的条件包括。jdk、maven、python、nmap、sqlmap等...,然后我创建一个基础容器,把这些环境按部就班的装好。再把溯光放进去。最后通过 commit 命令来转换成一个镜像,想使用溯光时直接运行镜像,这样就省去了很多的安装步骤。

为了省事我直接创建了一个 test 文件在 msf 这个容器,然后关闭,执行以下命令。

blue@blue-PC:~/Desktop$ sudo docker commit msf blue/msf:new
sha256:fc1674bef6a5dd795f43d8269a465b920e5e2ff8358c91615ef636628b50c653
blue@blue-PC:~/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 的镜像。

blue@blue-PC:~/Desktop$ sudo docker run -dit --name bluemsf blue/msf:new
4d33a4c572820065d9dd60c2c7e74c563390159414ac14de6b720de07367b751
blue@blue-PC:~/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 "blue@ixsec.org" # 维护者信息

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

发表留言

如未标注转载则文章均为本人原创,转载前先吱声,未授权转载我就锤爆你狗头。

人生在世,错别字在所难免,无需纠正。