目錄
一:Docker 鏡像管理
1:Docker 鏡像結構
2:Dockerfile介紹
二:Dockerfile 語法基礎
1:基礎指令
2:環境設置指令
3:文件操作指令
4:執行命令指令
5:網絡和暴露端口指令
6.容器掛載指令
三:dockerfile案例
1.構建nginx容器
一:Docker 鏡像管理
Docker 鏡像除了是 Docker 的核心技術之外,也是應用發布的標準格式。一個完整的 Docker 鏡像可以支撐一個 Docker 容器的運行,在 Docker 的整個使用過程中,進入一個已經定型的容器之后,就可以在容器中進行操作,最常見的操作就是在容器中安裝應用服務。 如果要把已經安裝的服務進行遷移,就需要把環境以及搭建的服務生成新的鏡像。本案例將介紹如何創建 Docker 鏡像。
1:Docker 鏡像結構
鏡像不是一個單一的文件,而是有多層構成。可以通過 docker history 命令査看鏡像中各層內容及大小,每層對應著Dockerfile 中的一條指令。Docker鏡像默認存儲在/var/lib/docker/<storage-driver>目錄中。容器其實是在鏡像的最上面加了一層讀寫層, 在運行容器里做的任何文件改動,都會寫到這個讀寫層。如果刪除了容器,也就刪除了其最上面的讀寫層,文件改動也就丟失了。Docker 使用存儲驅動管理鏡像每層內容及可讀寫層的容器層。Docker 鏡像是分層的,下面這些知識點非常重要。
- Dockerfile 中的每個指令都會創建一個新的鏡像層;
- 鏡像層將被緩存和復用;
- 當 Dockerfile 的指令修改了,復制的文件變化了,或者構建鏡像時指定的變量不同了,對應的鏡像層緩存就會失效;
- 某一層的鏡像緩存失效,它之后的鏡像層緩存都會失效;
- 鏡像層是不可變的,如果在某一層中添加一個文件,然后在下一層中刪除它,則鏡像中依然會包含該文件,只是這個文件在 Docker 容器中不可見了。
2:Dockerfile介紹
Dockfile 是一種被 Docker 程序解釋的腳本,Dockerfile 由多條的指令組成,每條指令對應Linux 下面的一條命令。Docker 程序將這些 Dockerfile 指令翻譯成真正的 Linux 命令。Dockerfile有自己書寫格式和支持的命令,Docker 程序解決這些命令間的依賴關系,類似于Makefile。Docker 程序將讀取 Dockerfile,根據指令生成定制的鏡像。相比鏡像這種黑盒子,Dockerfile 這種顯而易見的腳本更容易被使用者接受,它明確的表明鏡像是怎么產生的。有了 Dockerfile,當有定制額外的需求時,只需在 Dockerfile 上添加或者修改指令,重新生成鏡像。
二:Dockerfile 語法基礎
Dockerfile 是一個文本文件,其中包含了一系列用于構建 Docker 鏡像的指令。通過編寫Dockerfile,可以自動化地創建自定義的 Docker 鏡像。以下為你詳細介紹 Dockerfile 的常用語法:
1:基礎指令
(1)FROM
指定基礎鏡像,所有的 Dockerfile 都必須以 FROM 指令開頭,它定義了新鏡像基于哪個基礎鏡像構建。
(2)MAINTAINER(已棄用,推薦使用LABEL)
用于指定鏡像的維護者信息。不過在較新的 Docker 版本中,推薦使用 LABEL 指令來替代。
LABEL
為鏡像添加元數據,這些元數據可以是任何信息,如作者、版本、描述等,方便對鏡像進行管理和識別。
2:環境設置指令
(1)ENV
設置環境變量,這些環境變量會在容器運行時持續存在,并且可以被容器內的應用程序使用。
(2)ARG
定義在構建鏡像時可以傳遞的參數,這些參數只在鏡像構建過程中有效
3:文件操作指令
(1)CPOY
將本地文件或目錄復制到鏡像中。
(2)ADD
與 COPY 類似,也是將文件或目錄復制到鏡像中,但 ADD 還支持從遠程 URL 下載文件和自動解壓文件
(3)WORKDIR
設置工作目錄,后續的 RUN、CMD、ENTRYPOINT、COPY 和 ADD 等指令都會在這個工作目錄下執行。
4:執行命令指令
(1)RUN
在構建鏡像的過程中執行命令,常用于安裝軟件包、配置環境等操作。
(2)CMD
為容器提供默認的執行命令。一個 Dockerfile 中只能有一個 CMD 指令,如果有多個,只有最后一個會生效。當使用 docker run 啟動容器時,如果沒有指定其他命令,就會執行 CMD 指定的命令。
(3)ENTRYPOINT
配置容器啟動時執行的命令,與 CMD類似,但 ENTRYPOINT 的命令不會被 docker run 后面的命令覆蓋,而是將 docker run 后面的命令作為參數傳遞給 ENTRYPOINT 命令。
5:網絡和暴露端口指令
(1)EXPOSE
聲明容器在運行時會監聽的端口,但這只是一個聲明,并不會實際進行端口映射。在使用 dockerrun 啟動容器時,需要使用-p或-P 選項進行端口映射。
6.容器掛載指令
創建一個可以從本地主機或其他容器的掛載點,用于持久化數據或共享數據。
三:dockerfile案例
1.構建nginx容器
(1)拉取centos7鏡像
(2)創建dockerfile工作目錄
(3)創建dockerfile
(4)編寫啟動腳本
(5)用dockerfile創建鏡像
(6)啟動容器
(7)訪問nginx網站
http://192.168.10.101:8080