跳至內容
主選單
主選單
移至側邊欄
隱藏
導覽
首頁
近期變更
隨機頁面
MediaWiki說明
Taiwan Tongues 台語維基
搜尋
搜尋
外觀
建立帳號
登入
個人工具
建立帳號
登入
檢視 Docker 的原始碼
頁面
討論
臺灣正體
閱讀
檢視原始碼
檢視歷史
工具
工具
移至側邊欄
隱藏
操作
閱讀
檢視原始碼
檢視歷史
一般
連結至此的頁面
相關變更
特殊頁面
頁面資訊
外觀
移至側邊欄
隱藏
←
Docker
由於以下原因,您無權編輯此頁面:
您請求的操作只有這些群組的使用者能使用:
使用者
、taigi-reviewer、apibot
您可以檢視並複製此頁面的原始碼。
'''Docker'''是一个開放原始碼的開放平台軟體,用於開發應用、交付(shipping)應用佮執行應用。Docker 允准使用者將基礎設施(Infrastructure)應該是愛用單獨分割出來,形成閣較細粒的(容器), 自按呢提懸交付軟體的速度。 '''Docker 容器'''佮虛擬機器類似,毋過二者佇原理上無仝款。容器是共作業系統重虛擬化,虛擬的機器是虛擬化硬體,所以容器閣較有可能紮式性、閣較會當懸效地利用侍服器。容器閣較濟用表示軟體的一个標準化單元。因為容器的標準化,所以伊會當無視基礎設施(Infrastructure)的差異,部署去任何一个所在。另外咧,Docker 嘛為容器提供閣較強的業界的隔離相容。 '''Docker'''利用 Linux 核心內底的資源分離機制,比如講 cgroups,以及 Linux 核心號名空間(namespaces), 來建立獨立的容器(containers)。 這會當踮單一 Linux 實體下運作,避免啟動一个虛擬的機器造成的額外負擔。Linux 核心對號名的空間的支援完全隔離了工作環境應用程式的視野,包括行程樹仔、網路、使用者 ID 佮掛載檔案系統,猶閣核心的 cgroup 提供資源隔離,包括講 CPU、記持體、block I / O 佮網路。對零交九版本起,Dockers 佇咧使用抽象虛擬是經由 libvirt 的 LXC 佮 systemd-nspawn 提供介面的基礎頂懸,開始包括 libcontainer 函式庫做的方式開始直接使用 Linux 核心提供的虛擬化的設施。 ==基礎架構== 專業名詞 Docker 有兩个意思: * 代指規个 Docker 專案。 * 代指 Docker ia̋n-jín。 ===Docker ia̋n-jín=== '''Docker ia̋n-jín'''( Docker Engine ) 是一个侍服器捀-客戶捀結構的應用,就是主要有遮的部份:Docker 守護行程、Docker Engine API、Docker 客戶捀。 *'''Docker 守護行程'''( Docker daemons ),嘛叫 ` dockerd `,是一个維持久化的行程,使用者管理容器。守護行程會監聽 Docker Engine API 的請求。 *'''Docker Engine API'''是用著佮 Docker 守護行程互動用的 API。伊是一个 RESTful API,所以伊毋但會當予 Docker 客戶捀呼叫,嘛會當予人 ` wget ` 和 ` curl ` 等命令呼叫。 *'''Docker 客戶捀''',嘛叫 ` docker `,是大部份使用者佮 Docker 互動的主要方式。使用者通過客戶端將命令傳送予守護行程。命令會遵循 Docker Engine API ===Docker 註冊中心=== Docker 註冊中心 ( Docker registry ) 是用於儲存 Docker 的鏡親像。Docker Hub 是一个公共的註冊中心,任何人攏會使用,預設組態下,Docker 將會佇遮揣鏡像。 另外咧,使用者會當家己構建私有註冊中心。Docker Datacenter ( DDC ) 的使用者,會當直接使用 Docker Trusted Registry ( DTR )。 ===東西=== Docker 的物件是講 Images、Containers、Networks、Volumes、Plugins 等咧。 *'''容器'''(Containers)是鏡像的會當執行的實例。容器會當通過 API 抑是 CLI(命令列)進行操控。 *'''鏡親像'''(Images)是一个唯讀模仔,用佇咧指示建立容器。鏡親像分層 ( layers ) 構建的,定義遮的層次的檔案叫做'''Dockerfile'''。 *'''服務'''(Services)允准使用者迒過無仝款的 Docker 守護行程(Docker daemons)的情況下增加容器,而且共遮的容器分做管理者(managers)佮工作者(workers), 予𪜶為 swarm 共同工作。 ==擴充架構== ===Docker Compose=== Compose 有可譯做組合物。Compose 是用佇定義佮執行真濟个容器 Docker 應用程式的工具。通過 Compose,你會使用 YAML 檔案來組態應用程式需要的所有服務,然後通過使用一个命令,就會當建立並啟動所有服務。Compose 對應的命令為 ` docker-compose `。 ===Swarm Mode=== 你若講著 Docker Swarm 時,一般是講單獨專案 Docker Swarm。啊若佇咧 Docker 一孵一兩个時陣,將 swarm mode 整合甲講 Docker ia̋n-jín 中,可用 Docker ia̋n-jín API 和 CLI 命令直接使用。官方推薦使用者使用整合的 swarm mode。 Swarm Mode 內建 kv 儲存功能,提供濟濟的新特性,比如講:具有容錯能力的去中心化設計、內建服務發現、負載均衡、路有網格、動態伸勼、滾動更新、安全傳輸等。予得 Docker 原生的 ` Swarm ` 密集具備佮 Mesos、Kubernetes 競爭的實力。 cluster ( 中文:密集 ),Docker 將欉集定義做:一陣共同作業並提供高可用性的機械。swarm ( 中文:群 ),是講一个密集的講 Docker ia̋n-jín 以 swarm mode 形式執行。swarm mode 是講 Docker ia̋n-jín 內嵌的樹集管理佮編排功能。當你初初化一个 swarm ( cluster ) 抑是講共節點加入一个 swarm 時,其實 Docker ia̋n-jín 就會使 swarm mode 的形式執行。 ====原理==== swarm 中的 Docker 機器內底分做 managers(管理者)和 workers(員工), 管理者用佇處理誠密集的關係佮委派,員工用於執行 swarm 服務。當你建立 swarm 咧服務的時陣,你會當替其增加各種額外的狀態(如:數量、網路、埠頭、儲存資源等等)。 Docker 會去維持使用者想欲愛的狀態。如:一个工課節點若掛一个,遐爾 Docker 會去共這个節點的任務予另外一个節點。此處的任務(task)是講:予被 swarm 管理者管理的一个執行內底的容器。 swarm 服務比單獨容器較好佇咧,修改 swarm 服務的組態了後毋免重新啟動。同時,Docker 以 swarm mode 形式執行的時,嘛會當選擇直接啟動單獨的容器。另外咧,swarm mode 落,你嘛會當通過 ` docker stack deploy ` 使用 Compose file 部署著愛用棧。swarm 服務分做兩種,一款是 replicated services,會當指定節點任務的總數量;global services,著啦每一个節點攏會執行一个指定任務。swarm 彼管理員使用 ingress 負載均衡使服務會當予外部接觸。swarm 管理員會自動地予服務分配 PublishedPort(抑是手動組態)。 外部組件,如雲負載均衡器能通過樹集中任何節點上的 PublishedPort 去接入服務(不管你愛服務是毋是啟動)。 另外咧 swarm mode 有內部 DNS 組件,伊會為每一个服務分配一个 DNS 條目。swarm 彼管理員使用 internal load balancing 去分發請求的時陣,就是倚靠這个 DNS 組件。 swarm mode 的功能是由 swarmkit ( 一个獨立專案 ) 提供的,伊實現矣 Docker 的編排層。swarm 會當直接予人 Docker 使用。 ==檔案格式== Docker 有兩種檔案格式,Dockerfile 和 Compose file。Dockerfile 定義了單個容器的內容佮啟動時陣的行為。Compose file 定義一个多容器應用。 ===Dockerfile=== Docker 會當做依照 Dockerfile 的內容,自動化地構建鏡像。Dockerfile 是包含著使用者想欲按怎構建鏡像的所有的命令的文字。 關鍵詞: * ` RUN `。` RUN ` 會佇咧做前鏡像的頂層頂添加新的一層 ( layer ),而且佇彼爿上執行命令,執行結果將會予人提交。提交了後的結果會用於 ` Dockerfile ` 的後一步。 * ` ENTRYPOINT `,入口點。` ENTRYPOINT ` 允准你組態容器,所以這个成做會當執行程式。即,` ENTRYPOINT ` 允准你為容器增加一个入口點。` ENTRYPOINT ` 和 ` CMD ` 類似,攏佇容器咧起動的時陣來執行,猶毋過 ` ENTRYPOINT ` 為著提供穩定而且袂使予人崁的操作。通過佇命令列中指定 `--entrypoint 命令 ` 的方式,通好執行的時將 Dockerfile 檔案中的 ` ENTRYPOINT ` 崁。 * ` CMD `,是 command 的縮寫。` CMD ` 用佇已經建立的鏡像提供預設的操作,當無想欲用預設的操作的時陣,可用 ` docker run IMAGE [: TAG | @ DIGEST] [COMMAND] ` 進行替換。但是 Dockerfile 有入口的時陣,` CMD ` 用予入去參數。 ===Compose 檔案=== Compose 檔案是一个 YAML 檔案,定義矣服務(service)、 網路、卷(volume)。 *'''服務(service)'''定義各容器的組態,定義內容將以命令列參數的方式傳予 ` docker run ` 命令。 *'''網路(network)''',類似地,共定義內容傳予 ` docker network create ` 命令。 *'''卷(volume)''',類似地,共定義內容傳予 ` docker volume create ` 命令。 ` docker run ` 命令中有一寡選項,和 Dockerfile 檔案當中的指令效果仝款(如:` CMD ` , ` EXPOSE ` , ` VOLUME ` , ` ENV `), 若是 Dockerfile 檔案中使用遮的指令,按呢遮的指令就會予人看做參考,所以開發者無需要特意在 Compose 檔案當中閣指定一改。 Compose 檔案會當使用 Shell 變數(Variable), 如: Compose 檔案會當通過家己的 ` ARGS ` 變數,將參數傳予 Dockerfile 的 ` ARGS ` 指令。 ==網路== 參考文件:Docker 文件-網路概欲 ===bridge=== 佇咧 Docker 內底,網橋網路使用的是軟體形式的網橋。使用仝款的網橋的容器連接進入該網路,非該網路的容器鑢故無法度接入去。Docker 網橋驅動會自動地佇咧 Docker 主機頂頭安裝規則,遮的規則予無仝橋接網路之間袂當直接通批。橋接定定用佇:佇咧單獨容器上執行應用的時陣,會當過網橋來進行通信。網橋網路適用於容器執行佇仝款的 Docker 守護行程的主機頂懸。無仝 Docker 守護行程主機頂懸的容器,𪜶之間的通信愛靠作業系統層次的路由,抑是講你應該使用 overlay 網路進行代替。 ` bridge ` 是網橋驅動,是 Docker 預設的網路驅動(介面名做 ` docker 零 `), 當你無為容器指定一个網路的時陣,Docker 將會使用伊該驅動。會過 ` daemon . json ` 檔案修改相關組態。 自訂網橋會當通過 ` brctl ` 命令進行組態。 ===host=== 主機模式 ` host ` 用佇咧單獨容器,該佇網路下跤容器干焦會當參 Docker 主機咧進行直接接。` host ` 干焦適用佇 Docker 十七孵空六抑是講以上版本的 swarm 服務。 host 網路佮 VirtualBox 的干焦主機網路(Host-only Networking)類似。 ===overlay=== ` overlay `(中文:崁網路)網路驅動將會建立分散式網路,該當網路會當崁若干焦 Docker 守護行程主機。該網路是對主機特定網路(host-specific networks), 容允 swarm 服務佮容器進行安全通信(當加密功能開啟的時陣)。 佇這个網路下跤,Docker 會當清楚楚的掌握封包的路由以及傳送接收容器。 ` overlay ` 有兩種網路類型網路: * ` ingress ` 網路,會當掌握 swarm 服務的網路流量。該網路是 ` overlay ` 的預設網路。 * ` docker _ gwbridge ` 網路是網橋網路。該網路會將單獨的 Docker 守護行程連接至 swarm 里的另外一个守護行程。 佇咧 ` overlay ` 網路下跤,單獨的容器佮 swarm 服務的行為佮組態概念是無仝款的。 該策略無需要容器有作業系統級別的路由,因為乎 Docker 負責路由。 ===macvlan=== ` Macvlan ` 網路允准你予容器 MAC 位址,佇網路里內底,容器會予人認為是物理裝置。Docker 守護行程會路由 ===none=== 該策略下,容器莫使用任何網路。` none ` 定定用佇連接自訂網路驅動的情況下。 ===其他=== 其他第三方外掛程式。 ==資料管理== Docker 預設之下,所有的檔案共𪜶儲存佇容器里的可寫的容器層(container layer)。 * 資料佮容器做一體。隨著容器消失,資料將消失;真僫佮其他的程式(容器)共享。 * 因為容器的寫入層這是佮宿主機器趕緊抹著。所以你誠歹行動資料到其他的機械。 * 容器的寫入層的是通過儲存驅動(storage driver)管理檔案系統。儲存驅動可以用 Linux 核心的鏈合檔案系統(union filesystem)進行掛載。相比起直接操作佇宿主機器檔案系統的資料卷,這馬外口的抽象層就會降低效能。 容器有兩種永久化儲存方式:'''卷(volumes)'''和'''結掛載(bind mounts)'''。另外咧,Linux 使用者閣會使用 tmpfs 進行掛載;Window 使用者猶閣會使用'''號名的管道(named pipe)'''。佇容器內底,不管是佗一種永久化儲存,表現形式攏是仝款的。 ===卷=== 卷(volumes)是宿主機器的檔案系統的一部分,由 Docker 進行管理(佇咧 Linux,儲存佇咧 ` / var / lib / docker / volumes / `)。 非 Docker 程式無應該去改改遮的檔案。Docker 推薦使用卷進行持久化資料。卷會當支援卷驅動(volume drivers), 應該趕緊使用者共資料儲存到遠端主機抑是雲服務商(cloud provider)抑是按怎。 無名的卷叫匿名的卷(anonymous volume), 有名的卷叫號名的卷(named volume)。 無名卷無明確的名,當初予初化的時,會去予人一个隨機名。 ===結掛載=== 結掛載(bind mounts)通過共宿主機器的路徑掛載到容器里的這種方式,對資料一直畫,因此結掛載會當共資料儉佇咧宿主機器的檔案系統的任何所在。非 Docker 程式會當修改遮的檔案。結掛載是 Docker 早期就存在的,相比起卷,結掛載十分簡單明矣。咧開發 Docker 應用的時,應使用號名卷(named volume)代替結結掛載,因為使用者袂當對結結掛載進行 Docker CLI 命令操作。 結掛載定定用於: * 同步設定檔,如:將宿主機的 DNS 設定檔(` / etc / resolv . conf `)仝步至容器當中 * 佇開發程式的時陣,將原始抑是 Artifact 仝步至容器當中。這種的用法佮 Vagrant 類似。 ===tmpfs=== ` tmpfs ` 掛載(tmpfs mounts), 干焦儲存佇記憶內底,並無操作宿主機器的檔案系統(無持久化佇磁碟)。 伊會當用久加儉一寡非常久化的狀態、敏感資料。舉例,swarm 服務通過 ` tmpfs ` 將 secrets(密碼、金鎖、憑證等)儉到 swarm 服務。 ===號名的管道=== 號名的管道(named pipes), 通過 ` npipe ` 掛載的形式,使 Docker 主機佮容器之間會當互相通訊。捷看用例是佇容器內底執行第三方工具,閣使用號名的管道連接著 Docker Engine API。 ===崁問題=== 做載空的卷到一个 kha-tá-lok-guh 中,kha-tá-lok-guh 中的內容會去予人複製佇咧卷內底(袂崁蓋)。 若掛載非空的卷抑是結掛載至一个 kha-tá-lok-guh 中,若按呢該 kha-tá-lok-guh 的內容將會予人掩崁(obscured), 當解除安裝了後內容會恢復顯示。 ==紀錄檔== 佇咧 UNIX 佮類 Unix 系統當中,捷看著的 I / O 流(英語:I / O streams)分做三種:` STDIN `(輸入)、 ` STDOUT `(正常輸出)、 ` STDERR `(錯誤輸出)。 預設組態下,Docker 的紀錄檔(如:` docker logs `、` docker service log `)所記載的是彼个命令列的輸出結果(` STDOUT ` 和 ` STDERR `)。 而且 ` STDOUT ` 和 ` STDERR ` 對應的檔案路徑分別是 ` / dev / stderr ` 和 ` / dev / stdout `。另外咧,嘛會當佇宿主機頂懸檢視容器的紀錄檔,使用下命令會使巡視著容器的紀錄檔位置。 ==Kubernetes in docker== kind(全稱:Kubernetes IN Docker)是部署本地 Kubernetes 密集的工具,發展甲誠好的節點是由 Docker 生成的。 ==操作細節== 佇安裝了 kind 了後,通過 ` kind create cluster ` 命令生做密集。生成 Kubernetes 抾倚來了後,會當通過 Docker 命令進行檢視節點概覽: ==歷史== Docker 命令佇過去的發展中誕生了四十種以上的命令,傷濟的命令致使混亂以及難以使用 tab 自動補充,所以佇遮 docker 一孵一三版本(二千空一十七孵一 . 十九)中,命令列被重構,根據邏輯物件進行劃分。官方建議使用者使用新的語法進行操作。 ==已經過時== ===Docker Swarm=== 參考 Swarm Mode 章節。 ===Docker Machine=== Docker Machine 是一个工具,伊允准你佇虛擬宿主機頂安裝 Docker ia̋n-jín,並使用 docker-machine 命令管理遮的宿主機。你會使用 Machine 佇你原生的 Mac 抑是 Windows box、公司網路、資料中心、抑是像 AWS 抑是 Digital Ocean 按呢的雲提供商上建立 Docker 宿主機。 Docker Machine 最後更新時間是佇咧零仙一六 . 零 ( 二千空一十八分十一分八 ) 版本。官方建議佇一鋪一二以及了後版本使用 Docker Desktop for Mac 和 Docker Desktop for Windows 進行代替。 ===Docker Toolbox=== Docker Toolbox 是用於幫 Windows 系統佮 Mac 系統安裝 Docker 環境。新版本建議使用 Docker Desktop for Mac 和 Docker Desktop for Windows 來做安裝。最後更新版本是十九孵空三 . 一 ( 二千空一十九九九分八學一 )。 ==安全性爭議== 二空二一年,安全公司 Palo Alto Networks 研究人員 Aviv Sasson,佇咧 Docker Hub 上發現的惡意容器影像檔,分別來自十个無仝數號,總下載次數超過兩千萬次,其中內底有含的挖礦軟體。 ==參考文獻== ==外部連結== * 官方網站 * Source code repository * Multi-tenancy using Docker * Docker 一百空一 Tutorial * libcontainer git repo * 按怎佇咧 Linux 下安裝 Docker * Windows 容器-佇咧 Windows 十部署 Docker ==參見== * 作業系統層虛擬化 * cgroups * LXC * Dotcloud [[分類: 待校正]]
返回到「
Docker
」。