2022年12月28日 星期三

Docker Dockerfile使用

 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排除


沒有留言:

張貼留言