docker知識點相關筆記四
阿新 • • 發佈:2018-11-11
- 什麼叫做資料卷容器?
命名的容器掛載資料卷,其它容器通過掛載這個(父容器)實現資料共享,掛載資料卷的容器,
稱之為資料卷容器 。 - 下面我們基於之前建立的映象kgf/centos去建立3個容器,名稱分別為dc01,dc02和dc03,這三個
容器的關係是dc02和dc03都繼承與dc01,下面我們通過例項操作試一下。
⑴建立dc01的容器,命令:docker run -it --name dc01 kgf/centos
上面的dataVolumeContainer2和dataVolumeContainer目錄是之前建立kgf/centos映象
時建立的據數卷。那麼現在我們在dataVolumeContainer2中建立一個檔案。
⑵建立dc01的容器,繼承dc01容器
命令:docker run -it --name dc02 --volumes-from dc01 kgf/centos
⑶建立dc03的容器,繼承dc01容器
命令:docker run -it --name dc03 --volumes-from dc01 kgf/centos
⑷下面我們分別檢視dc01,dc02中的資料卷情況。
通過上面我們可以發現,我們建立的dc01,dc02和dc03它們之間的關聯資料卷中的
資料是可以資料共享的,不管是哪個容器的資料發成了變化,那麼其它的兩個容器
的資料也將會發生同樣的改變。 - 那麼基於上面我們建立的dc01,dc02和dc033個容器,如果我們將dc01刪除掉,再去
修改dc02,那麼dc03會不會發生資料同步呢?能不能獲取到dc02修改後的資料呢?
⑴首先刪除掉dc01容器
由上圖可以發現我們刪除了dc01這個父容器後,對dc02和dc03的檔案沒有產生
影響,檔案都還存在。
⑵我們在dc02上新增一個檔案試試
⑶結論:
容器之間的配置資訊的傳遞,資料卷的生命週期一直會持續到沒有容器為止。
這就叫做容器卷傳遞共享(--volumes-from)
- 什麼是Dockerfile?
Dockerfile是用來構建docker映象的構建檔案,是由一系列命令和引數構成的指令碼。 - 構建Dockerfile的三步驟:
a:編寫Dockerfile檔案
b:docker build去執行檔案
c:docker run去執行生產的映象 - Dockerfile的構建過程解析
⑴DockerFile內容基礎知識
a:每條保留字指令都必須為大寫字母且後面要跟隨至少一個引數
b:指令按照從上到下,順序執行
c:#表示註釋
d:每條指令都會建立一個新的映象層,並對映象進行提交
⑵Docker執行Dockerfile的大致流程
a:dcoker從基礎映象執行一個容器
b:執行一條指令並對容器做出修改
c:執行類似docker commit的操作提交一個新的映象層
d:docker再基於剛提交的映象執行一個新容器
e:執行dockerfile中的下一條指令直到所有指令都執行完成
⑶dockerfile的體系結構(保留字指令)
①FROM:表示基礎映象,當前新映象是基於哪個映象的。
例如:FROM tomcat -----》就是基於tomcat作為基礎映象的
②MAINTAINER:表示映象維護者的姓名和郵箱地址
例如:MAINTAINER The Centos Project <[email protected]>
③RUN:表示容器構建時需要執行的命令
④EXPOSE:表示構建的容器啟動後對外暴露的埠號
例如:EXPOSE 6379
⑤WORKDIR:表示指定在容器建立後,終端預設登入進來的工作目錄,一個落腳點
例如:WORKDIR /data 表示當我們進入容器後預設就在/data這個目錄下
⑥ENV:用來在構建映象過程中設定環境變數
例如:ENV MY_PATH /usr/mytest 表示我們設定一個環境變數名稱為MY_PATH,
值為/usr/mytest,那麼我們後面就可以引用這個環境變數。比如我們在設定
落腳點的時候,WORKDIR $MY_PATH,那麼登入進來後直接就是在/usr/mytest
目錄下。
⑦ADD: 將宿主機目錄下的檔案拷貝進映象並且ADD命令會自動處理URL和解壓tar壓縮包
例如:ADD centos-7-docker.tar.xz /
⑧COPY:類似ADD,拷貝檔案和目錄到映象中。將從構建上下文目錄中<源路徑>的檔案/目錄
複製到新的一層映象內的<目標路徑>位置。
例如:COPY src dest 或者 COPY ["src","dest"]
⑨VOLUME:容器資料卷,用於資料儲存和持久化工作
⑩CMD:
a:表示指定一個容器啟動時要執行的命令
b:Dockerfile中可以有多個CMD指令,但只有最後一個生效,CMD會被docker run 之後
的引數替代。
ENTRYPOINT:表示指定一個容器啟動時要執行的命令,ENTRYPOINT的目的和CMD一樣,
都是在指定容器啟動程式及引數。
ONBUILD:表示當構建一個被繼承的Dockerfile時執行命令,父映象在被子繼承後父映象的
onbuild被觸發。 - 基於上面保留字的案例
⑴Base映象(scratch)
Docker Hub中99%的映象都是通過在base映象中安裝和配置需要的軟體構建出來的。
⑵自定義映象mycentos
①我們現在可以看看我們從網上下載下載的centos映象原本是什麼樣子的
②下面我們編寫我們的Dockerfile檔案
a:在/tmp/mydocker目錄下建立Dockerfile檔案
b:編寫檔案內容
c:使用dockerfile檔案構建新的映象
命令:docker build -f /tmp/mydocker/Dockerfile -t mycentos:1.1 .
d:下面我們執行新建的映象
命令:docker run -it mycentos:1.1
e:使用docker history +映象ID 檢視映象詳細資訊
- ONBUILD命令案例
⑴簡介
當構建一個被繼承的Dockerfile時執行命令,父映象在被子繼承後,父映象的onbuild被觸發。
⑵簡單案例:
上一篇:docker知識點相關筆記三
下一篇:docker知識點相關筆記五
文章目錄