zoukankan      html  css  js  c++  java
  • docke--Dockerfile构建docker镜像

    一、Dockerfile简介及原理

    1.简介

    Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

    2.构建三步骤 

    1.编写Dockerfile文件
    
    2.docker build
    
    3.docker run

    3.DockerFile文件构建过程解析

    1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数
    
    2:指令按照从上到下,顺序执行
    
    3每条指令都会创建一个新的镜像层,并对镜像进行提交
    4:#表示注释 

    4.Docker执行Dockerfile的流程

    1:docker从基础镜像运行一个容器
    
    2:执行一条指令并对容器作出修改
    
    3:执行类似docker commit的操作提交一个新的镜像层
    
    4:docker再基于刚提交的镜像运行一个新容器
    
    5:执行dockerfile中的下一条指令直到所有指令都执行完成

    二、Dockerfile关键字介绍

    FROM:    基础镜像,当前新镜像是基于哪个镜像为基础
    MAINTAINER:镜像维护者的姓名和邮箱地址
    RUN:    容器构建时需要运行的命令(可以是linux命令)
    EXPOSE:  当前容器对外暴露出的端口
    WORKDIR:  指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

    ENV:    用来在构建镜像过程中设置环境变量
              例:ENV MY_PATH
    /usr/mytest这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;也可以在其它指令中直接使用这些环境变量,比如:WORKDIR $MY_PATH
    ADD:    将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
    COPY:    类似ADD,拷贝文件和目录到镜像中。COPY分为2种类型
              例:COPY src des #src 物理机的位置,且只能是文件或者目录 des镜像的位置             COPY ["src","des"] #
    将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
    VOLUME:   容器数据卷,用于数据保存和持久化工作 

    CMD:    指定一个容器启动时要运行的命令 Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,也就是说在多个CMD命令存在时,最后一个会覆盖前面的命令,只会执行最后一个命令
             CMD 会被 docker run 之后的参数替换,也就是说CMD的命令会被docker run
    -it...后面的参数给覆盖掉

    ENTRYPOINT :指定一个容器启动时要运行的命令 ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数 ENTRYPOINT 执行结果可以以当做docker run 之后的参数

    ONBUILD:  当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

    三、Docker build关键字介绍

    参数说明:
    
    --build-arg=[] :   设置镜像创建时的变量;
    
    --cpu-shares :    设置 cpu 使用权重;
    
    --cpu-period :    限制 CPU CFS周期;
    
    --cpu-quota :     限制 CPU CFS配额;
    
    --cpuset-cpus :    指定使用的CPU id--cpuset-mems :    指定使用的内存 id--disable-content-trust :  忽略校验,默认开启;
    
    -f :          指定要使用的Dockerfile路径;
    
    --force-rm :     设置镜像过程中删除中间容器;
    
    --isolation :     使用容器隔离技术;
    
    --label=[] :     设置镜像使用的元数据;
    
    -m :          设置内存最大值;
    
    --memory-swap :    设置Swap的最大值为内存+swap,"-1"表示不限swap;
    
    --no-cache :      创建镜像的过程不使用缓存;
    
    --pull :         尝试去更新镜像的新版本;
    
    --quiet, -q :     安静模式,成功后只输出镜像 ID;
    
    --rm :         设置镜像成功后删除中间容器;
    
    --shm-size :      设置/dev/shm的大小,默认值是64M;
    
    --ulimit :       Ulimit配置。
    
    --tag, -t:       镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
    
    --network:       默认 default。在构建期间设置RUN指令的网络模式
  • 相关阅读:
    [ 黑盒测试方法 ] 错误猜测法
    [ 黑盒测试方法 ] 边界值分析法
    [ 黑盒测试方法 ] 等价类划分法
    [ Python入门教程 ] Python面向对象编程(下)
    [ Python入门教程 ] Python面向对象编程(上)
    [ Python入门教程 ] Python模块定义和使用
    [ Python入门教程 ] Python常用内置函数介绍
    [ Python入门教程 ] Python函数定义和使用
    MyBatis的缓存分析
    微机原理与接口技术总计
  • 原文地址:https://www.cnblogs.com/MrRightZhao/p/13206627.html
Copyright © 2011-2022 走看看