dockerfile

Dockerfile:由一系列用於根據基礎鏡像構建新的鏡像文件的專用指令序列組成php

  指令:選定基礎鏡像、安裝必要的程序、複製配置文件和數據文件、自動運行的服務以及要暴露的端口等html

  命令:docker buildmysql

  語法:指令行、註釋行和空白行nginx

  指令行:由指令及指令參數構成web

    指令:其字符不區分大小寫;約定俗成,要使用全大寫字符sql

  註釋行:#開頭的行,必須單獨位於一行當中docker

  空白行:會被忽略vim

  指令:centos

    FROM指令:必須是第一個非註釋行,用於指定所用到的基礎鏡像tomcat

      語法格式: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\n\tphpinfo();\n?>' > /var/www/html/info.php

  EXPOSE 80/tcp

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

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息