zoukankan      html  css  js  c++  java
  • 六、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  # 会报错
    '''
    

  • 相关阅读:
    Java 8 Lambda 表达式
    OSGi 系列(十二)之 Http Service
    OSGi 系列(十三)之 Configuration Admin Service
    OSGi 系列(十四)之 Event Admin Service
    OSGi 系列(十六)之 JDBC Service
    OSGi 系列(十)之 Blueprint
    OSGi 系列(七)之服务的监听、跟踪、声明等
    OSGi 系列(六)之服务的使用
    OSGi 系列(三)之 bundle 事件监听
    OSGi 系列(三)之 bundle 详解
  • 原文地址:https://www.cnblogs.com/Ghostant/p/12659185.html
Copyright © 2011-2022 走看看