1. 程式人生 > 實用技巧 >nodejs.cn-Node.js-簡單介紹:Node.js 與瀏覽器的區別

nodejs.cn-Node.js-簡單介紹:Node.js 與瀏覽器的區別

Dockerfile

映象原理

思考

  • Docker映象的本質是什麼?
  • Docker中一個CentOS映象為什麼只有200MB,而一個CentOS作業系統的iso檔案要幾個G?
  • Docker中的tomcat映象為什麼有500MB,而一個Tomcat安裝包只有70多MB

Linux檔案系統

  • 作業系統組成部分

    1. 程序排程子系統
    2. 程序通訊子系統
    3. 記憶體管理子系統
    4. 裝置管理子系統
    5. 檔案管理子系統
    6. 網路通訊子系統
    7. 作業控制子系統
  • Linux檔案系統由bootfs和rootfs兩部分組成

    1. bootfs:包含bootloader(引導載入程式)和kernel(核心)
    2. rootfs:root檔案系統,包含的就是典型的Linux系統中的/dev、/proc、/etc等標準目錄和檔案
    3. 不同的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 映象名稱:版本號 映象存放的絕對路徑