?
This document uses PHP Chinese website manual Release
您可以在 Docker 容器中運(yùn)行 Linux 和 Windows 程序以及可執(zhí)行文件。Docker 平臺(tái)在 Linux 上(在x84-64,ARM 和許多其他CPU體系結(jié)構(gòu)上)和 Windows(x86-64)上本機(jī)運(yùn)行。
Docker Inc.構(gòu)建可讓您在Linux,Windows 和 MacOS上構(gòu)建和運(yùn)行容器的產(chǎn)品。
Docker 技術(shù)不是 LXC 的替代品?!癓XC”指的是 Linux 內(nèi)核(特別是命名空間和控制組)的功能,它們?cè)试S相互之間的沙盒過程并控制其資源分配。除了內(nèi)核特性的這個(gè)底層基礎(chǔ)之外,Docker 還提供了一個(gè)具有以下強(qiáng)大功能的高級(jí)工具:
跨機(jī)器的便攜式部署。Docker 定義了一種用于將應(yīng)用程序及其所有依賴項(xiàng)捆綁到一個(gè)稱為容器的單個(gè)對(duì)象中的格式。這個(gè)容器可以被轉(zhuǎn)移到任何支持 Docker 的機(jī)器上。容器可以在那里執(zhí)行,保證暴露給應(yīng)用程序的執(zhí)行環(huán)境在開發(fā),測(cè)試和生產(chǎn)中是相同的。LXC 實(shí)現(xiàn)流程沙盒,這是便攜式部署的重要先決條件,但對(duì)于便攜式部署來說不夠。如果您向我發(fā)送了一份安裝在自定義LXC配置中的應(yīng)用程序副本,那么它幾乎肯定不會(huì)像您的方式那樣在我的機(jī)器上運(yùn)行。您發(fā)送給我的應(yīng)用程序與您的計(jì)算機(jī)的特定配置有關(guān):網(wǎng)絡(luò),存儲(chǔ),日志記錄等。Docker 為這些機(jī)器特定的設(shè)置定義了一個(gè)抽象。
以應(yīng)用為中心。Docker 針對(duì)應(yīng)用程序的部署進(jìn)行了優(yōu)化,而不是機(jī)器。這反映在其 API,用戶界面,設(shè)計(jì)理念和文檔中。相比之下,lxc
輔助腳本將容器作為輕量級(jí)機(jī)器 - 基本上是啟動(dòng)速度更快,所需 RAM 更少的服務(wù)器。我們認(rèn)為容器不僅僅是這些。
自動(dòng)構(gòu)建。泊塢窗包括為開發(fā)工具來自動(dòng)組裝從他們的源代碼的容器,有超過應(yīng)用程序依賴的完全控制,編譯工具,包裝等,他們都可以自由使用make
,maven
,chef
,puppet
,salt,
Debian 軟件包,RPM 包,源碼包,或任意組合以上,無論機(jī)器的配置如何。
版本。Docker 包括用于跟蹤容器的連續(xù)版本,檢查版本之間的差異,提交新版本,回滾等的類似 git 的功能。歷史記錄還包括容器如何組裝以及由誰組裝,以便從生產(chǎn)服務(wù)器獲得完整的可追溯性一路回到上游開發(fā)商。Docker 也實(shí)現(xiàn)了增量上傳和下載,類似于git pull
,所以新版本的容器只需發(fā)送差異即可傳輸。
組件重用。任何容器都可以用作“父圖像”來創(chuàng)建更專業(yè)的組件。這可以手動(dòng)完成或作為自動(dòng)構(gòu)建的一部分。例如,您可以準(zhǔn)備理想的Python環(huán)境,并將其用作10個(gè)不同應(yīng)用程序的基礎(chǔ)。您理想的PostgreSQL設(shè)置可以重新用于您未來的所有項(xiàng)目。等等。
共享。Docker 可以訪問Docker Hub上的公共注冊(cè)表,該成千上萬的人上傳了有用的圖像:從 Redis,CouchDB,PostgreSQL 到 IRC 保護(hù)者到 Rails 應(yīng)用服務(wù)器到 Hadoop 的任何內(nèi)容,以便為各種 Linux發(fā)行版映射基礎(chǔ)。該注冊(cè)中心還包括由 Docker 團(tuán)隊(duì)維護(hù)的有用容器的官方“標(biāo)準(zhǔn)庫(kù)”。注冊(cè)表本身是開源的,因此任何人都可以部署他們自己的注冊(cè)表來存儲(chǔ)和傳輸私有容器,例如用于內(nèi)部服務(wù)器部署。
工具生態(tài)系統(tǒng) Docker 定義了一個(gè)用于自動(dòng)化和自定義容器的創(chuàng)建和部署的 API。有大量與 Docker 集成的工具來擴(kuò)展其功能。PaaS 式部署(Dokku,Deis,F(xiàn)lynn),多節(jié)點(diǎn)編排(Maestro,Salt,Mesos,Openstack Nova),管理儀表板(docker-ui,Openstack Horizon,Shipyard),配置管理(Chef,Puppet),持續(xù)集成(Jenkins,Strider,Travis)等。Docker正在迅速將自己建立為基于容器的工具的標(biāo)準(zhǔn)。Docker容器和VM之間有什么不同?有一個(gè)很棒的StackOverflow答案,顯示了差異。當(dāng)容器退出時(shí),我的數(shù)據(jù)是否丟失?完全沒有!應(yīng)用程序?qū)懭氪疟P的任何數(shù)據(jù)都將保留在其容器中,直到您明確刪除容器。即使容器暫停,容器的文件系統(tǒng)仍然存在。Docker 容器的擴(kuò)展程度如何?當(dāng)今世界上一些最大的服務(wù)器場(chǎng)是基于容器的。Google和Twitter等大型 Web 部署以及Heroku等平臺(tái)提供程序運(yùn)行在容器技術(shù)上,規(guī)模為數(shù)十萬甚至數(shù)百萬個(gè)容器。如何連接Docker容器?目前推薦的連接容器的方法是通過Docker網(wǎng)絡(luò)功能。您可以在這里看到如何使用Docker網(wǎng)絡(luò)的詳細(xì)信息。如何在Docker容器中運(yùn)行多個(gè)進(jìn)程?對(duì)于大多數(shù)使用情況,這種方法是不鼓勵(lì)的。為了最大限度地提高效率和隔離度,每個(gè)容器應(yīng)該解決一個(gè)特定的關(guān)注領(lǐng)域 但是,如果您需要在單個(gè)容器中運(yùn)行多個(gè)服務(wù),請(qǐng)參閱在容器中運(yùn)行多個(gè)服務(wù)。Docker運(yùn)行在哪個(gè)平臺(tái)上?Linux:
任何運(yùn)行 Linux 內(nèi)核版本3.10以上的發(fā)行版
大多數(shù)Linux發(fā)行版都提供了特定的說明,其中包括RHEL,Ubuntu,SuSE等等。
微軟Windows:
WindowsServer 2016
Windows 10
云:
AmazonEC 2
Google計(jì)算引擎
微軟Azure
Rackspace
您可以在此處了解項(xiàng)目的安全策略,并將安全問題報(bào)告給此郵箱。
請(qǐng)閱讀我們的博客文章,介紹DCO。
這是關(guān)于 docker-dev郵件列表討論的總結(jié)。
幾乎所有的程序都依賴于第三方庫(kù)。大多數(shù)情況下,他們會(huì)使用動(dòng)態(tài)鏈接和某種程序包依賴性,這樣當(dāng)多個(gè)程序需要相同的庫(kù)時(shí),它只安裝一次。
但是,有些程序會(huì)綁定第三方庫(kù),因?yàn)樗鼈円蕾囉谶@些庫(kù)的非常特定的版本。例如,Node.js捆綁了OpenSSL; MongoDB 捆綁了 V8和 Boost(等等)。
在創(chuàng)建 Docker 鏡像時(shí),最好使用捆綁的庫(kù),還是應(yīng)該構(gòu)建這些程序,以便它們使用默認(rèn)的系統(tǒng)庫(kù)?
關(guān)于系統(tǒng)庫(kù)的關(guān)鍵點(diǎn)不在于節(jié)省磁盤或內(nèi)存空間。這關(guān)乎安全。所有主要的發(fā)行版都認(rèn)真對(duì)待安全性,擁有專門的安全團(tuán)隊(duì),密切關(guān)注已發(fā)布的漏洞,并自行公布報(bào)告。(請(qǐng)查看Debian安全信息以獲取這些過程的示例。)但是,上游開發(fā)人員并不總是執(zhí)行類似的操作。
在設(shè)置 Docker 鏡像以從源代碼編譯程序之前,如果您想使用捆綁的庫(kù),您應(yīng)該檢查上游作者是否提供了一種方便的方式來公布安全漏洞,以及是否及時(shí)更新其捆綁的庫(kù)。如果他們不這樣做,那么您正在將自己(和圖像的用戶)暴露于安全漏洞。
同樣,在使用其他軟件包構(gòu)建之前,您應(yīng)該檢查提供這些軟件包的渠道是否實(shí)施了類似的安全最佳實(shí)踐。下載并安裝“all-in-one”.deb或.rpm聽起來很棒,除非你無法弄清楚它包含一個(gè)容易受Heartbleed bug 影響的OpenSSL庫(kù)。
DEBIAN_FRONTEND=noninteractive
在Dockerfiles中不鼓勵(lì)?在 Debian 和 Ubuntu 上構(gòu)建 Docker 鏡像時(shí),您可能會(huì)看到以下錯(cuò)誤:
unable to initialize frontend: Dialog
這些錯(cuò)誤不會(huì)停止生成映像,但會(huì)通知您安裝過程嘗試打開對(duì)話框,但無法執(zhí)行。通常,這些錯(cuò)誤是安全的,無法忽視。
有些人通過使用以下方法更改DEBIAN_FRONTEND
Dockerfile中的環(huán)境變量來規(guī)避這些錯(cuò)誤:
ENV DEBIAN_FRONTEND=noninteractive
這樣可以防止安裝程序在安裝期間打開對(duì)話框,從而停止錯(cuò)誤。
雖然這聽起來似乎是一個(gè)好主意,但它可能有副作用。該DEBIAN_FRONTEND
環(huán)境變量將被所有從圖像構(gòu)建的圖像和容器繼承,并有效地改變它們的行為。交互式安裝軟件時(shí),使用這些映像的用戶會(huì)遇到問題,因?yàn)榘惭b程序不會(huì)顯示任何對(duì)話框。
正因?yàn)槿绱?,而且由于設(shè)置DEBIAN_FRONTEND
來noninteractive
主要是“美容”的變化,我們不鼓勵(lì)改變它。
如果您確實(shí)需要更改其設(shè)置,請(qǐng)務(wù)必在之后將其更改回默認(rèn)值。
Connection reset by peer
在請(qǐng)求運(yùn)行在容器中的服務(wù)時(shí)會(huì)得到什么?通常,如果服務(wù)已經(jīng)綁定到本地主機(jī),則返回此消息。結(jié)果,從外部進(jìn)入容器的請(qǐng)求被丟棄。要更正此問題,請(qǐng)更改本地主機(jī)上的服務(wù)配置,以便該服務(wù)接受來自所有 IP 的請(qǐng)求。如果您不確定如何執(zhí)行此操作,請(qǐng)查看您的操作系統(tǒng)的文檔。
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
在使用碼頭機(jī)時(shí)會(huì)遇到問題?該錯(cuò)誤指出 docker 客戶端無法連接到虛擬機(jī)。這意味著下面的虛擬機(jī)docker-machine
沒有運(yùn)行,或者客戶機(jī)沒有正確指向虛擬機(jī)。
要驗(yàn)證碼頭機(jī)正在運(yùn)行,可以使用該docker-machine ls
命令并docker-machine start
在需要時(shí)啟動(dòng)它。
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORSdefault - virtualbox Stopped Unknown $ docker-machine start default
你必須告訴 Docker 與那臺(tái)機(jī)器交談。你可以用docker-machine env
命令來做到這一點(diǎn)。例如,
$ eval "$(docker-machine env default)"$ docker ps
你可以找到更多的答案:
Docker用戶郵件列表
Docker開發(fā)人員郵件列表
IRC, docker on freenode
GitHub
在Stackoverflow上提問
在Twitter上加入對(duì)話