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

  • Docker与KVM的区别

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

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

  • Docker公有镜像的获取

  在docker中我们可以通过以下命令来查找共有镜像:

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

  

  通过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实例:

  几个关键字段:

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访问漏洞的原因和防范方法。

  

  

docker学习笔记--重基础使用的更多相关文章

  1. Docker:学习笔记(1)——基础概念

    Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...

  2. Docker学习笔记:基础

    docker的概念 :docker是一个可供开发者在容器中 开发 部署 运行 应用的一个平台.通过使用Linux容器去部署应用的方式称为容器化. 基础概念 Images and Container i ...

  3. Docker学习笔记总结

    Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/   一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...

  4. Docker学习笔记 — Docker私有仓库搭建

    Docker学习笔记 — Docker私有仓库搭建   目录(?)[-] 环境准备 搭建私有仓库 测试 管理仓库中的镜像 查询 删除 Registry V2   和Mavan的管理一样,Dockers ...

  5. Docker学习笔记之-在CentOS中安装Docker

    上一节演示了如何 通过Xshell连接CentOS服务,链接:Docker学习笔记之-通过Xshell连接 CentOS服务 本节将演示 如何在CentOS中安装 Docker 第一步:更新系统包到最 ...

  6. docker学习笔记(3)- 镜像

    简介 在docker学习笔记(1)- 架构概述一节中可以看到镜像是docker三大组件之一,可以将Docker镜像类比为虚拟机的模版. 镜像由多个层组成,每层叠加之后从外部看就像一个独立的对象,镜像的 ...

  7. Docker学习笔记 — 配置国内免费registry mirror

    Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror

  8. docker学习笔记1 -- 安装和配置

    技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...

  9. Docker学习笔记之一,搭建一个JAVA Tomcat运行环境

    Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...

随机推荐

  1. java map集合的知识

    /** * Map用于存储键值对,不允许键重复,值可以重复. * (1)HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度. * H ...

  2. Xamarin App文件(apk)大小和启动时间的影响因素

    Xamarin开发的时候大家都有一个疑问,就是apk文件会不会特别的大,启动会不会很慢.答案是肯定的,文件肯定大,启动肯定会慢,但是具体大多少.具体慢多少,有什么因素可以使apk文件稍微小一点.可以使 ...

  3. 【毕业设计】基于Android的家校互动平台开发(内含完整代码和所有文档)——爱吖校推(你关注的,我们才推)

    ☆ 写在前面 之前答应大家的毕业答辩之后把所有文档贡献出来,现在答辩已过,LZ信守承诺,把所有文档开源到了GitHub(这个地址包含所有的代码和文档以及PPT,外层为简单的代码).还望喜欢的朋友们,不 ...

  4. php面向对象3

    类的定义 基本定义 class 类名{ 访问修饰符 成员属性; 访问修饰符 成员方法; } 说明: ①类一定要class关键词修饰 ②类名的规范说明,使用大驼峰法 ③php 中,类名不区分大小写.但是 ...

  5. python3实现TCP协议的简单服务器和客户端

    利用python3来实现TCP协议,和UDP类似.UDP应用于及时通信,而TCP协议用来传送文件.命令等操作,因为这些数据不允许丢失,否则会造成文件错误或命令混乱.下面代码就是模拟客户端通过命令行操作 ...

  6. javascript的setTimeout()与setTimeout()方法用法总结

    setTimeout与setInterval的区别: setTimeout 定义和用法: setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式. 语法: setTimeout(code ...

  7. ex2:逻辑回归及正则条件下的练习

    EX2 逻辑回归练习 ​ 假设你是一个大学某系的管理员,你想根据两项考试结果来确定每个申请人的录取机会.你有以前申请人的历史资料以作为逻辑回归的训练集.对于每一个训练集,你拥有每个申请人的两项考试的分 ...

  8. js中的字符替换

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. linux查询进程号,出现两个进程

    [root@ADM01B ~]# ps -ef|grep iesmgr root 5929 5321 0 09:38 pts/7 00:00:00 grep iesmgr root 9798 1 0 ...

  10. 遇到looper之类关于消息循环的

    原因大概是因为无法创建消息循环,这时候要考虑函数是否要在主线程或者不在主线程中进行,改一下即可