• 六、dockerFile解析


    DockerFile

    一、什么是dockerfile

    '''
    1.dockerfile是用来构建docker镜像的构建文件,是由一系列命令和参数构成的脚本。
    2.构建的三步骤
    	- 编写dockerfile文件
    	- docker build -f dockerfile文件路径 -t 镜像名
    	- docker run 
    
    '''
    

    二、dockerfile构建过程解析

    '''
    1.dockerfile基础知识
    	- 每条保留字指令都必须为大写字母切后面要跟随至少一个参数
    	- 指令从上到下,顺序执行
    	- #表示注释
    	- 每条指令都会创建一个新的镜像层,并对镜像进行提交
    
    2.docker执行dockerfile的大致流程
    	- docker从基础镜像运行一个容器
    	- 执行一条指令并对容器作出修改
    	- 执行类似docker commit的操作提交一个新的镜像层
    	- docker再基于刚提交的镜像运行一个新容器
    	- 执行dockerfile中的下一条指令知道所有指令都执行完成
    '''
    
    小总结
    '''
    从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,
    *  Dockerfile是软件的原材料
    *  Docker镜像是软件的交付品
    *  Docker容器则可以认为是软件的运行态。
    Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。
    
    1 Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;
     
    2 Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时,会真正开始提供服务;
     
    3 Docker容器,容器是直接提供服务的。
    '''
    

    三、dockerfile体系结构(保留字指令)

    '''
    FROM 基础镜像,当前新镜像是基于哪个镜像的
    
    MAINTAINER 镜像维护者的姓名和邮箱地址
    
    RUN 容器构建时需要运行的命令
    
    EXPOSE 当前容器对外暴露出的端口
    
    WORKDIR 指定在创建容器后,终端默认登录进来的工作目录
    
    ENV 用来构建镜像过程中设置环境变量
    
    ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
    
    COPY 类似ADD,拷贝文件到镜像中,从构建上下文目录中<源路径>的文件/复制到新一层的镜像目录
    COPY src dest
    COPY ["src","dest"]
    
    VOLUME 容器数据卷,用于数据保存和持久化工作
    
    CMD 指定一个容器启动时要运行的命令
    Dockerfile中可以有多个CMD指令,多只有最后一个生效,CMD 会被 docker run 容器ID 后面的参数替换
    
    ENTRYPOINT 指定一个容器启动时要运行的命令
    ENTRYPOINT 的目的和CMD一样,都是在指定容器启动程序及参数
    
    ONBUILD 当构建一个被继承的dockerfile时运行的命令
    父镜像在被子镜像继承后父镜像的ONBUILD被触发
    '''
    

    四、案例操作

    1.创建一个centos镜像,默认工作路径为/tmp,并自带vim编辑器和ifconfig
    '''
    1.创建dockerfile文件
    ############################
    # 如果本地不存在CENTOS镜像,则会先从镜像仓库拉取CENTOS镜像
    FROM CENTOS
    ENV mypath /tmp
    WORKDIR $mypath
    RUN yum -y install vim
    RUN yum -y install net-tools
    CMD "/bin/bash"
    ############################
    
    2.通过build构建新的镜像
    docker build -f ./dockerfile -t cyan/centos .
    
    3.运行后可发现容器默认的工作路径为 /tmp
    '''
    
    2.CMD和ENTRYPOINT比较
    '''
    1.以redis的dockerfile为例
    ###############
    EXPOSE 6379
    CMD ["redis-server"]
    ###############
    docker run -it redis ls -l # 会替换redis-server就不会被执行了
    
    
    2.ENTRYPOINT
    ENTRYPOINT ["curl","-s","https://ip.cn"]
    docker run 镜像id -i
    
    CMD ["curl","-s","https://ip.cn"]
    docker run 镜像id -i  # 会报错
    '''
    

  • 相关阅读:
    day3-python之函数进阶(三)
    day3-python之函数初识(二)
    day3-python之文件操作(一)
    tomcat
    集群
    nginx
    nginx--zabbix监控status waiting
    zabbix监控之mysql主从状态&mysql主从延迟
    zabbix监控之进程&日志监控
    zabbix监控流程(监控linux上某个文件是否有改动)
  • 原文地址:https://www.cnblogs.com/Ghostant/p/12659185.html
走看看 - 开发者的网上家园