前言
以前就一直听说docker在CTF复现和出题方面很方便,也对这个东西很感兴趣,今天特地来学习一下。
docker是什么
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
说了这么多,我总结一下通俗易懂的,就是众所周知,在编程,搭建网页等等其他事中,配置环境始终是最令人厌烦的一件事情。Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。 在docker中,有几个比较重要的概念:
1.镜像(image):Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image文件可以看作是容器的模板。我以python做个比喻,image文件类似于python里面各种库文件,我们直接import他们就可以引用各种函数了。
2.容器(container):image文件生成的容器实例,本身也是一个文件,称为容器文件。还是以python为例子,容器就是我们最终生成的py文件.
3.仓库(repository):用来储存镜像的的场所
docker使用
docker的安装过程我不赘述,具体可以参考 网站
常用命令:
docker search [keywords] 搜寻与keywords相关的镜像
docker images 查看本地的image镜像
docker pull [image] 拉取镜像
docker run -d -p [host port]:[docker port] [image] 新建一个docker容器,并映射端口号
docker ps -a 查看运行中的docker容器
docker exec -it [container id] bash 进入一个docker容器
docker cp [本地路径] [container id]:[container 路径] 拷贝本地文件到docker
docker start [container id] 启动一个docker容器
docker stop [container id] 停止一个docker容器
docker rm [container id] 删除一个docker容器(需要先停止容器才能删除容器)
docker rmi [image id] 删除一个docker镜像(需要删除镜像对应的容器才能删除镜像)
具体实例
我以复现一道CTF为例来演示docker的使用。
- 拉取相应的镜像。
docker pull tutum/lamp
我们可以用docker images来确认已经有了相应的镜像。
- 创建一个容器
docker run -d -p 3389:80 tutum/lamp
-d 容器后台运行。
-p 指定映射端口。
记得去服务器商那设置安全组,不然3389端口是访问不了的。 会返回一串随机字符,也就是容器的ID。
- 上传文件到docker
docker cp object/ 48b4fb2a68ca:/var/www/html/
其中object是我们的题目文件,48b4fb2a68ca是我们的container ID 此时访问服务器便可以看到题目了。
Linux常用命令
平时对Linux的使用不多,导致对服务器执行命令不熟,在此总结在本次学习docker中用到Linux的常用命令:
cd /root/Docements # 切换到目录/root/Docements
cd ./path # 切换到当前目录下的path目录中,“.”表示当前目录
cd ../path # 切换到上层目录中的path目录中,“..”表示上一层目录
ls 列出目录下面的文件
mkdir dir1 创建一个叫做 'dir1' 的目录
cp file1 file2 复制一个文件
cp dir/* . 复制一个目录下的所有文件到当前工作目录
cp -a /tmp/dir1 . 复制一个目录到当前工作目录
cp -a dir1 dir2 复制一个目录
rz 上传文件到服务器