亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Docker基礎教程之Dockerfile語法有哪些

發布時間:2022-05-31 11:50:54 來源:億速云 閱讀:161 作者:iii 欄目:大數據

今天小編給大家分享一下Docker基礎教程之Dockerfile語法有哪些的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

前言

dockfile是一種被docker程序解釋的腳本,dockerfile由一條一條的指令組成,每條指令對應linux下面的一條命令。docker程序將這些dockerfile指令翻譯真正的linux命令。dockerfile有自己書寫格式和支持的命令,docker程序解決這些命令間的依賴關系,類似于makefile。docker程序將讀取dockerfile,根據指令生成定制的image。相比image這種黑盒子,dockerfile這種顯而易見的腳本更容易被使用者接受,它明確的表明image是怎么產生的。有了dockerfile,當我們需要定制自己額外的需求時,只需在dockerfile上添加或者修改指令,重新生成image即可,省去了敲命令的麻煩。

在 dockerfile 中用到的命令有

from

from指定一個基礎鏡像, 一般情況下一個可用的 dockerfile一定是 from 為第一個指令。至于image則可以是任何合理存在的image鏡像。

from 一定是首個非注釋指令 dockerfile.

from 可以在一個 dockerfile 中出現多次,以便于創建混合的images。

如果沒有指定 tag ,latest 將會被指定為要使用的基礎鏡像版本。

maintainer

這里是用于指定鏡像制作者的信息

run

run命令將在當前image中執行任意合法命令并提交執行結果。命令執行提交后,就會自動執行dockerfile中的下一個指令。

層級 run 指令和生成提交是符合docker核心理念的做法。它允許像版本控制那樣,在任意一個點,對image 鏡像進行定制化構建。

run 指令緩存不會在下個命令執行時自動失效。比如 run apt-get dist-upgrade -y 的緩存就可能被用于下一個指令. --no-cache 標志可以被用于強制取消緩存使用。

env

env指令可以用于為docker容器設置環境變量

env設置的環境變量,可以使用 docker inspect命令來查看。同時還可以使用docker run --env <key>=<value>來修改環境變量。

user

user 用來切換運行屬主身份的。docker 默認是使用 root,但若不需要,建議切換使用者身分,畢竟 root 權限太大了,使用上有安全的風險。

workdir

workdir 用來切換工作目錄的。docker 默認的工作目錄是/,只有 run 能執行 cd 命令切換目錄,而且還只作用在當下下的 run,也就是說每一個 run 都是獨立進行的。如果想讓其他指令在指定的目錄下執行,就得靠 workdir。workdir 動作的目錄改變是持久的,不用每個指令前都使用一次 workdir。

copy

copy 將文件從路徑 <src> 復制添加到容器內部路徑 <dest>。

<src>

必須是想對于源文件夾的一個文件或目錄,也可以是一個遠程的url,<dest>

是目標容器中的絕對路徑。

所有的新文件和文件夾都會創建uid 和 gid 。事實上如果 <src> 是一個遠程文件url,那么目標文件的權限將會是600。

add

add 將文件從路徑 <src> 復制添加到容器內部路徑 <dest>。

<src> 必須是想對于源文件夾的一個文件或目錄,也可以是一個遠程的url。<dest> 是目標容器中的絕對路徑。

所有的新文件和文件夾都會創建uid 和 gid。事實上如果 <src> 是一個遠程文件url,那么目標文件的權限將會是600。

volume

創建一個可以從本地主機或其他容器掛載的掛載點,一般用來存放數據庫和需要保持的數據等。

expose

expose 指令指定在docker允許時指定的端口進行轉發。

cmd

dockerfile.中只能有一個cmd指令。 如果你指定了多個,那么最后個cmd指令是生效的。

cmd指令的主要作用是提供默認的執行容器。這些默認值可以包括可執行文件,也可以省略可執行文件。

當你使用shell或exec格式時,  cmd

會自動執行這個命令。

onbuild

onbuild 的作用就是讓指令延遲執行,延遲到下一個使用 from 的 dockerfile 在建立 image 時執行,只限延遲一次。

onbuild 的使用情景是在建立鏡像時取得最新的源碼 (搭配 run) 與限定系統框架。

arg

arg是docker1.9 版本才新加入的指令。

arg 定義的變量只在建立 image 時有效,建立完成后變量就失效消失

label

定義一個 image 標簽 owner,并賦值,其值為變量 name 的值。(label owner=$name )

entrypoint

是指定 docker image 運行成 instance (也就是 docker container) 時,要執行的命令或者文件。

注意:

cmd 和 entrypoint 都能用來指定開始運行的程序,而且這兩個命令都有兩種不用的語法:

cmd ls -l

or

cmd ["ls",''-l"]

對于第一種語法,docker 會自動加入“/bin/sh –c”到命令中,這樣就有可能導致意想不到的行為。為了避免這種行為,我們推薦所有的 cmd 和 entrypoint 都應該使用第二種語法。

如果兩個同時使用,請確定確定他們的含義沒有錯誤。一般來說需要兩個同時使用的情況只有 entrypoint 指定需要運行的 binary,cmd 給出運行的默認參數。

  • 盡量合并命令

dockerfile 中的每一個命令都會創建一個新的 layer,而一個容器能夠擁有的最多 layer 數是有限制的。所以盡量將邏輯上連貫的命令合并可以減少 layer的層數,合并命令的方法可以包括將多個可以合并的命令(expose, env,volume,copy)合并。

dockerfile 中的每一個命令都會創建一個新的 layer,而一個容器能夠擁有的最多 layer 數是有限制的。所以盡量將邏輯上連貫的命令合并可以減少 layer 的層數,這也可以加快編譯速度。

將多個可以合并的命令(run,expose, env,volume,copy)合并,比如:

exoise 80
exoise 8080
cmd cd /tmp
cmd ls

==>

exoise 80 8080
cmd cd /tmp && ls

add命令和 copy 命令在很大層度上功能是一樣的。但是 copy 語義更加直接,所以我們推薦盡量使用 copy 命令。唯一例外的是 add 命令自帶解壓功能,如果需要拷貝并解壓一個文件到鏡像中,那么我們可以使用 add 命令。除此之外,我們都推薦使用 copy 命令。

add 1.1.1.100:1234/jdk-8u74-linux-x64.tar.gz /usr/local/
  • user的使用

docker 默認所有的應用都會跑在容器的 root user 底下,但是這樣會造成一些潛在的安全隱患。在 production 環境跑的 container 最好是通過user命令跑在非特權用戶底下。

以上就是“Docker基礎教程之Dockerfile語法有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

百色市| 巨野县| 屏南县| 江津市| 洛浦县| 云龙县| 德令哈市| 阳原县| 新平| 景东| 甘德县| 彰化市| 濉溪县| 丘北县| 海南省| 台北县| 永济市| 乐业县| 水富县| 灵石县| 三门县| 富宁县| 探索| 集贤县| 沅江市| 长沙县| 达孜县| 安龙县| 永善县| 通江县| 鹤壁市| 邹城市| 花垣县| 原平市| 波密县| 宾阳县| 建宁县| 财经| 肃北| 陈巴尔虎旗| 正蓝旗|