【docker基础】Namespace和Cgroup总结-基于Dockerfile制作docker镜像

1、掌握namespace、cgroup在容器中的作用


namespace:
   namespace是Linux系统的底层概念,在内核层实现,各个容器运行在同一个主机上并且同一个宿主机系统内核;
   每个容器都要有类似于虚拟机一样的相互隔离的运行空间,如文件系统空间、网络空间、进程空间等;
   目前主要通过以下技术实现容器运行空间的相互隔离:
     UTS:提供主机名隔离能力(包含了运行内核的名称、版本用于系统标识,包含hostname/domainname,使得容器拥有自己的hostname标识)
     MNT:提供磁盘挂载点和文件系统的隔离能力(宿主机使用chroot技术把容器锁定到一个指定的运行目录里面)
     IPC:提供进程间通信的隔离能力(允许一个容器内的不同进程数据访问,但不允许跨容器通信)
     PID:提供进程隔离能力(每个容器内都有一个父进程来管理其下属的子进程,容器内的主进程生产与回收子进程)
     Net:提供网络隔离能力(每个容器都拥有自己的网卡、监听端口、TCP/IP协议栈等)
     User:提供用户隔离能力(允许不同的容器创建相同的用户名、UID/GID,用户的作用范围限制在每个容器内)
cgroup
    最主要的作用就是限制一个进程组能够使用的资源上限,包括CPU、内存、磁盘、网络带宽等;
    还能够对进程进行优先级设置,以及将进程挂起和恢复操作;

2、编排工具及依赖技术总结


   编排工具:
       当多个容器在多个主机运行的时候,单独管理容器是相当复杂而且很容易出错,而且无法实现某台主机宕机后容器自动迁移从而实现高可用的目的,也无法实现动态伸缩的功能;
       编排工具可以实现统一管理、动态伸缩、故障自愈、批量执行等功能,这就是容器编排引擎;
       容器编排通常包括容器管理、调度、集群定义和服务发现等功能;
       Docker swarm:docker开发的容器编排引擎
       Kubernetes:google领导开发的容器编排引擎,内部项目为Borg,且其同时支持docker和CoreOS
       Mesos+Marathon:通用的集群组员调度平台,mesos(资源分配)与marathon(容器编排平台)一起提供容器编排引擎功能;
    Docker容器依赖技术:
       容器网络:
           docker自带的网络docker network仅支持管理单机上的容器网络,当多主机运行是需要使用第三方开源网络,如calico、flannel等
       服务发现:
           容器的动态扩缩容特性决定了容器IP会随之变化,因此需要一种机制可以自动识别并将用户请求动态转发指定容器上,kubernetes自带服务发现功能,结合core-dns服务解析内部域名;
       容器监控:
           可通过docker原生命令docker ps/top/stats查看容器运行状态,另也可以使用Prometheus等第三方监控工具监控容器的运行状态;
       数据管理:
           容器的动态迁移会导致其在不同的Host之间迁移,如何保证与容器相关的数据也能随之迁移或随时访问,可以使用逻辑卷/存储挂载等方式解决;
       日志收集:
           docker原生的日志查看工具docker logs,但是容器内部的日志需要通过ELK等专门的日志收集分析和展示工具进行处理;


3、基于dockerfile制作一个nginx镜像       

查找下载最新的centos docker镜像
#docker search centos
#docker pull centos
创建修改centos镜像工作目录
#mkdir -pv /opt/dockerfile/system/centos

修改yum.repo文件确保容器能正常访问yum源,使用yum安装一些工具
通过Dockerfile更新centos镜像里的repo文件

Dockerfile文件:

 build-command.sh脚本:

build centos新镜像

基于centos:v8.4.2105制作nginx镜像

提前下载nginx-1.16.1.tar.gz源码包;

Dockerfile文件

build-command.sh脚本

 一步一步打包测试,先安装工具--编译安装nginx--编写测试页面---将测试页面打到镜像里---修改nginx.conf文件,每步打包完成后docker run运行容器查看效果,确保每一步没有问题;

最后效果,运行起来容器

通过浏览器可看到测试页面

4、镜像构建总结


docker commit
    Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    基于DOckerfile创建镜像:
    Usage:  docker build [OPTIONS] PATH | URL | -
    
    1.熟练掌握Dockerfile的指令使用
        FROM #在整个dockerfile文件中,除了注释之外的第一行,用于指定父镜像;
        ADD  #用于添加宿主机本地的文件、目录、压缩等资源到镜像里面,会自动解压tar.gz格式的压缩包,不会自动解压zip包;
        COPY #用于添加宿主机本地的文件、目录、压缩等资源到镜像里面,需要自己解压;
        RUN  #执行shell命令;
        ENV  #用于设定环境变量
        EXPOSE  #声明要将容器的端口映射到主机(只是声明)
        MAINTAIUSER #镜像的作者信息
        LABEL   #设置镜像的属性标签
        USER    #指定运行操作的用户
        VOLUME  #定义volume
        WORKDIR #用于定义工作目录
        CMD  #镜像启动容器时默认的运行命令、脚本
        ENTERYPOINT    #也可以用于定义容器启动时默认执行的命令或脚本,如果是和CMD混合使用,会将CMD命令但做参数传递给ENTERYPOINT后面的脚本,

可以在脚本中对参数进行判断并对容器做对应的操作
    2.必须熟练通过Dockerfile制作镜像的各种方式(yum安装、编译安装)
    3.镜像的分层构建

      镜像分层构建的好处:

      底层公用,一个是底层系统环境、工具等可以公用,不必每个应用都单独准备环境,二个是可以节省镜像存储空间;

      底层系统、工具可以只关注系统、工具版本,提供不同的系统、工具版本,上层可以根据需要选择底层镜像

    
5.梳理CMD和ENTRYPOINT的区别及使用技巧

        CMD  #镜像启动容器时默认的运行命令、脚本
        ENTERYPOINT    #也可以用于定义容器启动时默认执行的命令或脚本,如果是和CMD混合使用,会将CMD命令但做参数传递给ENTERYPOINT后面的脚本,可以在脚本中对参数进行判断并对容器做对应的操作


扫一扫关注作者公众号

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值