Docker
原作者 | Solomon Hykes |
---|---|
開發者 | Docker, Inc. |
首次釋出 | 2013年3月13日 |
目前版本 |
|
原始碼庫 | |
程式語言 | Go |
作業系統 | Linux、Windows、macOS |
平台 | x86-64、ARM、s390x、ppc64le |
類型 | 作業系統層虛擬化 |
特許條款 | 可執行檔:免費增值軟件即服務 原始碼:Apache特許條款 2.0 |
網站 | www |
Docker是一個開放原始碼的開放平臺軟件,用於開發應用、交付(shipping)應用和執行應用。Docker允許用戶將基礎設施(Infrastructure)中的應用單獨分割出來,形成更小的顆粒(容器),從而提高交付軟件的速度。[2]
Docker容器與虛擬機器類似,但二者在原理上不同。容器是將作業系統層虛擬化,虛擬機器則是虛擬化硬件,因此容器更具有可攜式性、更能高效地利用伺服器。 容器更多的用於表示軟件的一個標準化單元。由於容器的標準化,因此它可以無視基礎設施(Infrastructure)的差異,部署到任何一個地方。另外,Docker也為容器提供更強的業界的隔離相容。[3]
Docker 利用Linux核心中的資源分離機制,例如cgroups,以及Linux核心命名空間(namespaces),來建立獨立的容器(containers)。這可以在單一Linux實體下運作,避免啟動一個虛擬機器造成的額外負擔[4]。Linux核心對命名空間的支援完全隔離了工作環境中應用程式的視野,包括行程樹、網絡、用戶ID與掛載檔案系統,而核心的cgroup提供資源隔離,包括CPU、記憶體、block I/O與網絡。從0.9版本起,Dockers在使用抽象虛擬是經由libvirt的LXC與systemd - nspawn提供介面的基礎上,開始包括libcontainer函式庫做為以自己的方式開始直接使用由Linux核心提供的虛擬化的設施。[4]
基礎架構
專業名詞Docker有兩個意思:[5]
- 代指整個Docker專案。
- 代指Docker引擎。
Docker引擎
Docker引擎(Docker Engine)是一個伺服器端-客戶端結構的應用,主要有這些部分:Docker守護行程、Docker Engine API(頁面存檔備份,存於互聯網檔案館)、Docker客戶端。[6]
- Docker守護行程(Docker daemons),也叫
dockerd
,是一個持久化的行程,用戶管理容器。守護行程會監聽Docker Engine API(頁面存檔備份,存於互聯網檔案館) 的請求。[7] - Docker Engine API(頁面存檔備份,存於互聯網檔案館)是用於與Docker守護行程互動用的的API。它是一個RESTful API,因此它不僅可以被Docker客戶端呼叫,也可以被
wget
和curl
等命令呼叫。[8] - Docker客戶端,也叫
docker
,是大部分用戶與Docker互動的主要方式。用戶通過客戶端將命令傳送給守護行程。命令會遵循Docker Engine API (頁面存檔備份,存於互聯網檔案館) (頁面存檔備份,存於互聯網檔案館)(頁面存檔備份,存於互聯網檔案館)[7]
Docker註冊中心
Docker註冊中心(Docker registry)是用於儲存Docker的鏡像。Docker Hub 是一個公共的註冊中心,任何人都可以使用,預設組態下,Docker將會在這裏尋找鏡像。[6]
另外,用戶可以自行構建私有註冊中心。Docker Datacenter (DDC)的用戶,可以直接使用 Docker Trusted Registry (DTR)。[6]
2023年5月,在中國大陸地區被防火長城阻斷封鎖[9],同年9月恢復訪問[10]。
對象
Docker的對象是指Images、Containers、Networks、Volumes、Plugins等等。[6]
- 容器(Containers)是鏡像的可執行的實例。容器可通過API或CLI(命令列)進行操控。[6]
- 鏡像(Images)是一個唯讀模板,用於指示建立容器。[6] 鏡像分層(layers)構建的,而定義這些層次的檔案叫Dockerfile。[11]
- 服務(Services)允許用戶跨越不同的Docker守護行程(Docker daemons)的情況下增加容器,並將這些容器分為管理者(managers)和工作者(workers),讓他們為swarm共同工作。[6]
擴充架構
Docker Compose
Compose可譯為組合物。[12]Compose 是用於定義和執行 多個容器Docker應用程式 的工具。通過Compose,你可以使用YAML檔案來組態應用程式需要的所有服務,然後通過使用一個命令,就可以建立並啟動所有服務。[13][14]Compose對應的命令為docker-compose
。[15]
Swarm Mode
當說到 Docker Swarm 時,一般是指單獨專案 Docker Swarm。而在Docker 1.12時,將swarm mode整合到Docker 引擎中,可用Docker引擎API 和 CLI 命令直接使用。官方推薦用戶使用整合的 swarm mode [16]。
Swarm Mode 內建 kv 儲存功能,提供了眾多的新特性,比如:具有容錯能力的去中心化設計、內建服務發現、負載均衡、路由網格、動態伸縮、滾動更新、安全傳輸等。使得 Docker 原生的 Swarm
叢集具備與 Mesos、Kubernetes 競爭的實力。[17]
cluster(中文:叢集),Docker將叢集定義為:一群共同作業並提供高可用性的機器[5] 。swarm(中文:群[18]),是指一個叢集的Docker引擎以swarm mode形式執行[5]。swarm mode是指Docker引擎內嵌的叢集管理和編排功能。當你初始化了一個swarm(cluster)或者將節點加入一個swarm時,其Docker引擎就會以swarm mode的形式執行。[5]
原理
swarm中的Docker機器中分為 managers(管理者) 和 workers(員工),管理者用於處理叢集的關係和委派,員工則用於執行 swarm服務。[19] 當你建立swarm服務時,你可以為其增加各種額外的狀態(如:數量、網絡、埠、儲存資源等等)。Docker會去維持用戶想要的狀態。如:一個工作節點如果掛了,那麼Docker會去把這個節點的任務給另外一個節點。此處的任務(task)是指:被swarm管理者管理的一個執行中的容器。[19]
swarm服務比單獨容器好在,修改swarm服務的組態之後不用重新啟動。同時,Docker以swarm mode形式執行時,也可以選擇直接啟動單獨的容器。另外,swarm mode下,你也可以通過 docker stack deploy
使用 Compose file 部署應用棧。[20][19] swarm服務分為兩種,一種是replicated services ,可以指定節點任務的總數量;global services,則是每個節點都會執行一個指定任務。[21] swarm管理員使用 ingress 負載均衡使服務可被外部接觸。 swarm管理員會自動地給服務分配PublishedPort(或者手動組態)。外部組件,如雲負載均衡器能通過叢集中任何節點上的PublishedPort去接入服務(不管該服務是否啟動)。另外 swarm mode有內部DNS組件,它會為每個服務分配一個DNS條目。swarm管理員使用 internal load balancing 去分發請求時,就是依靠這個DNS組件。[22]
swarm mode的功能是由swarmkit(一個獨立專案)提供的,它實現了Docker的編排層。swarm可以直接被Docker使用。[19]
檔案格式
Docker有兩種檔案格式,Dockerfile和Compose file。Dockerfile定義了單個容器的內容和啟動時候的行為。Compose file定義了一個多容器應用。[23]
Dockerfile
Docker 可以依照 Dockerfile 的內容,自動化地構建鏡像。 Dockerfile 是包含着用戶想要如何構建鏡像的所有命令的文字。[24]
FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py
關鍵詞:
RUN
。RUN
會在當前鏡像的頂層上添加新的一層(layer),並在該層上執行命令,執行結果將會被提交。提交後的結果將會用於Dockerfile
的下一步。[25]ENTRYPOINT
,入口點。ENTRYPOINT
允許你組態容器,使之成為可執行程式。[26]即,ENTRYPOINT
允許你為容器增加一個入口點。ENTRYPOINT
和CMD
類似,均在容器啟動時執行,但是ENTRYPOINT
為了提供穩定且不可被覆蓋的操作。[27]通過在命令列中指定--entrypoint 命令
的方式,可在執行時將Dockerfile檔案中的ENTRYPOINT
覆蓋。CMD
,是command的縮寫。CMD
用於為已建立的鏡像提供預設的操作,當不想要用預設操作時候,可用docker run IMAGE[:TAG|@DIGEST] [COMMAND]
進行替換 。但當Dockerfile擁有入口點時,CMD
用於賦予入口點參數。[28]
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檔案中再指定一次。[29]
Compose檔案 可使用 Shell變數(Variable),如:[30]
db:
image: "postgres:${POSTGRES_VERSION}"
Compose檔案 可通過自身的ARGS
變數,將參數傳給Dockerfile的 ARGS
指令。[31]
網絡
參考文件:Docker文件-網絡概要(頁面存檔備份,存於互聯網檔案館)
bridge
在Docker裏,網橋網絡 使用的是 軟件形式的網橋。使用相同的網橋的容器連接進入該網絡,而非該網絡的容器刷故無法接入。Docker網橋驅動會自動地在Docker主機上安裝規則,這些規則讓不同橋接網絡之間不能直接通訊。[32] 橋接經常用於:在單獨容器上執行應用時,可通過 網橋 進行通訊。[33] 網橋網絡 適用於容器執行在相同地Docker守護行程的主機上。不同Docker守護行程主機上的容器,它們之間的通訊需要依靠作業系統層次的路由,或者你應該使用 overlay網絡 進行代替。[32]
bridge
是網橋驅動,是Docker預設的網絡驅動(介面名為 docker0
[34]),當你不為容器指定一個網絡時候,Docker將會使用該驅動。[33] 可通過 daemon.json
檔案修改相關組態。[35]
host
主機模式
host
用於單獨容器,該網絡下容器只能和Docker主機進行直接連接。host
只適用於 Docker 17.06或以上版本的swarm服務。
host網絡和VirtualBox的 僅主機網絡(Host-only Networking) 類似。[38]
overlay
overlay
(中文:覆蓋網絡)網絡驅動將會建立分散式網絡,該網絡可以覆蓋若干個 Docker守護行程主機。該網絡是基於 主機特定網絡(host-specific networks),允許 swarm服務 和 容器 進行安全通訊(當加密功能開啟時)。在該網絡下,Docker能夠清晰地掌握 封包的路由 以及 傳送接收容器。[39]
overlay
有兩種網絡類型網絡:[39]
ingress
網絡,可掌控 swarm服務 的網絡流量 。該網絡是overlay
的預設網絡。docker_gwbridge
網絡是 網橋網絡。該網絡會將 單獨的Docker守護行程 連接至 swarm里的另外一個守護行程。
在 overlay
網絡下,單獨的容器 和 swarm服務 的行為和組態概念 是不一樣的。[39]
該策略不需要 容器們 具有作業系統級別的路由,因為Docker負責路由。[33]
macvlan
Macvlan
網絡組態提供了一種機制,允許單獨的容器具有獨立的MAC地址,使得這些容器在網絡上表現得如同物理裝置。
none
該策略下,容器不使用任何網絡。none
常常用於連接自訂網絡驅動的情況下。
其他
截止2023年5月18日,Docker官方倉庫域名 https://hub.docker.com/ (頁面存檔備份,存於互聯網檔案館) 在中國大陸被封鎖,方式為DNS污染。隨後短暫解封,2024年6月6日再次被封。
數據管理
Docker預設下,所有檔案將會儲存在容器里的可寫的容器層(container layer)。[40]
- 數據與容器為一體。隨着容器消失,數據將消失;難以與其他程式(容器)共用。可以採用掛載檔案的方式解決。
- 由於容器的寫入層是與宿主機器緊緊耦合。所以你難以流動數據到其他機器。
- 容器的寫入層的是通過 儲存驅動(頁面存檔備份,存於互聯網檔案館)(storage driver) 管理檔案系統。儲存驅動(頁面存檔備份,存於互聯網檔案館) 會使用Linux內核的 鏈合檔案系統(union filesystem)進行掛載。相比起直接操作於宿主機器檔案系統的 數據卷,這額外的抽象層將會降低效能。
容器有兩種永久化儲存方式:卷(volumes)和 繫結掛載(bind mounts)。另外,Linux用戶還可使用 tmpfs 進行掛載;Window用戶還可以使用 命名管道(named pipe)。在容器中,不管是哪種永久化儲存,表現形式都是一樣的。[40]
卷
卷(volumes)是宿主機器的檔案系統的一部分,由Docker進行管理( 在Linux,儲存於/var/lib/docker/volumes/
)。非Docker程式不應該去修改這些檔案。Docker推薦使用 卷 進行持久化數據。 卷 可支援 卷驅動(volume drivers),該驅動允許用戶將數據儲存到 遠端主機 或 雲服務商(cloud provider)或 其他。[40]
沒有名字的卷叫匿名卷(anonymous volume),有名字的卷叫命名卷(named volume)。匿名卷沒有明確的名字,當被初始化時,會被賦予一個隨機名字。[40]
繫結掛載
繫結掛載(bind mounts)通過將宿主機器的路徑掛載到容器里的這種方式,從而數據持續化,因此繫結掛載可將數據儲存在宿主機器的檔案系統的任何地方。非Docker程式可修改這些檔案。 繫結掛載是Docker早期就存在的,相比起卷,繫結掛載十分簡單明了。[40] 在開發Docker應用時,應使用命名卷(named volume)代替繫結掛載,因為用戶不能對繫結掛載進行 Docker CLI 命令操作。[40]
繫結掛載常用於:[41]
- 同步設定檔,如: 將 宿主主機的DNS設定檔(
/etc/resolv.conf
)同步至容器中 - 在開發程式時,將 原始碼 或 Artifact 同步至容器中。[41] 這種用法與 Vagrant 類似。
tmpfs
tmpfs
掛載(tmpfs mounts),僅僅儲存於主記憶體中,並不操作 宿主機器的檔案系統(不持久化於磁碟)。它可用於儲存一些 非持久化狀態、敏感數據。 舉例,swarm服務 通過tmpfs
將 secrets(頁面存檔備份,存於互聯網檔案館)(密碼、金鑰、證書等)儲存到swarm服務。 [40]
命名管道
命名管道(named pipes),通過 npipe
掛載的形式,使 Docker主機 和 容器 之間能互相通訊。常見用例是在容器內執行第三方工具,並使用命名管道連接到Docker Engine API。[40][42]
覆蓋問題
當掛載 空的卷 至一個目錄中,目錄中的內容會被複製於卷中(不會覆蓋)。如果掛載 非空的卷 或 繫結掛載 至一個目錄中,那麼該目錄的內容將會被隱藏(obscured ),當解除安裝後內容將會恢復顯示。[43]
紀錄檔
在UNIX和類Unix系統中,常見的 I/O流(英語:I/O streams) 分為三種:STDIN
(輸入 )、 STDOUT
(正常輸出)、STDERR
(錯誤輸出)。[44]
預設組態下,Docker的紀錄檔(如:docker logs
、docker service log
)所記載的是命令列的輸出結果(STDOUT
和STDERR
)。而STDOUT
和 STDERR
對應的檔案路徑分別是 /dev/stderr
和/dev/stdout
。[44] 另外,也可以在宿主主機上檢視容器的紀錄檔,使用以下命令可以檢視到容器的紀錄檔位置。[45]
$ docker inspect --format='{{.LogPath}}' $INSTANCE_ID
Kubernetes in docker
kind(全稱:Kubernetes IN Docker)是部署本地Kubernetes叢集的工具,而叢集的節點是由Docker生成的。[46]
操作細節
在安裝完kind之後,通過kind create cluster
命令生成叢集。[46] 生成Kubernetes叢集後,可以通過Docker命令進行檢視節點概覽:
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99c96c1f21ab kindest/node:v1.17.0 "/usr/local/bin/entr…" 4 minutes ago Up 4 minutes 127.0.0.1:32769->6443/tcp kind-control-plane
歷史
Docker命令在過去的發展中誕生了40種以上的命令,過多的命令導致混亂以及難以使用tab自動補充,因此在docker 1.13版本(2017.1.19)中,命令列被重構,根據邏輯對象進行劃分。官方建議用戶使用新的語法進行操作。[47]
已過時
Docker Swarm
參考Swarm Mode章節。
Docker Machine
Docker Machine 是一個工具,它允許你在虛擬宿主機上安裝 Docker引擎,並使用 docker-machine 命令管理這些宿主機。你可以使用 Machine 在你本地的 Mac 或 Windows box、公司網絡、數據中心、或像 AWS 或 Digital Ocean 這樣的雲提供商上建立 Docker 宿主機。[48][49]
Docker Machine 最後更新時間是在0.16.0 (2018-11-08)版本[50]。官方建議在1.12以及之後版本使用Docker Desktop for Mac和Docker Desktop for Windows進行代替。[48]
Docker Toolbox
Docker Toolbox是用於幫 Windows系統和Mac系統 安裝Docker環境。新版本建議使用Docker Desktop for Mac和Docker Desktop for Windows進行安裝。[51]最後更新版本是 19.03.1(2019-08-01)。[52]
安全性爭議
2021年,安全公司Palo Alto Networks研究人員Aviv Sasson,在Docker Hub上發現的惡意容器映像存檔,分別來自10個不同帳號,總下載次數超過2000萬次,其中內含的挖礦軟件。[53]
參考文獻
- ^ https://github.com/docker/cli/releases/tag/v27.4.1; 出版日期: 2024年12月18日; 檢索日期: 2024年12月19日.
- ^ Get Docker. Docker Documentation. 2020-03-20 [2020-03-22]. (原始內容存檔於2020-03-22) (英語).
- ^ What is a Container? | App Containerization | Docker. www.docker.com. [2020-03-22]. (原始內容存檔於2018-08-06) (英語).
- ^ 4.0 4.1 Docker Documentation. docker.readthedocs.org. 2014-01-04 [2014-08-20]. (原始內容存檔於2014-08-21).
- ^ 5.0 5.1 5.2 5.3 Glossary. Docker Documentation. 2020-02-25 [2020-02-29]. (原始內容存檔於2019-12-28) (英語).
- ^ 6.0 6.1 6.2 6.3 6.4 6.5 6.6 Docker overview. Docker Documentation. 2020-02-14 [2020-02-16]. (原始內容存檔於2020-01-06) (英語).
- ^ 7.0 7.1 dockerd. Docker Documentation. 2020-02-14 [2020-02-16]. (原始內容存檔於2020-02-18) (英語).
- ^ Develop with Docker Engine SDKs and API. Docker Documentation. 2020-02-14 [2020-02-16]. (原始內容存檔於2020-02-18) (英語).
- ^ 恶意利用 hub.docker.com 上传涉及政治的项目,导致被墙. v2ex. [2023-07-07]. (原始內容存檔於2023-07-08).
- ^ https://cn-sec.com/archives/3150468.html
- ^ About storage drivers. Docker Documentation. 2020-02-14 [2020-02-16]. (原始內容存檔於2020-02-18) (英語).
- ^ What is the noun for compose?. WordHippo. [2020-02-16]. (原始內容存檔於2020-02-16) (英語).
- ^ Docker Compose | 菜鸟教程. www.runoob.com. [2020-02-16]. (原始內容存檔於2020-02-16).
- ^ Overview of Docker Compose. Docker Documentation. 2020-02-14 [2020-02-16]. (原始內容存檔於2020-02-18) (英語).
- ^ Compose command-line reference. Docker Documentation. 2020-02-14 [2020-02-16]. (原始內容存檔於2020-04-01) (英語).
- ^ Docker Swarm overview. Docker Documentation. 2020-02-25 [2020-02-29]. (原始內容存檔於2020-04-23) (英語).
- ^ Swarm mode · Docker —— 从入门到实践. yeasy.gitbooks.io. [2020-03-05]. (原始內容存檔於2020-03-20).
- ^ swarm漢語(繁體)翻譯:劍橋詞典. dictionary.cambridge.org. [2020-02-24]. (原始內容存檔於2020-04-23) (中文(繁體)).
- ^ 19.0 19.1 19.2 19.3 Swarm mode key concepts. Docker Documentation. 2020-02-20 [2020-02-24]. (原始內容存檔於2020-02-24) (英語).
- ^ Deploy a stack to a swarm. Docker Documentation. 2020-02-25 [2020-02-29]. (原始內容存檔於2020-02-29) (英語).
- ^ services-and-tasks. Docker Documentation. 2020-02-25 [2020-02-29]. (原始內容存檔於2020-02-24) (英語).
- ^ load-balancing. Docker Documentation. 2020-02-25 [2020-02-29]. (原始內容存檔於2020-02-24) (英語).
- ^ Reference documentation. Docker Documentation. 2020-02-14 [2020-02-17]. (原始內容存檔於2020-02-17) (英語).
- ^ dockerfile-reference. (原始內容存檔於2020-02-18).
- ^ run. [2020-02-18]. (原始內容存檔於2020-02-18).
- ^ entrypoint. [2020-02-27]. (原始內容存檔於2020-02-21).
- ^ entrypoint-default-command-to-execute-at-runtime. (原始內容存檔於2020-02-02).
- ^ cmd-default-command-or-options. (原始內容存檔於2020-02-02).
- ^ service-configuration-reference. [2020-02-19]. (原始內容存檔於2020-02-16).
- ^ variable-substitution. (原始內容存檔於2020-02-16).
- ^ args. Docker Documentation. 2020-04-09 [2020-04-13]. (原始內容存檔於2020-04-11) (英語).
- ^ 32.0 32.1 Use bridge networks. Docker Documentation. 2020-03-19 [2020-03-20]. (原始內容存檔於2020-02-23) (英語).
- ^ 33.0 33.1 33.2 network-drivers 章节的. Docker Documentation. 2020-03-19 [2020-03-20]. (原始內容存檔於2020-04-15) (英語).
- ^ 配置 docker0 网桥 · Docker —— 从入门到实践. yeasy.gitbooks.io. [2020-03-20]. (原始內容存檔於2020-03-20).
- ^ Use bridge networks - configure-the-default-bridge-network. Docker Documentation. 2020-03-19 [2020-03-20]. (原始內容存檔於2020-02-23) (英語).
- ^ BridgeNetworkConnections - Debian Wiki. wiki.debian.org. [2020-03-20]. (原始內容存檔於2020-03-20).
- ^ 自定义网桥 · Docker —— 从入门到实践. yeasy.gitbooks.io. [2020-03-20]. (原始內容存檔於2020-03-20).
- ^ vbox_host-only_setup. condor.depaul.edu. [2020-03-09]. (原始內容存檔於2019-07-25).
- ^ 39.0 39.1 39.2 Use overlay networks. Docker Documentation. 2020-03-19 [2020-03-20]. (原始內容存檔於2020-03-20) (英語).
- ^ 40.0 40.1 40.2 40.3 40.4 40.5 40.6 40.7 Manage data in Docker. Docker Documentation. 2020-03-20 [2020-03-21]. (原始內容存檔於2020-03-16) (英語).
- ^ 41.0 41.1 good-use-cases-for-bind-mounts. Docker Documentation. 2020-03-20 [2020-03-21]. (原始內容存檔於2020-03-16) (英語).
- ^ Docker中的数据管理 - 掘金. juejin.im. [2020-03-21]. (原始內容存檔於2020-03-21).
- ^ using-bind-mounts-or-volumes. Docker Documentation. 2020-03-20 [2020-03-21]. (原始內容存檔於2020-03-16) (英語).
- ^ 44.0 44.1 View logs for a container or service. Docker Documentation. 2020-04-17 [2020-04-17]. (原始內容存檔於2020-04-16) (英語).
- ^ get-an-instances-log-path. Docker Documentation. 2020-04-17 [2020-04-18]. (原始內容存檔於2020-04-15) (英語).
- ^ 46.0 46.1 kubernetes-sigs/kind, Kubernetes SIGs, 2020-05-04 [2020-05-04], (原始內容存檔於2022-02-11)
- ^ Introducing Docker 1.13. Docker Blog. 2017-01-19 [2020-03-05]. (原始內容存檔於2020-01-09) (美國英語).
- ^ 48.0 48.1 Docker Machine Overview. Docker Documentation. 2020-02-25 [2020-03-02]. (原始內容存檔於2020-03-02) (英語).
- ^ Docker(五):Docker 三剑客之 Docker Machine. 知乎專欄. [2020-03-02]. (原始內容存檔於2020-03-02) (中文).
- ^ Docker Machine release notes. Docker Documentation. 2020-02-25 [2020-03-02]. (原始內容存檔於2020-03-02) (英語).
- ^ Docker Toolbox overview. Docker Documentation. 2020-02-25 [2020-03-02]. (原始內容存檔於2020-04-15) (英語).
- ^ docker/toolbox. GitHub. [2020-03-02]. (原始內容存檔於2020-06-11) (英語).
- ^ 林妍溱. 下載超過2千萬次的Docker映像檔被爆含有挖礦軟體. ithome. 2021-03-31 [2021-03-31]. (原始內容存檔於2021-04-07).
外部連結
- 官方網站
- Source code repository(頁面存檔備份,存於互聯網檔案館)
- Multi-tenancy using Docker(頁面存檔備份,存於互聯網檔案館)
- Docker 101 Tutorial(頁面存檔備份,存於互聯網檔案館)
- libcontainer git repo(頁面存檔備份,存於互聯網檔案館)
- 如何在Linux下安裝Docker(頁面存檔備份,存於互聯網檔案館)
- Windows 容器(頁面存檔備份,存於互聯網檔案館) - 在 Windows 10 部署 Docker