【CyberSecurityLearning 附】Docker 初识

目录

Docker概念

playwithdocker

docker使用


Docker概念

docker其实是个虚拟机,只不过它是一个主要应用在linux和后台一些应用的虚拟机,它和我们常用的vmware workstation有很多相似的地方,也有很多不同的地方。

首先docker中最重要的两个概念,镜像和容器,这两个概念在vmware中也有,但是在docker里面多了一些其他概念
镜像:类似于我们去创建虚拟机之前需要下载的一些系统镜像文件,比如iso文件、img文件等一些镜像文件
容器:可以类比做正在运行的一个虚拟机
tar文件:tar文件就类似于vm使用时的vmdk文件,它可以将一个镜像直接保存成一个tar文件,然后这样给别人,别通过一条load指令,重新加载成一个镜像,然后通过run指令就起来一个正在运行的虚拟机了(容器)
Dockerfile:dockerfile是一个配置文件,很短的一个配置文件,通过写“如何构建”的步骤,来指定一个镜像是如何构建的,然后通过docker build指令可以将dockerfile构建成一个镜像
仓库:docker有个特别厉害的远程仓库,这个仓库保存了很多镜像,包括一些公有的第三方已经做好的镜像,比如ubantu镜像、Nginx镜像、MySQL镜像、tomcat镜像等等,我们可以通过docker pull指令下载这些镜像到本地,当然也可以吧自己的镜像通过push指令传上去

playwithdocker

下面不介绍如何安装docker,因为每个人系统不同安装方式也不同,直接使用playwithdocker工具来介绍,注册

通过dockerID登录(我的是waffle666)

登录之后可以看到这有4个小时的倒计时,就是说它免费给你使用这个机器只能用四小时,四个小时之后你要重新再申请

这里我们点击添加一个实例(+ADD NEW INSTANCE),立马就进入了ssh页面

docker使用

然后,我们看如何去获得一个镜像,其实最简单的方法就是从远程仓库去下载镜像
比如说通过pull指令下载Nginx镜像

docker  pull  nginx

这样docker pull Nginx就下载了,它其实等于docker pull nginx:latest(latest是版本,如果你不指定版本,默认就是最新版本),这样我们就把这个镜像下载下来了

我们可以通过docker  images查看我们本地有哪些镜像,下图只显示了一个镜像,因为我们就下载了这一个

docker  images

然后我们就完成了这一步,我们通过run指令将这个镜像运行成一个真正在运行的容器(虚拟机)

docker  run  nginx

但是这样只是简单运行起来一个服务器,我们通过指定一些参数,比如-d让它再后台运行不要阻塞住shell指令窗口,-p来指定内外的端口映射,
比如我们将内部端口80和外部端口80做一个简单的映射,然后回车:

docker  run  -d  -p  80:80  nginx(-p参数是指定端口映射先写外部端口再写内部端口)

还有cans,比如--name指定容器运行起来后的名字,nginx后不写:默认是最新版本

-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

通过docker  ps可以查看正在运行的容器有哪些,

docker  ps

可以看到容器端口 80 绑定主机端口 80

上图可以看到它运行了2分钟(STATUS: UP 2 minutes),然后它运行在80端口,我们注意到上面这会多一个80字样,我们点击,就转过来了
或者:点击OPEN  PORT输入80,会弹出如下页面,发现它已经运行起nginx,就说明我们外部端口映射到里面的80了

当然你也可以启动多个,比如我们再启动一个,但是我们就不能再使用外部端口80了,我们可以指定一个81端口

docker  run  -d  -p  81:80  nginx   

  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口

我们再点击OPEN PORT输入81,输入后发现也是正在运行中的nginx

那我们就通过pull和run指令将一个nginx容器给运行起来了,
例如我们想对这个nginx进行写修改,我们可以通过docker  exec  -it,然后指定这个容器的id(nginx的id),比如第一个8191,它的id虽然很长,但是我们只要简单能区分,通过指定少数几个字就行。然后通过bash进去,进去之后可以看到前面变成root@xxxx,说明已经进到这个nginx容器里面了

docker  exec  -it  8191  bash

docker exec :在运行的容器中执行命令

index文件在/usr/share/nginx/html中

 cd  /usr/share/nginx/html

上图框起来的文件就是默认的index文件了,我们直接修改这个index文件。比如我们改成hello

echo hello > index.html

通过修改了这个index文件,我们来看一下这个80端口(浏览器有缓存:按住Ctrl+F5强制刷新页面),可以看到它已经变成了hello,这就是我们如何进到容器里面做一些操作

我们可以exit退出,通过docker  rm  -f 强制删除我们创建的81端口的这个容器,因为81端口我们暂时用不到

docker  rm  -f   81端口的容器ID

然后我们通过docker  commit指令先指定一个容器(ID),如何后面是提交的镜像的名称,比如m1

通过docker images查看,发现有个镜像叫m1了,跟我们之前pull下来的nginx镜像一样,他们并列放在这里,

然后我们也可以通过docker run -d -p 90:80 m1来运行

然后通过访问90端口,可以看到这里是hello,说明我们修改过后的容器保存成镜像,重新运行,它可以保存这个变化

再有一种方式就是dockerfile,我们新建一个dockerfile文件,在该文件中(大家可以学一下dockerfile文件的语法,这里就不过多提dockerfile的语法)

vim Dockerfile

我们可以通过FROM指定docker构建的基础镜像,是基于nginx这个镜像,然后我们将当前目录下的所有文件拷贝到/usr/share/nginx/html这个文件夹下

然后我们创建一个index.html,里面写外部的文件

然后通过docker  build  -t  m2,之后要加一个.指定是当前目录下的dockerfile去构建

docker  build  -t  m2  .(最后面加个点)

通过docker  run -d  -p  100:80  m2(100号端口去映射内部的80端口的m2镜像),回车运行,然后通过docker ps查看,可以看到这已经运行了

我们点击OPEN PORT 输入100,可以看到外部文件这个样子已经出来了,这说明我们通过dockerfile构建出了一个镜像,并且跑成了一个容器,也完成了这一步

然后另外我们也可以通过docker save指令去将一个镜像,比如说这里的b9(写名zi)保存到一个文件里,比如叫1.tar

docker save m2>1.tar

通过ls查看,这解压1.tar,

比如现在我们docker rmi将这个镜像删除,将m2镜像直接删除,

报错,它说有个容器是基于这个镜像的所以无法删除,那我们将这个容器也删了

docker  rm  -f   b9

docker rmi m2

删掉之后用docker images查看,就只有m1镜像,m2没了

然后我们再通过docker load < 1.tar

再通过docker images查看,发现m2镜像又从tar'文件重新拿过来了,这就同时验证了load和save功能,然后push的话,需要自己去dockerhub或者其他官方仓库注册

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值