• Dockerfile学习(一)


    FROM指令:

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

    Dockerfile的第一条指令必须是FROM,用来指定要制作的镜像继承自哪个镜像。可以写多个FROM指令构建复杂的镜像。

    MAINTAINER指令:

    用来声明创建的镜像的作者等信息。该命令非必需。

    RUN指令:

    格式为RUN<command>或者RUN["命令","参数1","参数2".......]

    用来修改镜像的指令,常用来安装库、程序以及配置程序。一条RUN指令执行完毕后,会在当前镜像上创建一个新的镜像层,接下来的指令会在新的镜像上继续运行。RUN的两种格式举例:

    RUN yum update

    RUN ["yum","update"]

    第一种形式是在/bin/sh环境下执行的命令,第二种是直接调用exec来执行。还可以使用&&符号将多条命令连接到同一条RUN语句中执行。

    EXPOSE指令:

    格式为:EXPOSE<port>

    该指令用来讲容器中的端口暴露出来,也可以使用“docker run -p”实现和服务器端口的映射。多个端口之间使用空格隔开。“docket run -P”可以将指定的容器端口映射到宿主机的随机端口。

    CMD指令:

    该指令有三种格式:

    CMD ["命令","参数1",“参数2”......] 使用exec执行,推荐方式

    CMD 命令 参数1 参数2 ....... 在/bin/sh中执行,提供给需要交互的应用。

    CMD ["参数1","参数2"......] 提供给ENTRYPOINT的默认参数。

    指定容器时执行的命令,每个Dockerfile只执行一条CMD指令。如果指定了多条CMD指令,只有最后一条执行。如果用户启动容器时指定了运行的命令,则会覆盖掉CMD的指令。

    ENTRYPOINT指令:

    该指令有两种格式:

    ENTRYPOINT ["命令","参数1",“参数2”......] 使用exec执行

    ENTRYPOINT 命令 参数1 参数2 ....... 在/bin/sh中执行

    指定容器时执行的命令,每个Dockerfile只执行一条ENTRYPOINT指令。如果指定了多条ENTRYPOINT指令,只有最后一条执行。

    ENTRYPOINT和CMD区别在于运行容器时添加在镜像名之后的参数,对于ENTRYPOINT是拼接,而对于CMD命令则是覆盖。当然,我们也可以在运行容器的时候通过--entrypoint搭配起来使用。
    例如指定ENTRYPOINT ["ls","-l"],我们运行容器时,docker run centos -a,则实际运行的是docker run centos ls -l -a
    通常情况下,将CMD和ENTRYPOINT搭配起来使用。ENTRYPOINT用于
    
    指定需要运行的命令,CMD用于运行命令所需要的参数。
    
    ENTRYPOINT ["ls"]
    
    CMD ["-a ","-l"]

    VOLUME指令:

    格式为VOLUME ["/data"]

    创建一个可以从本地主机或其他容器挂载的挂载点。一般用来存放数据库或者需要永久保存的数据。多个容器可以通过挂载同一个挂载点共享数据,即便其中一个容器已经停止,挂载点仍然可以访问。

    ENV指令:

    格式为:ENV <key> <value>

    指定一个环境变量,会被后续RUN指令使用,并在容器运行时保持。在运行容器的时候,通过-e参数可以修改这个环境变量。

    ADD指令

    格式为ADD <src> <dest>

    第一个参数用来指定源文件,可以是文件路径、文件夹路径或网络文件的URL。如果是文件夹或者文件夹路径,必须是相对Dockerfile所在目录的相对路径。如果是URL,则创建镜像时,会先下载下来,再添加到镜像中。

    第二个参数是文件需要放置在目标镜像的位置。如果源文件是主机上zip或者tar形式的压缩文件,Docker会先解压缩,然后将文件添加到镜像的指定位置。如果源文件是一个通过URL指定的网络压缩文件,则不会解压。

    COPY指令:

    格式为:COPY<src> <dest>

    复制本地主机的<src>(为Dockerfile所在目录的相对路径)到容器的<dest>。当使用本地目录时,推荐使用COPY.

    ONBUILD指令:

    触发器指令。构建镜像的时候,Docker的镜像构建器会将所有的ONBUILD指令指定的命令保存到镜像的元数据中,这些命令在当前镜像构建过程中并不会执行,只有当新的镜像使用FROM指令指定父镜像为这个镜像时,才会出发执行。

  • 相关阅读:
    玩转oracle学习第五天
    硅谷科技巨头最刁钻面试题集锦
    Python模拟登录wap版百度贴吧+自己主动回贴
    Flask 源代码阅读笔记
    Spark1.0.0 生态圈一览
    listView.getChildAt(i)时java.lang.NullPointerException
    选择排序
    JNI 系统钩子
    MySQL Cluster2个数据节点压力测试--mysqlslap工具压400W写
    VVDocumenter
  • 原文地址:https://www.cnblogs.com/XYJK1002/p/5334351.html
Copyright © 2020-2023  润新知