设为首页 收藏本站
查看: 970|回复: 0

[经验分享] docker学习笔记--重基础使用

[复制链接]

尚未签到

发表于 2017-12-5 23:46:26 | 显示全部楼层 |阅读模式
  最近一直在研究Elasticsearch,后来部门的同事遇到了一个docker集群的未授权访问漏洞,于是稍微看了一下docker进行了一下基本的入门,本文把自己学习docker的过程进行了一个详细的记录,希望能看过本文的文章能快速入门,本文会捡着最重要的命令分类进行介绍,让不了解docker的安全从业人员快速了解docker。


  • Docker与KVM的区别
  说到KVM和Docker的区别,我引用一张图,由于题主不在互联网公司工作,对于KVM和Docker对于生产的适用环境理解还欠佳,如果未来有机会进入互联网工作,再把这部分补上。
DSC0000.png

  不过通过架构我们可以明显的看出KVM的隔离对于Docker要好很多,由于KVM存在Hypervisor的存在对于硬件层面的虚拟化程度是远高于docker的,基于Hypervisor我们可以安装各种系统,系统中的文件与环境也是隔离的。而Docker却不一样。应用之间大量的底层和编译环境是共享的。这是我认识的Docker与KVM但并不是本文的重点,如果此处有任何错误也环境大牛来指正。


  • Docker公有镜像的获取
  在docker中我们可以通过以下命令来查找共有镜像:



docker search nginx \\搜索公有的nginx images

DSC0001.png

  通过docker pull命令来获取公有镜像:



docker pull nginx \\获取名为nginx的镜像

  • Docker启停创建容器等常用命令分析
  这部分命令非常多,也非常容易混淆,我在学习这部分的时候产生过许多疑问。诸如有了start命令为何还要有run命令。为什么有些参数只能跟着run而不能跟着start,以及一些常见的一些技巧。



docker images  \\查看本机拥有的镜像

  然而一个镜像仅仅是镜像,他需要在容器中进行执行,所以我们要将images转换为容器。创建一个新的容器我们通常使用以下的组合命令:



docker run -idt --name newcentos centos haha.sh
参数解释
-it 通常一起出现(标准输入给容器并产生一个交互性shell)
-d 在后台运行
--name 给容器起一个名字方便管理(否则你要用容器ID管理了,心态会爆炸的)
/bin/bash 生成容器后要执行的命令
连起来解释:
创建一个新容器 装载的镜像为 centos  这个容器命名为newnetos
创建完成后执行haha.sh脚本 通过bash来管理这个容器
并且创建完成后不进入容器(-d参数的存在)

  管理docker容器我主要用以下命令来实现:



docker ps -a \\显示所有docker容器

  我们可以通过attach命令来进入一个容器,进行交互式shell管理:



docker start newcentos \\容器必须启动 才可以attach
docker attach newcentos \\上文我们将镜像命名为newcentos,否则我们要跟镜像的ID
  我们可以通过start和stop命令来启停容器,同时需要注意的是,题主在有一点是懵逼的之前。docker run包含docker creat和docker start两个阶段。所以将一个新镜像装入容器中我们使用docker run可以一劳永逸的解决两个阶段的问题。
  删除容器的过程我们需要两个阶段,停止之后删除:



docker stop newcentos \\停止容器运行
docker rm newcentos  \\删除容器



  • Docker端口映射
  当我们运行一个apache镜像的时候,我们往往希望访问宿主机地址80或者443端口来达到访问容器中运行的apache进程。这时我们需要将宿主机的80和443端口映射到容器中的80和443端口,通常我们使用如下命令。



docker run -idt --name apache -p 80:80 httpd
参数解释:
-p 宿主机端口:容器端口
  我自己作为安全人员用到-P参数比较少,主要是将宿主机的随机端口映射到容器的特定端口。


  • Docker挂载磁盘映像
  经典的docker romote api 未授权访问漏洞反弹shell一般需要挂载宿主机根目录来获取权限,这里不详细赘述。一般我们可以挂载本机的nginx配置文件等到容器,实现类似于linux系统中/mnt的效果。



docker run -p 80:80 --name mynginx -v /www:/www -v /etc/conf/nginx.conf:/etc/nginx/nginx.conf -d nginx
参数解释:
-v 宿主机文件目录:容器目录   


  • Docker镜像创建(commit和Dockerfile)
  我们可能在一个centos的镜像容器中部署了各种环境如nginx,redis啊,现在我想对这个自定义的centos容器进行打包形成一个新的镜像。可以使用commit和dockerfile两种方法。



docker commit -m "centos-redis" -a "legwindy" abe40a097f26 legwindy/centos-redis:v1
参数解释:
-m:一段记录
-a:作者名称
abe40a097f26:打包的容器ID,比如我在一个abe40a097f26的centos
image装了很多东西,那个容器ID就是abe40a097f26
(legwindy/centos-redis:v1):打包后的镜像名称,Tag值为v1

  使用dockerfile进行构建,比较复杂,我从网上找了个实例,需要了解很多语法,其实核心思想是把上面每一步操作写到文件中,使用docker build直接按照步骤去执行,以下是转载的一个dockerfile实例:
DSC0002.png

  几个关键字段:



FROM (镜像名称)
RUN (执行命令)
EXPOSE (容器要打开的端口)
ENTRYPOINT(难理解的点):可以把一个容器封装成一个应用。
CMD(难理解的点):执行的命令

  比较难理解的是ENTRYPOINT和CMD的区别,ENTRYPOINT可以把容器封装成一个应用,比如ENTRYPOINT后面接参数/usr/local/nginx后,我们attach容器后,效果和在Linux下直接执行nginx命令的回现是相同的。CMD可以理解为接在ENTRYPOINT后的参数,当我们撰写这么一个参数:--ENTRYPOINT /usr/local/bin/nginx后。我们我们使用如下命令达到的效果如下。 docker run xxxx --entrypoint /usr/local/bin/nginx help。等于在物理机中运行nginx help命令。
  关于docker的使用,学习的还比较浅,仅仅在应用层层面,跟自己目前的工作还不太相关,有机会会为大家介绍docker remote api访问漏洞的原因和防范方法。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-420981-1-1.html 上篇帖子: [原创]在Docker上部署mongodb分片副本集群。 下篇帖子: 【Docker】docker常用指令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表