• dockerFile指令详解


    #--version 1.0
    FROM ubuntu:16.04
    MAINTAINER Semon
    ENV REFRESHED_AT 2020-06-16
    
    RUN apt-get -qq update #该指令运行时会刷新APT报的缓存,用来确保我们使用的安装的每个软件包都更新到最新版本
    RUN apt-get update
    RUN apt-get install -y nginx 
    RUN echo 'Hi I am IN YOUR CONTAINER' 
    >/usr/share/nginx/html/index.html
    
    
    EXPOSE 80

    说明:

    Dockerfile 由一系列指令和参数组成,每条指令都必须是大写字母且后面跟一个参数
    Dockerfile 中的指令会按照顺序从上到下执行,所以需要合理安排指令的顺序
    每条指令都会创建一个新的镜像层并对镜像进行提交。
    每个Dockerfile 的第一条指令都应该是FROM,
    FROM指令指定一个已经存在的镜像,被称为基础镜像
    MAINTAINER指令知名作者是谁

    ENV指令设置一个名为REFRESHED_AT的环境变量

    RUN指令在当前镜像中运行指定命令(如果一个平台不支持shell命令,可以使用下面的方式)、
    RUN ["apt-get","install", "-y", "nginx"]

    EXPOSE指令告诉Docker容器内的应用程序将会使用指定端口。可以指定多个EXPOSE指令向外公开多个端口。
    另外docker并不会自动打开该端口,需要在docker run 的时候-p参数指定


    使用docker build 命令构建新镜像 -t 指定标签,没有的话默认是latest
    docker build -t="jamtur01/mynginx:v1"

    以上是一份demo,根据例子解释了一部分docker命令的意义和用法,下来来介绍一下详细的内容:

    Dockerfile指令的基本格式如下:

    #Comment
    INSTRUCTION arguments
    

    dockerfile中,指令INSTRUCTION 不区分大小写,但是为了和参数区分,建议都大写。dockerfile会顺序执行dockerfile中的指令,第一条指令必须是FROM指令,它用于指定否见镜像的基础镜像。在dockerfile中以#开头的行是注释,而在其他位置出现的#会被当成参数。

    Dockerfile中的指令有

    FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD

    错误的指令会被会略。

    • ENV

    格式: ENV <KEY> <VALUE>或者<key>=<value> ...

    ENV指令可以魏镜像创建出来的容器声明环境变量。并且在Dockerfile中,ENV指令生命的环境变量会被后面的特定指令解释使用。其他指令使用环境变量是,使用格式为$variable_name或者${cariable_name}。在环境变量前面添加斜杠、可以转义,如:$foo 或者${foo}。将会分别转换为$foo和${foo},而不是环境变量所保存的值。另外ONBUILD指令不支持环境替换

    • FROM

    格式:FROM <image> 或者FROM <images>:<tag>

    FROM指令的功能是为后米娜的指令提供基础镜像,因此一个有效的dockerfile必须以from指令作为第一条费注释性指令。从公共的镜像库中拉取镜像很容易,基础镜像可以选择任何有效镜像,在一个dockefile中,FROM指令可以出现很多次,这样会构建很多个镜像。每个镜像创建完成以后,Docker命令行界面会输出该镜像的ID.若FROM指令中的tag为空,则默认tag是latest.如参数images或tag指定的镜像不存在,则返回错误。

    • COPY

    格式: COPY <src> <dest>

    COPY指令复制<src>所指向的文件或目录,将它添加到新镜像中,复制的文件和目录在镜像中的路径<dest>。 <src>所指定的源可以有多个,但必须在上下文中,及必须是上下文根目录的相对路径。不能使用形如 COPY ../something /something这样的指令。此外, <src>可以使用通配符指定所有匹配通配符的文件或目录,例如 COPY hom*

    <dest>可以是文件或目录。但必须是目录镜像中的绝对路径或者相对WORKDIR的相对路径(workdir即dockerfile中WORKDIR指令指定的路径,用来为其他指令设置工作目录)

    • ADD

    格式: ADD <src>  <dest>

    ADD 和COPY指令在功能上很相似,都支持复制本地文件到镜像的功能,但是ADD指令还支持其他功能。<src>可以指向一个指向网络文件的URL,若<dest>指向一个目录,则URL必须是完全路径,这样就可以获得该网络文件的文件名,该文件会被添加到<dest>/<filername>

    <src>还可以指向一个本地压缩归档文件,该文件在复制到容器重视会被加压提取。

    • RUN

    格式1:RUN <command> (shell格式) 这条命令会调用shell程序

    格式2:RUN ["executable","param1","param2"] (推荐格式2) 这种格式是直接运行,即使没有shell程序,参数会被当成json子数组被docker解析,所以只能使用双引号,不能使用单引号。

    • CMD

    格式1: CMD <command>(shell格式)

    格式2:CMD ["executable","param1","param2"] (推荐格式2)

    格式3:CMD ["param1","param2"] (为ENTRYPOINT指令提供参数)

    注意docker run 命令时指定了命令会覆盖CMD指令中的命令。

    • ENTRYPOINT

    格式1:ENTRYPOINT <command>(shell格式)

    格式2:ENTRYPOINT  ["executable","param1","param2"] (推荐格式2)

    ENTRYPOINT 指令和CMD指令类似,都可以让容器在每次启动时执行相同的命令,但是他们之间又有不同。一个dockerfile中可以有多条ENTRYPOINT 指令,但是只有最后一条ENTRYPOINT 指令有效。另外docker run命令执行时不会覆盖ENTRYPOINT 

    • ONBUILD

    格式:ONBUILD [INSTRUCTION]

    ONBUILD 指令的功能是添加一个将来要执行的触发器指令到镜像,当该镜像作为FROM指令的参数时,这些触发器指令就会在FROM指令执行时加入到构建过程中。尽管任何指令都可以注册成一个触发器指令,但是ONBUILD指令不能包含ONBUILD指令,并且不会触发FROM和MAINTAINER指令。当需要制作一个基础镜像来构建其他镜像时,ONBUILD是和游泳的。

    作者:first_semon
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题,欢迎交流
  • 相关阅读:
    .NET 请求和接收FormData的值
    span可编辑 属性 html 可编辑td 文字不可 选中
    mvc关于pots请求 哪个函数 出现bug研究
    C#的split函数分割
    HBase入门
    Labview学习之波形图表的历史数据
    VC++学习之GDI概述
    如何撰写项目计划书
    VC++学习之VC中常见问题
    Labview学习之程序Web发布
  • 原文地址:https://www.cnblogs.com/first-semon/p/13143468.html
Copyright © 2020-2023  润新知