Dockerfile --製作image 鏡像腳本文件
1.編寫Dockerfile文件
2.docker build 構建鏡像
3.docker run 依鏡像運行容器實例
Dockerfile內容知識
1.Dockerfile每條保留字指令必須要大寫字母且後面要跟隨至少一個參數
2.指令按照從上到下,順序執行
3.#表註解
4.每條指令均會建置一個新的鏡像層並對鏡像進行提交
5.上層映像如有異動,以下所有映像層均會重新建置,所以將常異動的映像層放在底下
Docker執行Dockerfile流程
1.docker從基礎鏡像運行一個容器
2.執行一條指令並對容器做出修改
3.執行類似docker commit的操作提交一個新的鏡像層
4.docker在基於剛提交的鏡像運行一個新容器
5.執行dockerfile中的下一條指令直到所有指令都執行完成
---------------------------------------------------------------------------------------------------------------------
例如:在centos中加入vim,ifconfig,jdk8,先下載jdk-8u171-linux-x64.tar.gz與Dockerfile同一目錄
#基礎鏡像來源
FROM centos
MAINTAINER sct<xxx@gmail.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
#安裝vim
RUN yum -y install vim
#安裝ifconfig
RUN yum -y install net-tools
#安裝java8及lib
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相對路徑jar,把jdk-8u171-linux-x64.tar.gz加入容器中,安裝包必須與Dockerfile文件在同一位置
#ADD將宿主機目錄下的文件拷貝進鏡像且會自動處理URL及解壓tar壓縮包
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java環境變量
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success........ok"
CMD /bin/bash
----------------------------------------------------------------------------------------------------
建置Dockerfile
docker build -t 新鏡像名字:TAG . -->後面要有個 . ,表示目前目錄下構建docker image
docker build -t centosjava8:1.5 .
或
docker build --tag centosjava8:1.5 .
運行測試
docker run -it 新鏡像名字:TAG
---------------------------------------------------------------------------------------------------
多階段建置映像檔方式
建置Dockerfile其順序為由上而下產生,每一行均產生一個image,如果有一行變動,其以下均會重新產生新的image,浪費時間,所以會將常異動的指令放在底下,但要注意指令的先後順序。
重新build後,檔案會變大時,就需要使用--多階段建置映像檔方式
例如:
FROM alpine:3.16.2 AS test1
RUN echo 'Builder' > /example.txt
FROM alpine:3.16.2 AS tester
COPY --from=test1 /example.txt /example.txt
RUN echo 'Tester' >> /example.txt
FROM alpine:3.16.2
COPY --from=tester /example.txt /example.txt
CMD [ "cat","/example.txt" ]
...
FROM與FROM之間為一個階段,階段完成後,就會將前一個階段編譯的工具丟棄,大幅減少了映像檔的大小。
其精華在COPY --from,讓我們從另一個映像檔複製檔案到現階段的映像檔。
------------------------------------------------------------------------------------------------
使用.dockerignore
在Dockerfile目錄加入.dockerignore 檔案,其內容如
.dockerignore
./README.md
./Dockerfile
如果Dockerfile中有COPY . .
將會把README.md及Dockerfile排除
沒有留言:
張貼留言