• dockerfile


    Dockerfile:由一系列用于根据基础镜像构建新的镜像文件的专用指令序列组成

      指令:选定基础镜像、安装必要的程序、复制配置文件和数据文件、自动运行的服务以及要暴露的端口等

      命令:docker build

      语法:指令行、注释行和空白行

      指令行:由指令及指令参数构成

        指令:其字符不区分大小写;约定俗成,要使用全大写字符

      注释行:#开头的行,必须单独位于一行当中

      空白行:会被忽略

      指令:

        FROM指令:必须是第一个非注释行,用于指定所用到的基础镜像

          语法格式:FROM  <image>[:<tag>] 或 FROM  <image>@<digest>

          例如:FROM  busybox:latest    FROM centos:6.9

          注意:尽量不要在一个dockerfile文件中使用多个FROM指令

        MAINTANIER指令:用于提供信息的指令,用于让作者提供本人的信息;不限制其出现的位置,但建议紧跟在FROM之后

          语法格式: MAINTANIER  <author's detail>

          例如:MAINTANIER john <john@gmail.com>

        COPY指令:用于从docker主机复制文件至正在创建的映像文件中

          语法格式:COPY  <src> ...  <dest>  或者 COPY  ["<src>",...  "<dest>"] (文件名中有空白字符时使用此种格式)

          <src>:要复制的源文件或目录,支持使用通配符

          <dest>:目标路径,正在创建的镜像文件的文件系统路径;建立使用绝对路径,否则,则相对于WORKDIR而言

          所有新复制生成的目录文件的UID和GID均为0

          例如:COPY  server.xml  /etc/tomcat/server.xml  COPY  *.conf   /etc/httpd/conf.d/

          注意:<src>必须是build上下文中的路径,因此,不能使用类似“../some_dir/some_file”类的路径

          <src>如果是目录,递归复制会自动行;如果有多个<src>,包括在<src>上使用了通配符这种情形,此时<dest>必须

    是目录,而且必须得以/结尾

          <dest>如果事先不存在,它将被自动创建,包括其父目录

        ADD指令:类似于COPY指令,额外还支持复制TAR文件,以及URL路径

          语法格式:ADD  <src> ...  <dest>    ADD  ["<src>",...  "<dest>"]

        例如:ADD  haproxy.cfg  /etc/haproxy/haproxy.cfg        ADD  logstash_*.cnf   /etc/logstash/

           ADD   http://www.magedu.com/download/nginx/conf/nginx.conf   /etc/nginx/

        注意:以URL格式指定的源文件,下载完成后其目标文件的权限为600

        如果<src>是URL,且<dest>不以/结尾,则<src>指定的文件将被下载并直接被创建为<dest>;如果<dest>以/结尾,则

    URL指定的文件将被下载至<dest>中,并保留原名

        如果<src>是一个host本地的文件系统上的tar格式的文件,它将被展开为一个目录,其行为类似于tar  -x命令;但是,如果

    通过URL下载到的文件是tar格式的,是不会自动进行展开操作的

        <src>如果是目录,递归复制会自动行;如果有多个<src>,包括在<src>上使用了通配符这种情形,此时<dest>必须是目

    录,而且必须得以/结尾

        <dest>如果事先不存在,它将被自动创建,包括其父目录

        ENV指令:定义环境变量,此些变量可被当前dockerfile文件中的其它指令所调用,调用格式为$variable_name或

    ${variable_name}

        语法:ENV  <key>  <value>    一次定义一个变量

           ENV  <key>=<value> ...   一次可定义多个变量 ,如果<value>中有空白字符,要使用字符进行转义或加引号

        例如:ENV  myName="Obama Clark"   myDog=Hello Dog 等同于 ENV myName  Obama Clark  

           ENV myDog  Hello Dog

        ENV定义的环境变量在镜像运行的整个过程中一直存在,因此,可以使用inspect命令查看,甚至也可以在docker  run启动此

    镜像时,使用--env选项来修改指定变量的值

        USER指令:指定运行镜像时,或运行Dockerfile文件中的任何RUN/CMD/ENTRYPOINT指令指定的程序时的用户名或UID

        语法格式:USER  <UID>|<Username>

        注意:<UID>应该使用/etc/passwd文件存在的用户的UID,否则,docker run可能会出错

        WORKDIR指令:用于为Dockerfile中所有的RUN/CMD/ENTRYPOINT/COPY/ADD指令指定工作目录

        语法格式:WORKDIR  <dirpath>

        注意:WORDIR可出现多次,也可使用相对路径,此时表示相对于前一个WORKDIR指令指定的路径;WORKDIR还可以调用

    由ENV定义的环境变量的值

        例如:WORKDIR  /var/log   WORKDIR  $STATEPATH

        VOLUME指令:用于目标镜像文件中创建一个挂载点目录,用于挂载主机上的卷或其它容器的卷

        语法格式:VOLUME  <mountpoint>    VOLUME  ["<mountpoint>", ...]

        注意:如果mountpoint路径下事先有文件存在,docker run命令会在卷挂载完成后将此前的文件复制到新挂载的卷中

        

        RUN指令:用于指定docker build过程中要运行的命令,而不是docker run此dockerfile构建成的镜像时运行

        语法格式:RUN <command> 或 RUN ["<executeable>", "<param1>", "<param2>", ...]

        例如:RUN  yum  install  iproute nginx  && yum clean all

        

        CMD指令:类似于RUN指令,用于运行程序;但二者运行的时间点不同;CMD在docker run时运行,而非docker build

        CMD指令的首要目的在于为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束;不过,CMD指令指定的程序

    可被docker run命令行参数中指定要运行的程序所覆盖

        

        语法格式:CMD  <command>  或  CMD  ["<executeable>", "<param1>", "<param2>", ...]  或  CMD [ "

    <param1>", "<param2>", ...]

        当时用第一种格式时,运行的容器不能被docker stop命令停止,第二种格式可以使用docker stop命令停止

        第三种为ENTRYPOINT指令指定的程序提供默认参数

        注意:如果dockerfile中存在多个CMD指令,仅最后一个生效

        CMD  ["/usr/sbin/httpd", "-c","/etc/httpd/conf/httpd.conf"]

        ENTRYPOINT指令:类似于CMD指令,但其不会被docker run的命令行参数指定的指令所覆盖,而且这些命令行参数会被当

    作参数送给ENTRYPOINT指令指定的程序

        但是,如果运行docker  run时使用了--entrypoint选项,此选项的参数可当作要运行的程序覆盖ENTRYPOINT指令指定的程

        语法格式:ENTRYPOINT  <command>  或  ENTRYPOINT   ["<executeable>", "<param1>", "<param2>", ...]

        例如:CMD ["-c"]  ENTRYPOINT  ["top", "-b"]等同于    ENTRYPOINT  ["top", "-b","-c"]

        

        EXPOSE指令:用于为容器指定要暴露的端口

        语法格式:EXPOSE   <port>[/<protocol>]  [<port>[/<protocol>]] ...

             <protocol>为tcp或udp二者之一,默认为tcp

        例如:EXPOSE  11211/tcp  11211/udp

        

        ONBUILD指令:定义触发器

        当前dockerfile构建出的镜像被用作基础镜像去构建其它镜像时,ONBUILD指令指定的操作才会被执行

        语法格式:ONBUILD  <INSTRUCTION>

        例如:ONBUILD  ADD  my.cnf   /etc/mysql/my.cnf

        注意:ONBUILD不能自我嵌套,且不会触发FROM和MAINTAINER指令

    一个示例:vim busybox.dockerfile

      #test

      FROM busybox:latest

      MAINTAINER John <john@gmail.com>

      

      COPY index.html /web/html/index.html

      EXPOSE 80/tcp

      CMD ["httpd","-f","-h","/web/html"]

    接下来创建html文件:vim index.html

      <h1>Frome Docker Container(Dockerfile)<h1/>

    使用docker help build查看命令帮助

    创建一个工作目录:mkdir docker   将dockerfile文件移动到工作目录下mv busybox:dockerfile docker/

    将html文件也移动到工作目录下mv index.html docker/

    创建docker文件 docker build -f /root/docker/busybox:dockerfile -t busybox:webserver /root/docker/   -f指定dockerfile

    文件,-t指定REPOSITORY和TAG 

    运行创建的image:docker run -d --name web -P busybox:webserver    -d表示在后台运行,-P表示暴露所有端口,这个必须有

    示例2:httpd

      FROM centos:latest

      MAINTAINER John <john@gmail.com>

      RUN sed -i -e 's@^mirrorlist.*repo=os.*$@baseurl=http://172.16.0.1/cobbler/ks_mirror/$releasever/@g' -e

    '/^mirrorlist.*repo=updates/a enabled=0' -e '/^mirrorlist.*repo=extras/a enabled=0' /etc/yum.repos.d/CentOS-

    Base.repo &&

      yum -y install httpd php php-mysql php-mbstring &&

      yum clean all &&

      echo -e '<?php phpinfo(); ?>' > /var/www/html/info.php

      EXPOSE 80/tcp

      CMD ["/usr/sbin/httpd","-f","/etc/httpd/conf/httpd.conf","-DFOREGROUND"]

      

       

  • 相关阅读:
    React——from
    React——条件渲染
    React——event
    React——组件
    React——JSX
    flask_mail使用
    flask开发restful api
    mysql limit和offset用法
    flask打包安装文件
    flask-sqlalchemy使用及数据迁移
  • 原文地址:https://www.cnblogs.com/linuxboke/p/5679098.html
Copyright © 2020-2023  润新知