https://docker_practice.gitee.io/nginx
https://yeasy.gitbooks.io/docker_practice/content/git
1). Docker 鏡像是一個特殊的文件系統 2). Docker 鏡像(Image),就至關因而一個 root 文件系統 3). 除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等) 4). 鏡像不包含任何動態數據,其內容在構建以後也不會被改變。 5). 鏡像只是一個虛擬的概念,其實際體現並不是由一個文件組成,而是由一組文件系統組成 6). 鏡像構建時,會一層層構建,前一層是後一層的基礎。每一層構建完就不會再發生改變,後一層上的任何改變只發生在本身這一層
1). 鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的 類 和 實例 同樣 2). 鏡像是靜態的定義,容器是鏡像運行時的實體 3). 容器的實質是進程 4). 容器不該該向其存儲層內寫入任何數據 5). 容器存儲層要保持無狀態化 6). 全部的文件寫入操做,都應該使用 數據卷(Volume)、或者綁定宿主目錄 6). 容器運行時應該儘可能保持容器存儲層不發生寫操做 7). 對於數據庫類須要保存動態數據的應用,其數據庫文件應該保存於卷(volume)中
1). 經過 <倉庫名>:<標籤> 的格式來指定具體是這個軟件哪一個版本的鏡像 2). 倉庫名常常以 兩段式路徑 形式出現,好比 jwilder/nginx-proxy 3). 前者每每意味着 Docker Registry 多用戶環境下的用戶名,後者則每每是對應的軟件名
1). docker build -t nginx:v3 . ,最後這個 . 不是在指定 Dockerfile 所在路徑,而是指定上下文路徑 2). docker build 命令構建鏡像,其實並不是在本地構建,而是在服務端 3). 通常來講,應該會將 Dockerfile 置於一個空目錄下,或者項目根目錄下 4). Docker 不是虛擬機,容器就是進程 5). CMD 指令就是用於指定這個進程的啓動命令的 6). 在指令格式上,通常推薦使用 exec 格式,這類格式會被解析爲 JSON 數組 7). Docker 不是虛擬機,容器中的應用都應該之前臺執行,容器內沒有後臺服務的概念 8). ENTRYPOINT 的目的和 CMD 同樣,都是在指定容器啓動程序及參數 9). 在 Shell 中,連續兩行是同一個進程執行環境,而在 Dockerfile 中,這兩行 RUN 命令的執行環境根本不一樣,是兩個徹底不一樣的容器