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