Dockerfile檔案用法

2022-07-16 02:21:13 字數 3838 閱讀 5857

場景:根據業務需求以及個人使用習慣,大部分執行的容器使用的映象,均需要自己去編譯映象。

from          基礎映象

maintainer 維護者的記錄資訊

run 執行shell命令,盡量執行在同一映象層,減少構建映象層數

add 複製檔案指令。它有兩個引數和。該命令將複製指定的 到容器中的 。 其中 可以是dockerfile所在目錄的乙個相對路徑;也可以是乙個 url;還可以是乙個 tar 檔案(自動解壓為目錄)。

注意:

1)如果執行docker build – < somefile即通過標準輸入來建立時,add指令只支援url方式,另外如果url需要認證,則可以通過run wget …或run curl …來完成,add指令不支援認證。

2)路徑必須與dockerfile在同級目錄或子目錄中,例如不能使用add ../somepath,因為在執行docker build時首先做的就是把dockerfile所在目錄包含子目錄傳送給docker的守護程序。

5)如果是乙個本地的壓縮包且是以「/」結尾的目錄,則會呼叫「tar -x」命令解壓縮,如果有同名檔案則覆蓋,但是乙個url時不會執行解壓縮。

copy 略

複製本地主機的 (為 dockerfile 所在目錄的相對路徑)到容器中的 。當使用本地目錄為源目錄時,推薦使用 copy。copy和add的不同就是:add多了自動解壓和支援url路徑的功能

cmd    --------> 語法: 1)cmd ["executable", "param1", "param2"] #將會呼叫exec執行,首選方式

|_____> 語法: 2)cmd ["param1", "param2"] #當使用entrypoint指令時,為該指令傳遞預設引數

|_____> 語法: 3)cmd [ |] #將會呼叫/bin/sh -c執行

指令中指定的命令會在映象執行時執行,在dockerfile中只能存在乙個,如果使用了多個cmd指令,則只有最後乙個cmd指令有效。當出現entrypoint指令時,cmd中定義的內容會作為entrypoint指令的預設引數,也就是說可以使用cmd指令給entrypoint傳遞引數。

expose 指令用來告訴docker這個容器在執行時會監聽哪些埠,docker在連線不同的容器(使用–link引數)時使用這些資訊

entrypoint --------> 語法:1)entrypoint ["executable", "param1", "param2"] #將會呼叫exec執行,首選方式

|_____> 語法:2)entrypoint command param1 param2 #將會呼叫/bin/sh -c執行

指令中指定的命令會在映象執行時執行,在dockerfile中只能存在乙個,如果使用了多個entrypoint指令,則只有最後乙個指令有效。entrypoint指令中指定的命令(exec執行的方式)可以通過docker run來傳遞引數,例如docker run

-l啟動的容器將會把-l引數傳遞給entrypoint指令定義的命令並會覆蓋cmd指令中定義的預設引數(如果有的話),但不會覆蓋該指令定義的引數,例如entrypoint ["ls","-a"],cmd ["/etc"],當通過docker run 啟動容器時該容器會執行ls -a

/etc命令,當使用docker run -l啟動時該容器會執行ls -a -l命令,-l引數會覆蓋cmd指令中定義的/etc引數。

workdir --------> 語法:workdir /path/to/workdir

指令用於設定dockerfile中的run、cmd和entrypoint指令執行命令的工作目錄(預設為/目錄),該指令在dockerfile檔案中可以出現多次,如果使用相對路徑則為相對於workdir上一次的值,例如workdir /data,workdir logs,run pwd最終輸出的當前目錄是/data/logs。

env --------> 語法:env env指令用於設定環境變數,在dockerfile中這些設定的環境變數也會影響到run指令,當執行生成的映象時這些環境變數依然有效,如果需要在執行時更改這些環境變數可以在執行docker run時新增–env =引數來修改。

注意:最好不要定義那些可能和系統預定義的環境變數衝突的名字,否則可能會產生意想不到的結果。

user --------> 語法:user [username|uid]

user指令用於設定使用者或uid來執行生成的映象和執行run指令

volume --------> 語法: volume ["samepath"]

方法1: 通過已存在的映象或容器,建立新的映象。

語法: docker    commit     :

將安裝好的容器打包成映象,儲存container 的當前狀態到image後,生成對應的image      

docker commit   264117d8cf64    centos_nginx:v1       通過容器id進行建立新映象

docker commit centos-nginx centos_nginx:v2 通過容器名稱進行建立新映象

方法2: docker build           

案例1:  docker build    使用dockerfile 檔案自動化製作image(簡單原始碼安裝nginx)

建立dockerfile如下:

建立新的容器映象檔案   在dockerfile檔案所在同級目錄下執行如下命令

docker  build   -t  centos/nginx:v1  .

docker images

啟動容器//把宿主機90埠對映到容器內的80埠

docker  run  -d  --name  nginx  -p 90:80  centos/nginx-1.8.1:v1

Dockerfile基本用法

docker 並不建議使用者通過commit方式構建映象。原因如下 用dockerfile構建映象,底層也docker commit 一層一層構建新映象的。1.執行docker build命令,t將新映象命名,末尾的.指名build context為當前目錄,從當前目錄下尋找dockerfile,也...

Dockerfile用法全解析

1 dockerfile中的內容如下 from alpine copy src run echo 321 1.txt cmd tail f 1.txt 或者cmd cat 1.txt或者cmd cat 1.txt 2 在命令列輸入 t表示構建成的映象名字是 test,指定版本就是test lates...

Dockerfile檔案詳解

一 dockerfile檔案 二 配置檔案詳解 1.from centos 我們的docker是基於哪個基礎映象的 我們的工作目錄 3.copy metadata metadata 將本地的專案拷貝到docker內部 4,run命令 在docker內部執行一下命令,可以是安裝軟體,新建資料夾等操作 ...