docker machine
docker swarm
docker compose
那麼在很多的生產環境中,我們可能需要構建適合自己生產環境的映象,應為github不可能擁有所有場合下都適用的映象!那麼這個時候我們就必須得構建自己映象
那麼構建映象的方式有兩種:
基於容器提交為乙個新的映象:此種方法我們需要先執行乙個容器,然後對容器進行自定義配置,當我們配置完畢後,通過docker commint命令就可以生成乙個新的映象
基於dockerfile構建映象:我們無需提前執行乙個容器,只需要將你所要執行的配置編排到乙個dockerfile檔案中,然後直接通過docker build命令自動構建即可!
dockerfile是由一系列命令和引數構成的指令碼,這些命令應用於基礎映象並最終建立乙個新的映象。它們簡化了從頭到尾的流程並極大的簡化了部署工作。dockerfile從from命令開始,緊接著跟隨者各種方法,命令和引數。其產出為乙個新的可以用於建立容器的映象。
dockerfile 一般分為四部分:基礎映象資訊、維護者資訊、映象操作指令和容器啟動時執行指令,』#』 為 dockerfile 中的注釋。
下面我們來了解一下dockerfile中常用的操作指令
from 指定基於哪個基礎映象,必須為第乙個命令
**語法:**
from from :from @**示例**
from php:5.6
注意:tag和digest是可選的,如何不使用這兩個值時,會使用latest版本的基礎映象,並以lates為tag
格式:
maintainer 示例:
maintainer fendo fendo
maintainer fendo.com
maintainer fendo fendo
將本地檔案複製到映象中
格式:copy 《源路徑》... 《目標路徑》
copy ["《源路徑1>",... "《目標路徑》"]
copy指令有兩種格式,第一種後邊直接跟shell命令,第二種類似於函式呼叫
add 指令和 copy 的格式和性質基本一致,但是在 copy 基礎上增加了一些功能:
如果 《源路徑》 為乙個 tar 壓縮檔案的話,壓縮格式為 gzip , bzip2 以及 xz 的情況下, add 指令將會自動解壓縮這個壓縮檔案到 《目標路徑》 去
run用於在映象容器中執行命令,其有以下兩種命令執行方式:
格式:run run ["executable", "param1", "param2"]
第一種後邊直接跟shell命令:
在linux作業系統上預設 /bin/sh -c,在windows作業系統上預設 cmd /s /c
第二種是類似於函式呼叫:
可將executable理解成為可執行檔案,後面就是兩個引數
run mkdir -p /opt/tom/web
run [「ls」,」-l」,」/opt/tom/web」]
暴漏容器執行時的監聽埠給外部
格式:expose port/協議(預設為tcp協議)
注意:此處暴漏埠並不是直接暴漏給外部,而是允許暴露給外部,你若不通過-p或者-p引數指定埠對映,外部是無法直接訪問的
建立乙個可以從本地主機或其他容器掛載的掛載點。
容器執行時應該盡量保持容器儲存層不發生寫操作,對於資料庫類需要儲存動態資料的應用,其資料庫檔案應該儲存於卷(volume)中,在dockerfile 中,我們可以事先指定某些目錄掛載為匿名卷,這樣在執行時如果使用者不指定掛載,其應用也可以正常執行,不會向容器儲存層寫入大量資料。
格式:volume ["《路徑1>", "《路徑2>"...]
volume 《路徑》
使用 workdir 指令可以來指定工作目錄( 或者稱為當前目錄) ,以後各層的當前目錄就被改為指定的目錄,如該目錄不存在, workdir 會幫你建立目錄
格式:workdir 《工作目錄路徑》
例項:比如要在/opt/docker/下建立乙個file.txt檔案
你可以把/opt定義為工作目錄,這樣在建立這個檔案時直接寫相對路徑就可以了
workdir /opt
run touch docker/file.txt
容器啟動時要執行的命令
格式:cmd cmd ["executable","param1","param2"]
cmd ["param1","param2"]
entrypoint 配置容器,容器啟動時要執行的命令,它和cmd很像,也是只有一條生效,如果寫多個只有最後一條有效。和cmd不同是:cmd 是可以被 docker run 指令覆蓋的,而entrypoint不能覆蓋
格式:entrypoint command param1 param2
entrypoint ["executable", "param1", "param2"]
設定環境變數,它主要是為後續的run指令提供乙個環境變數
格式:env env =...
示例:env myname fendo
env mydog fendo dog
env mycat fendo
user 指令和 workdir 相似,都是改變環境狀態並影響以後的層。 workdir 是改變工作目錄, user 則是改變之後層的執行 run , cmd 以及 entrypoint 這類命令的身份。當然,和 workdir 一樣, user 只是幫助你切換到指定使用者而已,這個使用者必須是事先建立好的,否則無法切換。
格式user 《使用者名稱》
onbuild 是乙個特殊的指令,它後面跟的是其它指令,比如 run , copy 等,而這些指令,在當前映象構建時並不會被執行。只有當以當前映象為基礎映象,去構建下一級映象的時候才會被執行
格式:onbuild [instruction]
比如當前映象為a,在dockerfile種新增:
onbuild run ls -al
這個 ls -al 命令不會在a映象構建或啟動的時候執行
此時有乙個映象b是基於a映象構建的,那麼這個ls -al 命令會在b映象構建的時候被執行。
容器健康狀況檢查命令
格式:healthcheck [options] cmd command
healthcheck none
第乙個的功能是在容器內部執行乙個命令來檢查容器的健康狀況
第二個的功能是在基礎映象中取消健康檢查命令
[options]的選項支援以下三中選項:
--interval=duration 兩次檢查預設的時間間隔為30秒
--timeout=duration 健康檢查命令執行超時時長,預設30秒
--retries=n 當連續失敗指定次數後,則容器被認為是不健康的,狀態為unhealthy,預設次數是3
cmd後邊的命令的返回值決定了本次健康檢查是否成功,具體的返回值如下:
0: success - 表示容器是健康的
1: unhealthy - 表示容器已經不能工作了
2: reserved - 保留值
docker構建映象
做映象就是構建映象!提交容器更改,生成新的映象!docker commit 容器名 新映象的名字 tag 例如 將web2容器提交為乙個新的映象,新映象的名字為nginx 1.1 在docker中映象的儲存方式是分層儲存的!每個映象都會有不同層數!映象的層數只能增加不能減少!映象是唯讀的!裡面的記憶...
docker構建映象
建立docker映象有兩種方法。1。docker commit 這種不推薦,就不介紹了。2。用docker build命令和dockerfile檔案 下面構建乙個nginx小應用。建立資料夾 mkdir static web 進入這個資料夾 cd static web 建立dockerfile檔案 ...
Docker 構建映象
docker 構建映象 1 首先,在專案的根目錄下,新建乙個文字檔案.dockerignore,寫入下面的內容。git node modules npm debug.log 2 然後在專案的根目錄下,新建乙個文字檔案 dockerfile,寫入下面的內容。run npm install regist...