dockerfile經常使用參數及實例


dockerfile

容器構建文件

----基本講解:
            1.每條保留字指令都必須爲大寫字母且後面要跟隨至少一個參數
            2.指令按順序執行
            3.#表示註釋
            4.每條指令都會建立一個鏡像層,而且提交,終端會按步驟顯示

    ----執行步驟:
            1.docker從基礎鏡像運行一個容器
            2.執行一條指令並對容器作出修改
            3.執行相似docker commit的操做提交鏡像層
            4.docker再基於剛提交的鏡像運行一個新容器
            5.執行dockerfile中的下一條指令直到執行完畢

dockerfile體系結構(保留字指令)

FROM            基礎鏡像
MAINTAINER      鏡像做者信息
RUN             容器須要運行的指令
EXPOSE          容器對外端口號
WORKDIR         進入鏡像後的登錄目錄
ENV             用來構建鏡像過程當中設置環境變量
ADD             將宿主機文件拷貝進鏡像且ADD會自動解壓縮包和處理URL連接
COPY            將從構建上下文目錄中<源路徑>的文件/目錄複製到新的一層的鏡像內的<目標路徑>
VOLUME          容器數據卷,用於數據保存和持久化
    CMD             指定一個容器啓動時要運行的命令(dockerfile中能夠寫多個CMD指令,但只有最後一個生效,CMD會被docker run以後的參數替換)
ENTRYPOINT      指定一個容器啓動時要運行的命令(和CMD同樣,都是在指定容器啓動程序及參數)
ONBUILD         當構建一個被繼承的dockerfile時運行命令,父鏡像在被子繼承後父鏡像的onbuild被觸發

##實例一:
vim /mydocker/Dockerile02

FROM    centos
MAINTAINER  redrain<redrain@163.com>
ENV     mypath /tmp
WORKDIR $mypath
RUN     yum -y install net-tools vim
EXPOSE  80
CMD     echo $mypath
    CMD     echo -e "\033[32mpath-set sucess----------ok\033[0m"\\n"\033[32minstall net-tools vim success---------ok\033[0m"
CMD     /bin/bash

#建立鏡像,須要引用已有的centos鏡像
docker build -f /mydocker/Dockerfile02 -t mycentos:1.2 .

cat >>/.bash_profile<<EOF
export MAVEN_HOME=/usr/local/maven
export PATH=$MAVEN_HOME/bin:$PATH
EOF

##實例二:
#CMD與ENTRYPOINT的區別:
vim /mydocker/Dockerile03

FROM centos
RUN  yum install curl -y
CMD  [ "curl", "-s", "https://ip.cn" ]

打包鏡像一:
    docker build -f /mydocker/Dockerile03 -t ipself .

運行鏡像:
    #這裏會得到本身的IP
    docker run ifself

#此處加參數啓動就沒法執行,報錯參數沒法執行,由於已經覆蓋dockerfile中的CMD指令
docker run ipself -i

報錯內容:docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"-i\": executable file not found in $PATH": unknown

vim /mydocker/Dockerile04

FROM centos
RUN  yum install curl -y
ENTRYPOINT [ "curl", "-s", "https://ip.cn" ]

打包鏡像二:
    docker build -f /mydocker/Dockerile04 -t ipself2 .

運行鏡像:
    #這裏會得到本身的IP
    docker run ipself2

#此處加參數可正常啓動,它會將後面的-i參數傳遞進ENTRYPOINT中
docker run ipself -i

##實例三:

mkdir /dockerapp/tomcat/{test,tomcatlogs} -p
cd /dockerapp/tomcat

在/dockerapp/tomcat目錄下放入jdk和tomcat的對應版本的壓縮包

vim Dockerfie
####
FROM centos
MAINTAINER redrain<2477835252@qq.com>
COPY c.txt /usr/local/cincontainer.txt

ADD jdk-8u201-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.16.tar.gz /usr/local/

RUN yum install vim -y
ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_201
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.16
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.16
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

#ENTRYPOINT [ "/usr/local/apache-tomcat-9.0.16/bin/catalina.sh" ]
#CMD [ "/usr/local/apache-tomcat-9.0.16/bin/catalina.sh","run" ]
    CMD /usr/local/apache-tomcat-9.0.16/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.16/bin/logs/catalina.out

#啓動容器同步對應卷
    docker run -d -p 8080:8080 --name tomcat8080 -v /dockerapp/tomcat/test:/usr/local/apache-tomcat-9.0.16/webapps/test -v /dockerapp/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.16/logs --privileged=true tomcat8080
相關文章
相關標籤/搜索