zoukankan      html  css  js  c++  java
  • Dockfile编写常见命令

    docker-compose ---> docker-compose

    FROM

    指定哪种镜像作为新镜像的基础镜像

    FROM busybox:latest
    

    LABEL

    指定标签如

    LABEL MAINTAINNER="blackmood@cnblogs.com"
    

    ENV

    设置环境变量以供容器和build过程使用

    ENV HOST=0.0.0.0 
           PORT=80 
    

    RUN

    在新镜像内部执行的命令,比如安装一些软件、配置一些基础环境,可使用来换行,这种格式默认前面执行了sh -c,如:

    RUN echo 'hello docker!' 
        > /usr/local/file.txt
    

    也可以使用exec格式RUN ["executable", "param1", "param2"]的命令,如

    RUN ["apt-get","install","-y","nginx"]
    

    要注意的是,executable是命令,后面的param是参数
    注意 ,exec格式,不能解析前面定义得ENV变量

    COPY

    将主机的文件复制到镜像内,如果目的位置不存在,Docker会自动创建所有需要的目录结构,但是它只是单纯的复制,并不会去做文件提取和解压工作。如:

    COPY application.yml /etc/springboot/hello-service/src/resources/
    

    注意,复制文件夹时,不会复制文件夹本身,只会把文件夹中得内容复制到容器,如果也想要把文件夹复制过去,则指定容器路径时也需把文件夹名称也带上

    ADD

    将主机的文件复制到镜像中,跟COPY一样,限制条件和使用方式都一样,如:

    ADD application.yml /etc/springboot/hello-service/src/resources
    

    但是ADD会对压缩文件(tar, gzip, bzip2, etc)做提取和解压操作。

    EXPOSE

    暴露镜像的端口供主机做映射,启动镜像时,使用-P参数来讲镜像端口与宿主机的随机端口做映射。使用方式(可指定多个):

    EXPOSE 8080 
    EXPOSE 8081
    ...
    

    WORKDIR

    在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录。如

    WORKDIR /usr/local
    WORKDIR webservice
    RUN echo 'hello docker' > text.txt
    ...
    

    最终会在/usr/local/webservice/目录下生成text.txt文件

    ONBUILD

    当一个包含ONBUILD命令的镜像被用作其他镜像的基础镜像时(比如用户的镜像需要从某为准备好的位置添加源代码,或者用户需要执行特定于构建镜像的环境的构建脚本),该命令就会执行。
    如创建镜像image-A

    FROM ubuntu
    ...
    ONBUILD ADD . /var/www
    ...
    

    然后创建镜像image-B,指定image-A为基础镜像,如

    FROM image-A
    ...
    

    然后在构建image-B的时候,日志上显示如下:

    Step 0 : FROM image-A
    # Execting 1 build triggers
    Step onbuild-0 : ADD . /var/www
    ...
    

    USER

    指定该镜像以什么样的用户去执行,如:

    USER mongo
    

    VOLUME

    用来向基于镜像创建的容器添加卷。比如你可以将mongodb镜像中存储数据的data文件指定为主机的某个文件。(容器内部建议不要存储任何数据)
    如:

    VOLUME /data/configdb
    

    CMD

    容器启动时需要执行的命令,如:

    CMD /bin/bash
    

    同样可以使用exec语法,如

    CMD ["/bin/bash"]
    

    当有多个CMD的时候,只有最后一个生效。 CMD格式可以使用之前定义得ENV变量,因为CMD格式是通过sh -c启动得。EXEC格式则不可以

    ENTRYPOINT

    作用和用法和CMD一模一样

    注意:ENTRYPOINT 和CMD同时存在得话,则CMD则成为参数传给ENTRYPOINT

    HEALTHCHECK

    #通过运行容器中的指令来判断容器是否健康,CMD可以是shell或是exec形式
    HEALTHCHECK [OPTIONS] CMD command
         
    #禁止所有父镜像的健康检查
     HEALTHCHECK NONE
    
    这条指令用于检查容器的健康状况
    如果容器指定了健康检查,会添加额外的health字段,这个字段一开始是starting,当健康检查通过以后,会更改为healthy,如果几次尝试都失败,则会设置为unhealthy
    OPTIONS字段 
    
    #两次健康检查的间隔
    --interval=DURATION(默认为30s)
     
    健康检查命令运行超时时间,如果超过这个时间,本次健康检查视为失败
    --timeout=DURATION(默认为30s)
     
    #应用启动的初始化时间,在启动过程中的健康检查失效不会计入
    --start--period=DURATION(默认为0s)
     
    #当连续失败指定次数后,则将容器状态视为unhealthy
    --retries=N(默认为3次)
    
    
    
    如果有多条HEALTHCHECK,只有最后一条才会起作用
    
    这条命令执行完毕后,会输出一个数字:
        #成功
        0:success
        #失败
        1:unhealthy
        #保留字段,没有意义
        2:reserved
    

    SHELL

    SHELL ["executable", "parameters"]
    用于指定shell形式的命令运行的shell环境,linux默认的shell环境为["/bin/sh","-c"],windwos默认为["cmd","/S","/C"]
    

    STOPSIGNAL

    STOPSIGNAL signal
    
    使用这个指令允许用户自定义应用在收到 docker stop 时所发送的信号
    
    

    ARG

    语法:
    
    ARG <name>[=<default value>]
    
    设置变量命令,ARG命令定义了一个变量,在docker build创建镜像的时候,使用 --build-arg <varname>=<value>来指定参数
    
    如果用户在build镜像时指定了一个参数没有定义在Dockerfile中,那么将有一个Warning
    
    提示如下:
    
    [Warning] One or more build-args [foo] were not consumed.  
    
    我们可以定义一个或多个参数,如下:
    ARG tag
    ARG buildno
    FROM busybox
    
    ...
    
    也可以给参数一个默认值:
    ARG tag=v14-alpine
    ARG buildno=1
    FROM busybox:${tag}
    
    ...
    
    如果我们给了ARG定义的参数默认值,那么当build镜像时没有指定参数值,将会使用这个默认值
    
  • 相关阅读:
    Redis(二)
    Redis(一)
    MyBatis--一级二级缓存
    MySQL优化
    HashMap
    ArrayList
    常用框架注解说明
    Linux常用基础命令
    SpringCloud--gateway路由配置
    JetBrains系列软件的插件安装
  • 原文地址:https://www.cnblogs.com/blackmood/p/11382746.html
Copyright © 2011-2022 走看看