nodejs.cn-Node.js-簡單介紹:Node.js 與瀏覽器的區別
阿新 • • 發佈:2020-08-18
Dockerfile
映象原理
思考
- Docker映象的本質是什麼?
- Docker中一個CentOS映象為什麼只有200MB,而一個CentOS作業系統的iso檔案要幾個G?
- Docker中的tomcat映象為什麼有500MB,而一個Tomcat安裝包只有70多MB
Linux檔案系統
-
作業系統組成部分
- 程序排程子系統
- 程序通訊子系統
- 記憶體管理子系統
- 裝置管理子系統
- 檔案管理子系統
- 網路通訊子系統
- 作業控制子系統
-
Linux檔案系統由bootfs和rootfs兩部分組成
- bootfs:包含bootloader(引導載入程式)和kernel(核心)
- rootfs:root檔案系統,包含的就是典型的Linux系統中的/dev、/proc、/etc等標準目錄和檔案
- 不同的Linux發行版,bootfs基本一樣,而rootfs不同,如Ubuntu和CentOS等
Docker映象原理
-
Docker映象是由特殊的檔案系統疊加而成的
-
最底端是bootfs,並使用宿主機的bootfs(很重要)
-
第二層是root檔案系統的rootfs,稱為base image
-
然後再往上可以疊加其他的映象檔案
-
統一檔案系統(Union File System)技術能夠將不同的層整合成一個檔案系統,為這些層提供一個統一的視角,這樣就隱藏了多層的存在,在使用者的角度看來,只存在一個檔案系統
-
一個映象可以放在另一個映象的還是那個嗎,位於下面的映象稱為父映象,最底部的映象稱為基礎映象
-
當從一個映象容器啟動時,Docker會在最頂層載入一個讀寫檔案系統作為容器
總結
- 問:Docker映象的本質是什麼
- 答:是一個分層的檔案系統
- 問:Docker中一個Centos映象為什麼只有200M,而一個CentOS作業系統的iso檔案要幾個G?
- 答:CentOS的iso包含bootfs和rootfs,而Docker的centos映象複用了作業系統的bootfs,只有rootfs和其他映象層
- 問:Docker中的一個Tomcat映象為什麼有500MB,而一個Tomcat安裝包只有70多MB?
- 答:Docker中映象是分層的,Tomcat雖然只有70多MB,但他需要依賴於父映象和基礎映象,所以整個對外暴露的tomcat映象大小約500MB
映象製作
容器轉為映象
-
容器轉為映象
docker commit 容器id 映象名稱:版本號
-
將映象壓縮
docker save -o 壓縮檔名稱 映象名稱:版本號
-
將壓縮檔案還原為映象
docker save -i 壓縮檔名稱
Dockerfile
概念
- Dockerfile是一個文字檔案
- 包含了一條條的指令
- 每一條指令構建一層,基於基礎映象,最終構建一個新的映象
- 對於開發人員,可以為開發團隊提供一個完全一致的開發環境
- 對於測試人員,可以直接拿開發時所構建的映象或者通過Dockerfile檔案構建一個新的映象
- 對於運維人員,在部署時候,可以實現應用的無縫移植
Dockerfile指令
關鍵字 | 作用 | 備註 |
---|---|---|
FROM | 指定父映象 | 指定Dockerfile基於哪個image構建 |
MAINTAINER | 作者資訊 | 用來標明這個Dockerfile誰寫的 |
LABEL | 標籤 | 用來標明Dockerfile的標籤,可以使用Label代替Maintainer,最終都是在docker image基本資訊中可以檢視 |
RUN | 執行命令 | 執行一段命令,預設是/bin/sh 格式:RUN command 或 RUN ["command" , "param1","param2"] |
CMD | 容器啟動命令 | 提供啟動容器時候的預設命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"] |
ENTRYPOINT | 入口 | 一般在製作一些執行就關閉的容器中會使用 |
COPY | 複製檔案 | build的時候複製檔案到image中 |
ADD | 新增檔案 | build的時候新增檔案到image中 不僅僅侷限於當前build上下文 可以來源於遠端服務 |
ENV | 環境變數 | 指定build時候的環境變數 可以在啟動的容器的時候 通過-e覆蓋 格式ENV name=value |
ARG | 構建引數 | 構建引數 只在構建的時候使用的引數 如果有ENV 那麼ENV的相同名字的值始終覆蓋arg的引數 |
VOLUME | 定義外部可以掛載的資料卷 | 指定build的image那些目錄可以啟動的時候掛載到檔案系統中 啟動容器的時候使用 -v 繫結 格式 VOLUME ["目錄"] |
EXPOSE | 暴露埠 | 定義容器執行的時候監聽的埠 啟動容器的使用-p來繫結暴露埠 格式: EXPOSE 8080 或者 EXPOSE 8080/udp |
WORKDIR | 工作目錄 | 指定容器內部的工作目錄 如果沒有建立則自動建立 如果指定/ 使用的是絕對地址 如果不是/開頭那麼是在上一條workdir的路徑的相對路徑 |
USER | 指定執行使用者 | 指定build或者啟動的時候 使用者 在RUN CMD ENTRYPONT執行的時候的使用者 |
HEALTHCHECK | 健康檢查 | 指定監測當前容器的健康監測的命令 基本上沒用 因為很多時候 應用本身有健康監測機制 |
ONBUILD | 觸發器 | 當存在ONBUILD關鍵字的映象作為基礎映象的時候 當執行FROM完成之後 會執行 ONBUILD的命令 但是不影響當前映象 用處也不怎麼大 |
STOPSIGNAL | 傳送訊號量到宿主機 | 該STOPSIGNAL指令設定將傳送到容器的系統呼叫訊號以退出。 |
SHELL | 指定執行指令碼的shell | 指定RUN CMD ENTRYPOINT 執行命令的時候 使用的shell |
自定義CentOS映象
-
Dockerfile
# 定義父映象 FROM centos:7 # 定義作者資訊 MAINTAINER weiwei.xu <[email protected]> # 執行安裝vim命令 RUN yum -y install vim # 定義預設的工作目錄 WORKDIR /usr # 定義容器啟動執行的命令 CMD /bin/bash
-
通過Dockerfile構建映象
docker build -f Dockerfile檔案路徑 -t 映象名稱:版本號 映象存放的絕對路徑