docker——使用 Dockerfile 定製鏡像

鏡像的定製實際上就是定製每一層所添加的配置、文件。如果我們可以把每一層修改、安裝、構建、操作的命令都寫入一個腳本,用這個腳本來構建、定製鏡像,這個腳本就是 Dockerfile。
Dockerfile 是一個文本文件,其內包含了一條條的指令(Instruction),每一條指令構建一層,因此每一條指令的內容,就是描述該層應當如何構建。
首先,在/usr/local/目錄下創建一個docker目錄,再在docker目錄下創建一個tomcat目錄,接着創建一個Dockerfile文件。

Dockerfile文件的內容如下:

FROM tomcat
workdir /usr/local/tomcat/webapps/ROOT
RUN rm -rf *
RUN echo "hello docker" > ./index.html

FROM 指定基礎鏡像,所謂定製鏡像,那一定是以一個鏡像爲基礎,在其上進行定製。而 FROM 就是指定基礎鏡像,因此一個 Dockerfile 中 FROM 是必備的指令,並且必須是第一條指令。
RUN 指令是用來執行命令行命令的。由於命令行的強大能力,RUN 指令在定製鏡像時是最常用的指令之一。我們可以用RUN來執行shell命令。
workdir是用來指定當前的工作目錄的,上面指定了我們工作的目錄爲鏡像的/usr/local/tomcat/webapps/ROOT目錄。

接着構建鏡像

docker build -t mytomcat .

.代表當前目錄,指的是上下文的目錄。所謂上下文目錄跟當前主機是沒有任何關係的,只是跟打包上去的文件夾有關。build命令將Dockerfile文件夾打包到service端,然後在service端再解壓,上下文指的就是這個文件夾,但是這個文件夾已經跟原本的client端沒有任何關係。
如果在 Dockerfile 中這麼寫:

COPY ./package.json /app/

這並不是要複製執行 docker build 命令所在的目錄下的 package.json,也不是複製 Dockerfile 所在目錄下的 package.json,而是複製 上下文(context) 目錄下的 package.json。

因此,COPY 這類指令中的源文件的路徑都是相對路徑。這也是初學者經常會問的爲什麼 COPY …/package.json /app 或者 COPY /opt/xxxx /app 無法工作的原因,因爲這些路徑已經超出了上下文的範圍,Docker 引擎無法獲得這些位置的文件。如果真的需要那些文件,應該將它們複製到上下文目錄中去。
在這裏插入圖片描述啓動鏡像:

docker run -p 8080:8080 mytomcat;

-p使用來指定端口映射,左邊是宿主機的端口,右邊是容器的端口。
在這裏插入圖片描述
訪問瀏覽器,可以發現鏡像tomcat鏡像被我們修改了。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章