Dockerfile用法全解析

1.Dockerfile的例子

  • eg:文件名是Dockerfile,src/目錄下有個1.txt文件
    在這裏插入圖片描述
1)Dockerfile中的內容如下:
FROM alpine
WORKDIR /app
COPY src/ /app
RUN echo 321>> 1.txt
CMD tail -f 1.txt 或者CMD cat 1.txt或者CMD ["cat","1.txt"]2)在命令行輸入:
-t表示構建成的鏡像名字是:test,指定版本就是test:latest,點表示位於當前目錄
docker build -t test .

docker run test
123321

2.Dockerfile指令的用法

  • Dockerfile作用:構建Docker鏡像的配置文件
  • 重要的指令如下:
FROM 表示基於什麼什麼鏡像

WORKDIR  表示:當前的工作目錄,shell語句運行在哪個路徑下,沒有目錄會自動創建

COPY	將宿主機的文件拷貝至容器中的目錄下

RUN		在構建的時候,就要運行的腳本shell語句

CMD		容器運行的時候,纔會運行的腳本,該語句執行完畢後,鏡像的生命週期也就結束了,所以一般可以
指定爲阻塞式的,eg:tail -f
---------------------------------------------------------------------------
EXPOSE		指定當前鏡像所暴露出來的端口
eg:docker inspect nginx中的Config這一項的ExposedPorts就是暴露出的端口,可以通過
docker run P 將該端口映射到主機的隨機端口,若將net指定爲host模式,會將該端口綁定到本機
的80端口

VOLUME	/a/b	指定映射文件,一般是映射到匿名卷,將容器中的/a/b目錄映射到主機的一個目錄下,
eg:docker run中-p和-v都分別指定映射到外部的端口和目錄
---------------------------------------------------------------------------
ENV		指定參數,容器的環境變量,docker -e可以指定環境變量,容器運行時的環境變量
eg:
FROM alpine
WORKDIR /app
COPY src/ /app
ENV A=10 或者 ENV A 10
CMD echo $A

ARG		構建參數,只有構建的時候纔會有效,構建指的是:docker build
其實際作用是通過參數--build-arg指定變量的值,在構建時起到臨時修改內部變量的效果
在dockerfile中其值相當於默認參數
eg:
FROM alpine
WORKDIR /app
COPY src/ /app
ARG B=10
ENV A=$B
CMD echo $A

運行的結果是10

如果使用docker build -t test --build-arg B=12 .
構建後,再運行的結果是:12
---------------------------------------------------------------------------
LABEL	指定元數據信息,作用就是看鏡像是否有標識,沒啥具體作用
eg:
FROM alpine
LABEL k="v" k1="v1"
WORKDIR /app
COPY src/ /app
ARG B=10
ENV A=$B
CMD echo $A

ONBUILD	後面可以接dockerfile其它的命令,指定在當前鏡像下不會去運行
若另一個鏡像是基於當前鏡像的話,就會在另一個鏡像的FROM後面執行ONBUILD,就是會繼承父鏡像相關指令
eg:
FROM alpine
LABEL k="v" k1="v1"
WORKDIR /app
COPY src/ /app
ONBUILD ENV C=100
CMD echo $C

再創建一個teset2目錄,且新建一個Dockerfile文件
FROM test

執行命令:在test2目錄下,構建了一個名爲test2的鏡像(-t參數)
docker build -t test2 test2
docker run test
最終打印100

docker run test
會打印空行
---------------------------------------------------------------------------
STOPSIGNAL	指定容器用什麼信號可以停止,很少用,eg:STOPSIGNAL SIGINIT,STOPSIGNAL KILL
HEALTHCHECK		檢查容器是否健康
SHEEL	指定RUN,CMD是哪種shell,linux一般默認是/bin/sh
---------------------------------------------------------------------------1)COPY與ADD的區別:
都是可以從主機外複製到鏡像裏面
COPY的源地址是主機文件系統的源地址,ADD的源地址不僅可以是主機文件系統的源地址,還可以是URL
推薦使用COPY

(2)CMD與EENTRYPOINt的區別:
都是指定容器運行起來的核心腳本
若ENTRYPOINt的形式非json數組形式,則以ENTRYPOINt爲準,CMD指令無效;
ENTRYPOINt和CMD都是json,則ENTRYPOINt+CMD拼接成shell語句來執行;

ONBUILD用法的對應圖片
在這裏插入圖片描述

參考:

https://www.bilibili.com/video/av85895204
發佈了569 篇原創文章 · 獲贊 140 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章