• Dockerfile常用语法


    1、FROM

    FROM scratch #制作base image
    FROM centos #使用base image
    FROM ubuntu:14.04
    为了安全尽量使用官方的image作为base image!

    2、LABEL

    LABEL maintainer="michealyang@qq.com"
    LABEL version="1.0"
    LABEL description="this is description"
    Metadata不可少!

    3、RUN

    RUN yum update&&yum install -y vim
        python-dev #反斜线换行
    RUN apt-get update&&apt-get install -y perl
        pwgen --no-install-recommends&&rm -rf
        /var/lib/apt/lists/* #注意清理cache
    RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'
    为了美观,复杂的RUN请用反斜线换行!避免无用分层,合并多条命令成一行!

    4、WORKDIR

    WORKDIR /root
    WORKDIR /test #如果没有会自动创建test目录
    WORKDIR demo
    RUN pwd #输出的结果应该是/test/demo
    用WORKDIR,不要使用RUN cd!尽量使用绝对目录!

    5、ADD and COPY

    ADD hello /
    ADD test.tar.gz / #添加到根目录并解压
    WORKDIR /root
    ADD hello test/ #/root/test/hello
    WORKDIR /root
    COPY hello test/
    大部分情况,COPY优于ADD!ADD除了COPY还有额外功能(解压)!添加远程文件/目录请使用curl或者wget!

    6、ENV

    ENV MYSQL_VERSION 5.6 #设置常量
    RUN apt-get install -y mysql-server="${MYSQL_VERSION}"
        && rm -rf /var/lib/apt/lists/* #引用常量
    尽量使用ENV增加可维护性

    7、RUN vs CMD vs ENTRYPOINT

    RUN:执行命令并创建新的Image Layer
    CMD:设置容器启动后默认执行的命令和参数
    ENTRYPOINT:设置容器启动时运行的命令
    Shell和Exec格式:
      Shell格式
      RUN apt-get install -y vim
      CMD echo "hello docker"
      ENTRYPOINT echo "hello docker"
      Exec格式
      RUN ["apt-get","install","-y","vim"]
      CMD ["/bin/echo","hello docker"]
      ENTRYPOINT ["/bin/echo","hello docker"]
      Dockerfile1
        FROM centos
        ENV name Docker
        ENTRYPOINT echo "hello $name" #运行镜像之后打印出hello Docker
      Dockerfile2
        FROM centos
        ENV name Docker
        ENTRYPOINT ["/bin/echo","hello $name"] #运行镜像之后打印出hello $name
        ENTRYPOINT ["/bin/bash","-c","echo hello $name"] #运行镜像之后打印出hello Docker
    CMD
      容器启动时默认执行的命令
      如果docker run指定了其他命令,CMD命令被忽略
      如果定义了多个CMD,只有最后一个会执行
      例如下面的Dockerfile:
      FROM centos
      ENV name Docker
      CMD echo "hello $name"
      运行docker run [image]会输出hello Docker
      运行docker run -it [image] /bin/bash则不输出
    ENTRYPOINT
      让容器以应用程序或者服务的形式运行
      不会被忽略,一定会执行
      最佳实践:写一个shell脚本作为entrypoint
      例如:
      COPY docker-entrypoint.sh /usr/local/bin
      ENTRYPOINT ["docker-entrypoint.sh"]
      EXPOSE 27017
      CMD ["mongod"]
      例如下面的Dockerfile:
      FROM centos
      ENV name Docker
      ENTRYPOINT echo "hello $name"
      运行docker run [image]会输出hello Docker
      运行docker run -it [image] /bin/bash也会输出hello Docker

  • 相关阅读:
    .net core 基于IIS发布
    所有开源播放器
    JWT的相关讲解
    .NET Core2.0 使用EF做数据操作
    任意的组合,数组或数组,数组或list,list或list不用循环得出匹配的总数和需要的字段列
    linq to sql学习
    winform文本框怎么实现html的placeholder效果
    [数据结构]-单链表实现栈
    [数据结构]-数组实现栈
    [数据结构]-单链表
  • 原文地址:https://www.cnblogs.com/michealyang/p/14309558.html
Copyright © 2020-2023  润新知