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