docker是什么?

docker是一个开源的容器引擎,其核心部件docker镜像,docker镜像可以理解为预装了一些应用程序的操作系统镜像(也有没有搭建任何环境的初始镜像)

docker能干什么?

docker可以用来快速部署应用程序需要运行的环境以及各种依赖
比如如果我们要运行一个依赖于lamp环境的web应用,那么我们只需要直接pull一个lamp的镜像,然后用此镜像创建一个容器来运行我们的web应用,而不需要我们自己再搭建lamp环境。

docker技术的优点是什么?

快速搭建环境,体积小(一个docker镜像的体积可能只是虚拟机镜像的十分之一),跨平台运行


0x00:前言

作为安全人员,我们可能会经常搭建一些web环境,传统的搭建方法都很繁琐低效,而docker的应用可以大大提高我们搭建环境的效率。这篇文章会介绍一些docker在搭建web环境中的一些简单应用,如果读者想要深入的学习docker,可以自行查阅官方文档。

0x01:部署基于lamp环境的web应用

第一步:用docker search命令搜索lamp镜像

1
docker search image_name

第二步:选择一个docker镜像,将他pull下来默认的tag是latest(相当于版本号),我们选择tutum/lamp镜像

1
docker pull image:tag

然后我们查看一下我们docker已经有哪些镜像了

1
docker images


我们可以看到,tutum/lamp已经在我们的本地镜像列表了,tag是latest,还显示了镜像的ID,以及该镜像的创造时间

第三步:用该镜像创建并运行一个容器,并通过端口映射将容器的80端口映射到主机的8080端口

1
docker run -d --name=container_name -p 8080:80 tutum/lamp

然后用如下命令进入容器的命令行

1
docker exec -it container_name /bin/bash


我们可以看到root@后面的用户名已经改变了,成功进入容器内部

然后切换到 /var/ww/html目录

1
cd /var/www/html

然后把我们的web应用程序放在html目录下,然后执行如下命令启动apache

1
service apache2 start

我们可以用ctrl+p + ctrl+q退出容器,并后台运行容器,,然后再访问主机的8080端口

我们可以看到,web服务已经成功运行了

除了这种在容器内部部署web应用程序的方法,docker还提供了一种挂载目录的方法,通过-v参数,将主机目录挂载到容器的某个目录。
我们还是做一个小小的demo来展示-v参数的用法

第一步:在主机创建一个目录,然后用tutum/lamp镜像创建一个容器,并通过-v参数来将主机目录挂载到容器然后在运行容器的lamp环境

1
docker run -d --name=test -p 9090:80 -v /var/test/:/var/www/html tutum/lamp

/var/test/ 目录下index.html文件内容如下:

1
2
3
<h1>
hello world
</h1>

现在访问一下9090端口

挂载成功,如果需要修改文件就只用修改在主机上挂载的文件就可以了

有些时候,我们pull下来的镜像并不能满足我们的要求,那么我们可以在其基础上在进行改动,然后把改动后的容器打包成镜像方便我们后面使用。举个例子:比如我们pull下来的tutum/lamp镜像没有安装vim,那么我们可以在里面安装好vim,然后将其打包为一个新的镜像,以后用这个镜像创建的容器就有vim了。

把容器打包为镜像需要使用docker commit命令:

1
docker commit -a "Drac0nids" -m "lamp base" container_name image_name

docker commit 命令的具体用法如下:

0x02:docker仓库的使用

首先去https://hub.docker.com/ 注册一个账号(需要科学上网,不然有个谷歌的人机验证看不到导致不能注册)

有了账号以后可以用docker login命令来登录我们的账号(退出登录使用docker logout)

我们使用docker仓库的主要目的是上传保存我们的镜像,以便以后使用的时候可以直接拉取下来用

首先我们用docker images查看我们有哪些image

我们用如下命令将镜像上传到docker仓库

1
docker push image_name:tag


这里会出现如下错误信息

denied: requested access to the resource is denied

解决办法是用docker tag命令将原镜像镜像名命名为 用户名/镜像名

1
docker tag lamp_base:latest drac0nids/lamp_base:latest

然后再执行docker push 命令(只有一个tag的时候可以省略)

1
docker push drac0nids/lamp_base

要查看我们上传的的镜像可以登录 https://hub.docker.com/ 查看

然后要用的时候就直接pull下来就可以了

1
docker pull drac0nids/lamp_base

使用docker仓库的好处就是方便在不同的机器上共享image

最后更新: 2018年09月15日 00:22

原始链接: http://drac0nids.top/2018/02/26/docker搭建web环境/

× 请我吃糖~
打赏二维码