Docker容器平臺技術使用指南_第1頁
Docker容器平臺技術使用指南_第2頁
Docker容器平臺技術使用指南_第3頁
Docker容器平臺技術使用指南_第4頁
Docker容器平臺技術使用指南_第5頁
已閱讀5頁,還剩76頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Docker容器平臺技術使用指南

目錄第一部分Docker容器技術基礎及其應用場景介紹

1.1Docker的基本概念

1.2為什么使用Docker

1.3Docker體系結構簡介

1.4Docker容器技術的應用場景

第二部分核心概念與安裝配置

2.1核心概念

2.2安裝Docker

2.2.1在RedHatEnterpriseLinux上安裝Docker

2.2.2在Windows上安裝Docker

2.2.3在CentOS環(huán)境下安裝Docker

第三部分使用Docker鏡像

3.1獲取鏡像

3.2查看鏡像信息

3.3搜尋鏡像

3.4刪除鏡像

3.5創(chuàng)建鏡像

3.6存出和載入鏡像

3.7上傳鏡像

第四部分操作Docker容器

4.1創(chuàng)建容器

4.2終止容器

4.3進入容器

4.4刪除容器

4.5導入和導出容器

4.6實現容器的網絡端口映射

第五部分Docker容器實現Web服務與應用5.1Docker容器實現Apache服務5.2Docker容器實現Nginx服務

5.3Docker容器實現Python應用

5.4Docker容器實現MySQL服務

第六部分Docker的運行監(jiān)控

6.1容器的監(jiān)控方案

6.2單臺主機上容器的監(jiān)控

6.3跨多臺主機上容器的監(jiān)控

6.4Kubernetes上容器的監(jiān)控

6.5Mesos的監(jiān)控方案

6.6性能采集工具的對比第一部分Docker容器技術基礎及其應用場景介紹1.1Docker的基本概念Docker容器是資源分割和調度的基本單位,封裝整個服務的運行時環(huán)境,用于構建、發(fā)布和運行分布式應用的一個框架。它是一個跨平臺、可移植并且簡單易用的容器解決方案。Docker的源代碼托管在GitHub上,基于Go語言開發(fā)并遵從Apache2.0協(xié)議。Docker容器可以快速自動化地部署應用,并通過操作系統(tǒng)內核技術(namespaces、cgroups等)為容器提供資源隔離與安全保障。Docker作為輕量級的虛擬化方式,實現了PaaS平臺的高效部署、運行和維護。1.2為什么使用Docker(1)

、持續(xù)部署與測試Docker消除了線上線下的環(huán)境差異,保證了應用生命周期的環(huán)境一致性和標準化。開發(fā)人員使用鏡像實現標準開發(fā)環(huán)境的構建,開發(fā)完成后通過封裝著完整環(huán)境和應用的鏡像進行遷移,由此,測試和運維人員可以直接部署軟件鏡像來進行測試和發(fā)布,大大簡化了持續(xù)集成、測試和發(fā)布的過程。Docker是革命性的,它重新定義了軟件開發(fā)、測試、交付和部署的流程。我們交付的東西不再只是代碼、配置文件、數據庫定義等,而是整個應用服務及其運行環(huán)境。(2)

、優(yōu)異的跨平臺性Docker在原有Linux容器的基礎上進行大膽革新,為容器設定了一整套標準化的配置方法,將應用及其依賴的運行環(huán)境打包成鏡像。Docker是可移植(或者說跨平臺)的,可以在各種主流操作系統(tǒng)上使用。Java可以做到“一次編譯,到處運行”,而Docker可以“構建一次,在各平臺上運行”(Buildonce,runanywhere)。越來越多的云平臺都支持Docker,用戶再也無需擔心受到云平臺的捆綁,同時也讓應用多平臺混合部署成為可能。(3)

、高資源利用率與隔離Docker容器沒有管理程序的額外開銷,與底層共享操作系統(tǒng),性能更加優(yōu)良,系統(tǒng)負載更低,在同等條件下可以運行更多的應用實例,可以更充分地利用系統(tǒng)資源。同時,Docker擁有不錯的資源隔離與限制能力,可以精確地對應用分配CPU、內存等資源,保證了應用間不會相互影響。Docker是輕量級虛擬化技術。與傳統(tǒng)的VM相比,它更輕量,啟動速度更快,單臺硬件上可以同時跑成百上千個容器,所以非常適合在業(yè)務高峰期通過啟動大量容器進行橫向擴展。Docker容器技術的直接虛擬化不僅在技術方面使CPU利用率得到顯著提升,還因80:20法則可在業(yè)務上更大程度發(fā)揮CPU利用率,真正體現了虛擬化精髓。(4)

、環(huán)境標準化和版本控制可以使用Git等工具對Docker鏡像進行版本控制,相比基于代碼的版本控制來說,能夠對整個應用運行環(huán)境實現版本控制,一旦出現故障可以快速回滾。相比以前的虛擬機鏡像,Docker壓縮和備份速度更快,鏡像啟動也像啟動一個普通進程一樣快速。(5)

、應用鏡像倉庫Docker官方構建了一個鏡像倉庫,組織和管理形式類似于GitHub,其上已累積了成千上萬的鏡像。因為Docker的跨平臺適配性,相當于為用戶提供了一個非常有用的應用商店,所有人都可以自由地下載微服務組件,這為開發(fā)者提供了巨大便利。1.3Docker體系結構簡介Docker是一個客戶/服務器(CIient/Server,CS)架構(見上圖)。Docker客戶端是遠程控制器,可通過TCPREST向DockerHost發(fā)送請求,包括創(chuàng)建容器、運行容器、保存容器、刪除容器等請求。Docker服務端的Daemon對客戶端的請求進行相應的管理,隨后通過driver轉發(fā)至容器中的libcontainer執(zhí)行環(huán)境。libcontainer提供與不同Linux內核隔離的接口,類似命名空間及控制組。這種架構允許多個容器在共享同一個Linux內核的情況下完全隔離地運行。1.4Docker容器技術的應用場景一般認為Docker技術有以下8個主要的應用場景,參見下圖:(1)

、應用場景1:簡化配置這是Docker公司宣傳的Docker的主要使用場景。Docker能將運行環(huán)境和配置放在代碼中然后部署,同一個Docker的配置可以在不同的環(huán)境中使用,這樣就降低了硬件要求和應用環(huán)境之間耦合度。(2)

、應用場景2:代碼流水線(CodePipeline)管理代碼從開發(fā)者的機器到最終在生產環(huán)境上的部署,需要經過很多的中間環(huán)境。而每一個中間環(huán)境都有微小的差別,Docker給應用提供了一個從開發(fā)到上線均一致的環(huán)境,讓代碼的流水線變得簡單不少。(3)

、應用場景3:提高開發(fā)效率Docker能提升開發(fā)者的開發(fā)效率。不同的開發(fā)環(huán)境中,Docker都可以把兩件事做好,一是可以在開發(fā)環(huán)境、生產環(huán)境之間直接遷移,二是可以讓我們快速搭建開發(fā)環(huán)境。開發(fā)環(huán)境的機器通常內存比較小,之前使用虛擬的時候,我們經常需要為開發(fā)環(huán)境的機器加內存,而現在Docker可以輕易的讓幾十個服務在Docker中跑起來。(4)

、應用場景4:隔離應用有很多種原因會讓我們選擇在一個機器上運行不同的應用,Docker非常適合在較低的成本下實現多種應用的隔離。(5)

、應用場景5:整合服務器Docker隔離應用的能力使得Docker可以整合多個服務器以降低成本。由于沒有操作系統(tǒng)的內存占用,以及能在多個實例之間共享沒有使用的內存,Docker可以比虛擬機提供更好的服務器整合解決方案。通常數據中心的服務器資源利用率只有30%,通過使用Docker并進行有效的資源分配可以大幅提高服務器資源的利用率。(6)

、應用場景6:調試能力Docker提供了很多的工具,包括可以為容器設置檢查點、設置版本和查看兩個容器之間的差別,這些特性可以幫助調試Bug。(7)

、應用場景7:多租戶環(huán)境另外一個Docker的使用場景是在多租戶的應用中,它可以避免關鍵應用的重寫。我們一個特別的關于這個場景的例子是為物聯(lián)網的應用開發(fā)一個快速、易用的多租戶環(huán)境。這種多租戶的基本代碼非常復雜,很難處理,重新規(guī)劃這樣一個應用不但消耗時間,也浪費金錢。使用Docker,可以為每一個租戶的應用層的多個實例創(chuàng)建隔離的環(huán)境,這不僅簡單而且成本低廉,當然這一切得益于Docker環(huán)境的啟動速度和其高效的diff命令。(8)

、應用場景8:快速部署在虛擬機之前,購入部署新的硬件資源需要消耗幾天的時間。虛擬化技術(Virtualization)將這個時間縮短到了分鐘級別。而Docker通過為進程僅僅創(chuàng)建一個容器而無需啟動一個操作系統(tǒng),再次將這個過程縮短到了秒級。這正是Google和Facebook都看重的特性。我們可以創(chuàng)建銷毀Docker容器而無需擔心重新啟動帶來的開銷。第二部分核心概念與安裝配置本部分首先介紹Docker的三大核心概念。鏡像(Image)容器(Container)倉庫(Repository)只有理解了這三個核心概念,才能順利地理解Docker容器的整個生命周期。隨后將介紹如何在常見的操作系統(tǒng)平臺上安裝Docker,包括RedhatLinux、Windows、Centos等主流操作系統(tǒng)平臺。2.1核心概念Docker的大部分操作都圍繞著它的三大核心概念——鏡像、容器和倉庫而展開。因此,準確把握這三大核心概念對于掌握Docker技術尤為重要。1.Docker

鏡像Docker鏡像類似于虛擬機鏡像,可以將它理解為一個只讀的模板。例如,一個鏡像可以包含一個基本的操作系統(tǒng)環(huán)境,里面僅安裝了Apache應用程序(或用戶需要的其他軟件)??梢园阉Q為一個Apache鏡像。鏡像是創(chuàng)建Docker容器的基礎。通過版本管理和增量的文件系統(tǒng),Docker提供了一套十分簡單的機制來創(chuàng)建和更新現有的鏡像,用戶甚至可以從網上下載一個已經做好的應用鏡像,并直接使用。

2.Docker容器Docker容器類似于一個輕量級的沙箱,Docker利用容器來運行和隔離應用。容器是從鏡像創(chuàng)建的應用運行實例??梢詫⑵鋯印㈤_始、停止、刪除,而這些容器都是彼此相互隔離的、互不可見的。可以把容器看做是一個簡易版的Linux系統(tǒng)環(huán)境(包括root用戶權限、進程空間、用戶空間和網絡空間等)以及運行在其中的應用程序打包而成的盒子。3.Docker

倉庫Docker倉庫類似于代碼倉庫,它是Docker集中存放鏡像文件的場所。有時候會看到有資料將Docker倉庫和倉庫注冊服務器(Registry)混為一談,并不嚴格區(qū)分。實際上,倉庫注冊服務器是存放倉庫的地方,其上往往存放著多個倉庫。每個倉庫集中存放某一類鏡像,往往包括多個鏡像文件,通過不同的標簽(tag)來進行區(qū)分。例如存放ubuntu操作系統(tǒng)鏡像的倉庫稱為ubuntu倉庫,其中可能包括14.04、12.04等不同版本的鏡像。根據所存儲的鏡像公開分享與否,Docker倉庫可以分為公開倉庫(Public)和私有倉庫(Private)兩種形式。目前,最大的公開倉庫是官方提供的DockerHub,其中存放了數量龐大的鏡像供用戶下載。國內不少云服務提供商(如時速云、阿里云等)也提供了倉庫的本地源,可以提供穩(wěn)定的國內訪問。當然,用戶如果不希望公開分享自己的鏡像文件,Docker也支持用戶在本地網絡內創(chuàng)建一個只能自己訪問的私有倉庫。當用戶創(chuàng)建了自己的鏡像之后就可以使用push命令將它上傳到指定的公有或者私有倉庫。這樣用戶下次在另外一臺機器上使用該鏡像時,只需要將其從倉庫上pull下來就可以了??梢钥闯觯珼ocker利用倉庫管理鏡像的設計理念與Git非常相似,實際上在理念設計上借鑒了Git的很多優(yōu)秀思想。2.2安裝DockerDocker在主流的操作系統(tǒng)和云平臺上都可以使用,包括Linux操作系統(tǒng)(如ubuntu、Debian、CentOS、Redhat等)、MacOS操作系統(tǒng)和Windows操作系統(tǒng),以及AWS等云平臺。用戶可以訪問Docker官網的GetDocker(/products/overview)頁面,查看獲取Docker的方式,以及Docker支持的平臺類型,如圖2-2所示。在GetDocker頁面,我們可以看到目前Docker支持DockerPlatform、DockerHub、DockerCloud和DockerDataCenter。DockerPlatform:支持在桌面系統(tǒng)或云平臺安裝Docker;DockerHub:官方提供的云托管服務,可以提供公有或私有的鏡像倉庫;DockerCloud:官方提供的容器云服務,可以完成容器的部署與管理,可以完整地支持容器化項目,還有CI、CD功能;DockerDataCenter:提供企業(yè)級的簡單安全彈性的容器集群編排和管理。推薦盡量使用Linux操作系統(tǒng)來運行Docker,因為目前Linux操作系統(tǒng)對Docker的支持是原生的,使用體驗最好。2.2.1

在RedHatEnterpriseLinux

上安裝Docker以下是支持Docker的RHEL版本:RedHatEnterpriseLinux7(64-bit)RedHatEnterpriseLinux6.5(64-bit)或更高版本如果你的RHEL運行的是發(fā)行版內核。那就僅支持通過extras渠道或者EPEL包來安裝Docker。如果我們打算在非發(fā)行版本的內核上運行Docker,內核的改動可能會導致出錯1.RedHatEnterpriseLinux7

安裝DockerRedHatEnterpriseLinux7(64位)自帶Docker。我們可以在發(fā)行日志中找到概述和指南。Docker包含在extras鏡像源中,使用下面的方法可以安裝Docker:啟用extras鏡像源:$sudosubscription-managerrepos--enable=rhel-7-server-extras-rpms安裝Docker:$sudoyuminstalldocker2.RedHatEnterpriseLinux6.5

安裝Docker需要在64位的RHEL6.5或更高的版本上來安裝Docker,Docker工作需要特定的內核補丁,因此RHEL的內核版本應為2.6.32-431或者更高。Docker已經包含在RHEL的EPEL源中。該源是ExtraPackagesforEnterpriseLinux(EPEL)的一個額外包,社區(qū)中正在努力創(chuàng)建和維護相關鏡像。首先,你需要安裝EPEL鏡像源,在EPEL中已經提供了docker-io包。下一步,我們將要在我們的主機中安裝Docker,也就是docker-io包:$sudoyum-yinstalldocker-io更新docker-io包:$sudoyum-yupdatedocker-io現在Docker已經安裝好了,我們來啟動docker進程:$sudoservicedockerstart設置開機啟動:$sudochkconfigdockeron現在,讓我們確認Docker是否正常工作:$sudodockerrun-i-tfedora/bin/bash現在Docker已經安裝好了,讓我們來啟動Docker進程$sudoservicedockerstart如果我們想要開機啟動Docker,我們需要執(zhí)行如下的命令:$sudochkconfigdockeron現在測試一下是否正常工作:$sudodockerrun-i-tfedora/bin/bash注意:如果運行的時候提示一個Cannotstartcontainer的錯誤,錯誤中提到了SELINUX或者權限不足。我們需要更新SELINUX規(guī)則??梢允褂胹udoyumupgradeselinux-policy然后重啟。2.2.2

在Windows

上安裝Docker1.安裝1)

、下載最新版本的DockerforWindowsInstaller2)

、運行安裝文件,它將會安裝virtualbox、MSYS-gitboot2dockerLinux鏡像和Boot2Docker的管理工具。3)、從桌面上或者ProgramFiles中找到Boot2DockerforWindows,運行Boot2DockerStart腳本。這個腳本會要求你輸入ssh密鑰密碼-可以簡單點(但是起碼看起來比較安全),然后只需要按[Enter]按鈕即可。4)、Boot2DockerStart將啟動一個Unixshell來配置和管理運行在虛擬主機中的Docker,運行dockerversion來查看它是否正常工作。2.運行Docker注意:如果使用的是一個遠程的Docker進程,像Boot2docker,就不需要像前邊的文檔實例中那樣在輸入Docker命令之前輸入sudo。Boot2dockerstart將會自動啟動一個shell命令框并配置好環(huán)境變量,以便我們可以馬上使用Docker:讓我們嘗試運行hello-world例子。運行:$dockerrunhello-world這將會下載一個非常小的hello-world鏡像,并且打印出HellofromDocker的信息。3.使用Windows的命令行((cmd.exe)

來管理運行Docker啟動一個Windows命令行(cmd.exe),運行Boot2docker命令,這需要WindowsPATH環(huán)境變量中包含了ssh.exe。因此我們需要將安裝的Git的bin目錄(其中包含了ssh.exe)配置到我們的%PATH%環(huán)境變量中,運行如下命令:setPATH=%PATH%;"c:\ProgramFiles(x86)\Git\bin"現在,我們可以運行boot2dockerstart命令來啟動Boot2docker虛擬機。(如果有虛擬主機不存在的錯誤提示,需要運行boot2dockerinit命令)。復制上邊的指令到cmd.exe來設置windows控制臺的環(huán)境變量,然后就可以運行docker命令了,譬如dockerps:4.PowerShell中使用

Docker啟動PowerShell,需要將ssh.exe添加到PATH中。$Env:Path="${Env:Path};c:\ProgramFiles(x86)\Git\bin"之后,運行boot2dockerstart命令行,它會打印出PowerShell命令,這些命令是用來設置環(huán)境變量來連接運行在虛擬機中Docker的。運行這些命令,然后就可以運行docker命令了,譬如dockerps:提示:可以使用boot2dockershellinit|Invoke-Expression來設置環(huán)境變量來代替復制粘貼Powershell命令。2.2.3

在CentOS

環(huán)境下安裝DockerDocker支持以下的CentOS版本:CentOS7(64-bit)CentOS6.5(64-bit)或更高的版本前提條件Docker運行在CentOS7上,要求系統(tǒng)為64位、系統(tǒng)內核版本為3.10以上。Docker運行在CentOS-6.5或更高的版本的CentOS上,要求系統(tǒng)為64位、系統(tǒng)內核版本為2.6.32-431或者更高版本。使用yum安裝(CentOS7下)Docker要求CentOS系統(tǒng)的內核版本高于3.10,查看本頁面的前提條件來驗證你的CentOS版本是否支持Docker。通過

uname--r命令查看你當前的內核版本uname-r3.10.0-327.el7.x86_64安裝DockerDocker軟件包和依賴包已經包含在默認的CentOS-Extras軟件源里,安裝命令如下:yum-yinstalldocker安裝完成。啟動Docker后臺服務servicedockerstart測試運行hello-worlddockerrunhello-world由于本地沒有hello-world這個鏡像,所以會下載一個hello-world的鏡像,并在容器內運行。使用腳本安裝Docker1、使用

sudo

root

權限登錄Centos。2、確保yum包更新到最新。$sudoyumupdate3、執(zhí)行Docker安裝腳本。$curl-fsSL/|sh執(zhí)行這個腳本會添加

docker.repo

源并安裝Docker。4、啟動Docker進程。$sudoservicedockerstart5、驗證

docker

是否安裝成功并在容器中執(zhí)行一個測試的鏡像。$sudodockerrunhello-world到此,docker在CentOS系統(tǒng)的安裝完成。第三部分使用Docker鏡像鏡像(image)是Docker三大核心概念中最為重要的,自Docker誕生之日起“鏡像”就是相關社區(qū)最為熱門的關鍵詞。Docker運行容器前需要本地存在對應的鏡像,如果鏡像沒保存在本地,Docker會嘗試先從默認鏡像倉庫下載(默認使用:DockerHub公共注冊服務器中的倉庫),用戶也可以通過配置,使用自定義的鏡像倉庫。本部分將介紹圍繞鏡像這一核心概念的具體操作,包括如何使用pull命令從DockerHub倉庫中下載鏡像到本地,如何查看本地已有的鏡像信息和管理鏡像標簽,如何在遠端倉庫使用search命令進行搜索和過濾,如何刪除鏡像標簽和鏡像文件,如何創(chuàng)建用戶定制的鏡像并且保存為外部文件。最后,還介紹如何往DockerHub倉庫中推送自己的鏡像。3.1獲取鏡像鏡像是運行容器的前提,官方的DockerHub網站已經提供了數十萬個鏡像供大家開放下載??梢允褂胐ockerpull命令直接從DockerHub鏡像源來下載鏡像。該命令的格式為dockerpullNAME[:TAG]。其中,NAME是鏡像倉庫的名稱(用來區(qū)分鏡像),TAG是鏡像的標簽(往往用來表示版本信息)。通常情況下,描述一個鏡像需要包括‘名稱+標簽’信息。例如,獲取一個Ubuntu14.04系統(tǒng)的基礎鏡像可以使用如下的命令:對于Docker鏡像來說,如果不顯式指定TAG,則默認會選擇latest標簽,這會下載倉庫中最新版本的鏡像。下面的例子將從DockerHub的Ubuntu倉庫下載一個最新的Ubuntu操作系統(tǒng)的鏡像。該命令實際上下載的就是ubuntu:latest鏡像。下載過程中可以看出,鏡像文件一般由若干層(layer)組成,6c953ac5d795這樣的串是層的唯一id(實際上完整的id包括256比特,由64個十六進制字符組成)。使用dockerpull命令下載時會獲取并輸出鏡像的各層信息。當不同的鏡像包括相同的層時,本地僅存儲層的一份內容,減小了需要的存儲空問。我們可能會想到,在使用不同的鏡像倉庫服務器的情況下,可能會出現按鏡像重名的情況。嚴格地講,鏡像的倉庫名稱中還應該添加倉庫地址(即registry,注冊服務器)作為前綴,只是我們默認使用的是DockerHub服務,該前綴可以忽略。例如,dockerpullUbuntu:14.04命令相當于dockerpull/Ubuntu:14.04命令,即從默認的注冊服務器DockerHubRegistry中的ubuntu倉庫來下載標記為14.04的鏡像。如果從非官方的倉庫下載,則需要在倉庫名稱前指定完整的倉庫地址。例如從網易蜂巢的鏡像源來下載ubuntu:14.04鏡像,可以使用如下命令,此時下載的鏡像名稱為/public/Ubuntu:14.04:$dockerpull/public/Ubuntu:14.04pull子命令支持的選項主要包括:-a,--all-tags=true|false:是否獲取倉庫中的所有鏡像,默認為否。下載鏡像到本地后,即可隨時使用該鏡像了,例如利用該鏡像創(chuàng)建一個容器,在其中運行bash應用,執(zhí)行pinglocalhost命令:3.2查看鏡像信息1.使用images命令列出鏡像使用dockerimages命令可以列出本地主機上已有鏡像的基本信息。例如,下面的命令列出了上一小節(jié)中下載的鏡像信息:在列出的信息中,可以看到以下幾個字段信息。來自于哪個倉庫,比如ubuntu倉庫用來保存ubuntu系列的基礎鏡像;鏡像的標簽信息,比如14.04、latest用來標注不同的版本信息。標簽只是標記,并不能標識鏡像內容;鏡像的ID(唯一標識鏡像),如ubuntu:latest和ubuntu:16.04鏡像的ID都是2fa927b5cdd3,說明它們目前實際上指向同一個鏡像;創(chuàng)建時間,說明鏡像最后的更新時間;鏡像大小,優(yōu)秀的鏡像往往體積都較小。其中鏡像的ID信息十分重要,它唯一標識了鏡像。在使用鏡像ID的時候,一般可以使用該ID的前若干個字符組成的可區(qū)分串來替代完整的ID。TAG信息用來標記來自同一個倉庫的不同鏡像。例如ubunm倉庫中有多個鏡像,通過TAG信息來區(qū)分發(fā)行版本,包括10.04、12.04、12.10、13.04、14.04、16.04等標簽:鏡像大小信息只是表示該鏡像的邏輯體積大小,實際上由于相同的鏡像層本地只會存儲一份,物理上占用的存儲空間會小于各鏡像的邏輯體積之和。images子命令主要支持如下選項,用戶可以自行進行嘗試。-a,--all=true|false:列出所有的鏡像文件(包括臨時文件),默認為否;--digests=trueIfalse:列出鏡像的數字摘要值,默認為否;-f,---filter=[]:過濾列出的鏡像,如dangling=true只顯示沒有被使用的鏡像;也可指定帶有特定標注的鏡像等;--format="TEMPLATE":控制輸出格式,如.ID代表ID信息,Repository代表倉庫信息等;--no-trunc=truelfalse:對輸出結果中太長的部分是否進行截斷,如鏡像的ID信息,默認為是;-q,--quiet=truelfalse:僅輸出ID信息,默認為否。其中,對輸出結果進行控制的選項如-f,--filter=[]、--no-trunc=true|false、-q,--quiet=trueIfalse等,大部分子命令都支持。更多子命令選項還可以通過mandocker-images來查看。2.使用tag

命令添加鏡像標簽為了方便在后續(xù)工作中使用特定鏡像,還可以使用dockertag命令來為本地鏡像任意添加新的標簽。例如添加一個新的myubuntu:latest鏡像標簽:$dockertagubuntu:latestmyubuntu:latest再次使用dockerimages列出本地主機上鏡像信息,可以看到多了一個擁有myubuntu:latest標簽的鏡像。之后,用戶就可以直接使用myubuntu:latest來表示這個鏡像了。我們可能注意到,這些myubuntu:latest鏡像的ID跟ubuntu:latest完全一致。它們實際上指向同一個鏡像文件,只是別名不同而已。dockertag命令添加的標簽實際上起到了類似鏈接的作用。3.使用inspect命令查看詳細信息使用dockerinspect命令可以獲取該鏡像的詳細信息,包括制作者、適應架構、各層的數字摘要等,可輸入以下命令:$dockerinspectubuntu:14.04返回的是一個JSON格式的消息,如果我們只要其中一項內容時,可以使用參數-f來指定,例如,獲取鏡像的Architecture:$dockerinspect-f{{".Architecture"}}amd644.使用history命令查看鏡像歷史既然鏡像文件由多個層組成,那么怎么知道各個層的內容具體是什么呢?這時候可以使用history子命令,該命令將列出各層的創(chuàng)建信息。例如,查看ubuntu:14.04鏡像的創(chuàng)建過程,可以使用如下命令:$dockerhistoryubuntu:14.043.3搜尋鏡像使用dockersearch命令可以搜索遠端倉庫中共享的鏡像,默認搜索官方倉庫中的鏡像。用法為dockersearchTERM,支持的參數主要包括:--automated=trueIfalse:僅顯示自動創(chuàng)建的鏡像,默認為否;--no-trunc=true|false:輸出信息不截斷顯示,默認為否;-s,--stars=X:指定僅顯示評價為指定星級以上的鏡像,默認為0,即輸出所有鏡像。例如,搜索所有自動創(chuàng)建的評價為3+的帶nginx關鍵字的鏡像,如下所示:$dockersearch----automated-s3nginx可以看到返回了很多包含關鍵字的鏡像,其中包括鏡像名字、描述、星級(表示該鏡像的受歡迎程度)、是否官方創(chuàng)建、是否自動創(chuàng)建等。默認的輸出結果將按照星級評價進行排序。3.4刪除鏡像1.使用標簽刪除鏡像使用dockerrmi命令可以刪除鏡像,命令格式為dockerrmiIMAGE[IMAGE…],其中IMAGE可以為標簽或ID。例如,要刪除掉myubuntu:latest鏡像,可以使用如下命令:$dockerrmimyubuntu:latestUntagged:myubuntu:latest我們可能會擔心,本地的ubuntu:latest鏡像是否會受此命令的影響。無需擔心,當同一個鏡像擁有多個標簽的時候,dockerrmi命令只是刪除該鏡像多個標簽中的指定標簽而已,并不影響鏡像文件。因此上述操作相當于只是刪除了鏡像2fa927b5cdd3的一個標簽而已。為保險起見,再次查看本地的鏡像,發(fā)現ubuntu:latest鏡像(準確地說是2fa927b5cdd3鏡像)仍然存在。但當鏡像只剩下一個標簽的時候就要小心了,此時再使用dockerrmi命令會徹底刪除鏡像。例如刪除標簽為ubuntu:14.04的鏡像,由于該鏡像沒有額外的標簽指向它,執(zhí)行dockerrmi命令,它會刪除這個鏡像文件的所有層:$dockerrmiubuntu:14.042.使用鏡像ID刪除鏡像當使用dockerrmi命令,并且后面跟上鏡像的ID(也可以是能進行區(qū)分的部分ID串前綴)時,會先嘗試刪除所有指向該鏡像的標簽,然后刪除該鏡像文件本身。注意,當有該鏡像創(chuàng)建的容器存在時,鏡像文件默認是無法被刪除的,例如,先利用ubuntu:14.04鏡像創(chuàng)建一個簡單的容器來輸出一段話:$dockerrunUbuntu:14.04echo'hello!Iamhere!'hello!Iamhere!使用dockerps-a命令可以看到本機上存在的所有容器:$dockerps-a可以看到,后臺存在一個退出狀態(tài)的容器,是剛基于ubuntu:14.04鏡像創(chuàng)建的。試圖刪除該鏡像,Docker會提示有容器正在運行,無法刪除:$dockerrmiUbuntu:14.04Errorresponsefromdaemon:conflict:unabletoremoverepositoryreference"Ubuntu:14.04"(mustforce)一containera21c0840213eisusingit'sreferencedimage8f1bd21bd25c如果要想強行刪除鏡像,可以使用-f參數。$dockerrmi-fubuntu:14.04注意,通常并不推薦使用-f參數來強制刪除一個存在容器依賴的鏡像。正確的做法是,先刪除依賴該鏡像的所有容器,再來刪除鏡像。首先刪除容器a21c0840213e:$dockerrma21c0840213e再使用ID來刪除鏡像,此時會正常打印出刪除的各層信息:$dockerrmi8f1bd21bd25c3.5創(chuàng)建鏡像創(chuàng)建鏡像的方法主要有三種:基于已有鏡像的容器創(chuàng)建、基于本地模板導入、基于Dockerfile創(chuàng)建。1.基于已有鏡像的容器創(chuàng)建該方法主要是使用dockercommit命令。命令格式為dockercommit[OPTIONS]CONTAINER[REPOSITORY[:TAG]],主要選項包括:-a,--author="":作者信息;-c,--change=[]:提交的時候執(zhí)行Dockerfile指令,包括CMD|ENTRYPOINT|ENVlEXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR等;-m,--message="":提交消息;--p,--pause=true:提交時暫停容器運行。下面將演示如何使用該命令創(chuàng)建一個新鏡像。首先,啟動一個鏡像,并在其中進行修改操作,例如創(chuàng)建一個test文件,之后退出:$dockerrun-itUbuntu:14.04/bin/bashroot@a925cb40b3f0:/#touchtestroot@a925Cb40b3f0:/#exit記住容器的ID為a925cb40b3f0。此時該容器跟原ubuntu:14.04鏡像相比,已經發(fā)生了改變,可以使用dockercommit命令來提交為一個新的鏡像。提交時可以使用ID或名稱來指定容器:$dockercommit-m"Addedanewfile"-a"DockerNewbee"a925cb40b3f0test:0.19e9C814023bcffc3e67e892a235afe61b02f66a947d2747f724bd317dda02f27順利的話,會返回新創(chuàng)建的鏡像的ID信息,例如9e9C814023bcffc3e67e892a235afe61b02f66a947d2747f724bd317dda02f27。此時查看本地鏡像列表,會發(fā)現新創(chuàng)建的鏡像已經存在了。$dockerimagesREPOSITORY

TAG

IMAGEID

CREATED

VIRTUALSIZEtest

0.1

9e9c814023bc

4secondsago

188MB2.基于本地模板導入用戶也可以直接從一個操作系統(tǒng)模板文件導入一個鏡像,主要使用dockerimport命令。命令格式為dockerimport[OPTIONS]file|URL|-[REPOSITORY[:TAG]]。要直接導入一個鏡像,可以使用OpenVZ提供的模板來創(chuàng)建,或者用其他已導出的鏡像模板來創(chuàng)建。OPENVZ模板的下載地址為http:///Download/templates/precreated。例如,下載了ubuntu-14.04的模板壓縮包,之后使用以下命令導入:$catUbuntu-14.04-x86_64-minimal.tar.gz|dockerimport-ubuntu:14.04然后查看新導入的鏡像,會發(fā)現它已經在本地存在了:$dockerimagesREPOSITORY

TAG

IMAGEID

CREATED

VIRTUALSIZEubuntu

14.04

05ac7cob9383

17secondsago

215.5MB3.6存出和載入鏡像用戶可以使用dockersave和dockerload命令來存出和載入鏡像。1.存出鏡像如果要導出鏡像到本地文件,可以使用dockersave命令。例如,導出本地的ubuntu:14.04鏡像為文件ubuntu_14.04.tar,如下所示:之后,用戶就可以通過復制ubuntu_14.04.tar文件將該鏡像分享給他人。2.載入鏡像可以使用dockerload將導出的tar文件再導入到本地鏡像庫,例如從文件ubuntu_14.04.tar導入鏡像到本地鏡像列表,如下所示:$dockerload--inputubuntu_14.04.tar或:$dockerload<ubuntu_14.04.tar這將導入鏡像及其相關的元數據信息(包括標簽等)。導入成功后,可以使用dockerimages命令進行查看。3.7上傳鏡像可以使用dockerpush命令上傳鏡像到倉庫,默認上傳到DockerHub官方倉庫(需要登錄)。命令格式為:dockerpushNAME[:TAG]l[REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]用戶在DockerHub網站注冊后可以上傳自制的鏡像。例如用戶user上傳本地的test:latest鏡像.可以先添加新的標簽user/test:latest,然后用dockerpush命令上傳鏡像:$dockertagtest:latestuser/test:latest$dockerpushuser/test:latest第一次上傳時,會提示輸入登錄信息或進行注冊。第四部分操作Docker容器容器是Docker的另一個核心概念。簡單來說,容器是鏡像的一個運行實例。所不同的是,鏡像是靜態(tài)的只讀文件,而容器帶有運行時需要的可寫文件層。如果認為虛擬機是模擬運行的一整套操作系統(tǒng)(包括內核、應用運行態(tài)環(huán)境和其他系統(tǒng)環(huán)境)和跑在上面的應用,那么Docker容器就是獨立運行的一個(或一組)應用,以及它們必需的運行環(huán)境。容器是直接提供應用服務的組件,也是Docker實現快速啟停和高效服務性能的基礎。在生產環(huán)境中,因為容器自身的輕量級特性,我們推薦使用容器時在一組容器前引入HA(HighAvailability,高可靠性)機制。例如使用HAProxy工具來代理容器訪問,這樣在容器出現故障時,可以快速切換到功能正常的容器。此外,建議通過指定合適的容器重啟策略,來自動重啟退出的容器。本部分具體介紹圍繞容器的重要操作,包括創(chuàng)建一個容器、啟動容器、終止一個容器、進入容器內執(zhí)行操作、刪除容器和通過導入導出容器來實現容器遷移等。4.1創(chuàng)建容器從現在開始,可以忘掉虛擬機。對容器進行操作就跟直接操作應用一樣簡單、快速。Docker容器實在太輕量級了,用戶可以隨時創(chuàng)建或刪除容器。1.新建容器可以使用dockercreate命令新建一個容器,例如:使用dockercreate命令新建的容器處于停止狀態(tài),可以使用dockerstart命令來啟動它。create命令和后續(xù)的run命令支持的選項都十分復雜,與容器運行模式相關、與容器和環(huán)境配置相關、與容器資源限制和安全保護相關。2.啟動容器使用dockerstart命令來啟動一個已經創(chuàng)建的容器,例如啟動剛創(chuàng)建的ubuntu容器:$dockerstartafaf此時,通過dockerps命令可以查看一個運行中的容器:$dockerps3.新建并啟動容器除了創(chuàng)建容器后通過start命令來啟動,也可以直接新建并啟動容器。所需要的命令主要為dockerrun,等價于先執(zhí)行dockercreate命令,再執(zhí)行dockerstart命令。例如,下面的命令輸出一個"HelloWorld",之后容器自動終止:$dockerrunubuntu/bin/echo'Helloworld'Helloworld這跟在本地直接執(zhí)行/bin/echo'Helloworld'幾乎感覺不出任何區(qū)別。當利用dockerrun來創(chuàng)建并啟動容器時,Docker在后臺運行的標準操作包括:檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載;利用鏡像創(chuàng)建一個容器,并啟動該容器;分配一個文件系統(tǒng)給容器,并在只讀的鏡像層外面掛載一層可讀寫層;從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中;從網橋的地址池配置一個IP地址給容器;執(zhí)行用戶指定的應用程序;執(zhí)行完畢后容器被自動終止。下面的命令啟動一個bash終端,允許用戶進行交互:$dockerrun-itUbuntu:14.04/bin/bashroot@af8bae53bdd3:/#其中,-t選項讓Docker分配一個偽終端(pseudo-tty)并綁定到容器的標準輸入上,-i則讓容器的標準輸入保持打開。更多的命令選項可以通過mandocker-run命令來查看。在交互模式下,用戶可以通過所創(chuàng)建的終端來輸入命令,例如:在容器內用ps命令查看進程,可以看到,只運行了bash應用,并沒有運行其他無關的進程。用戶可以按Ctrl+d或輸入exit命令來退出容器:root@af8bae53bdd3:/#exitexit對于所創(chuàng)建的bash容器,當使用exit命令退出之后,容器就自動處于退出(Exited)狀態(tài)了。這是因為對Docker容器來說,當運行的應用退出后,容器也就沒有繼續(xù)運行的必要了。某些時候,執(zhí)行dockerrun會出錯,因為命令無法正常執(zhí)行容器會直接退出,此時可以查看退出的錯誤代碼。默認情況下,常見錯誤代碼包括:125:Dockerdaemon執(zhí)行出錯,例如指定了不支持的Docker命令參數;126:所指定命令無法執(zhí)行,例如權限出錯;127:容器內命令無法找到。命令執(zhí)行后出錯,會默認返回錯誤碼。4.守護態(tài)運行更多的時候,需要讓Docker容器在后臺以守護態(tài)(Daemonized)形式運行。此時,可以通過添加-d參數來實現。例如下面的命令會在后臺運行容器:容器啟動后會返回一個唯一的id,也可以通過dockerps命令來查看容器信息:此時,要獲取容器的輸出信息,可以如下使用dockerlogs命令:$dockerlogsce5helioworldhelioworldhelloworld4.2終止容器可以使用dockerstop來終止一個運行中的容器。該命令的格式為dockerstop[-t|--time[=10]][CONTAINER…]。首先向容器發(fā)送SIGTERM信號,等待一段超時時間(默認為10秒)后,再發(fā)送SIGKILL信號來終止容器:$dockerstopce5ce5此外,當Docker容器中指定的應用終結時,容器也會自動終止。例如對于上一節(jié)中只啟動了一個終端的容器,用戶通過exit命令或Ctrl+d來退出終端時,所創(chuàng)建的容器立刻終止,處于stopped狀態(tài)??梢杂胐ockerps-qa命令看到所有容器的ID。例如:$dockerps-qace554267d7a4d58050081fe3e812617b41f6處于終止狀態(tài)的容器,可以通過dockerstart命令來重新啟動:$dockerstartce5此外,dockerrestart命令會將一個運行態(tài)的容器先終止,然后再重新啟動它:$dockerrestartce54.3進入容器Docker從1.3.0版本起提供了一個方便的exec命令,可以在容器內直接執(zhí)行任意命令。該命令的基本格式為:dockerexec[-d|--detach][--detach-keys[=[]]][-i|--interactive][--privileged][-t|--tty][-u|--user[=USER]]CONTAINERCOMMAND[ARG…]。比較重要的參數有:-i,--interactive=true|false:打開標準輸入接受用戶輸入命令,默認為false;--privileged=true|false:是否給執(zhí)行命令以高權限,默認為false;-t,--tty=true|false:分配偽終端,默認為false;-u,--user="":執(zhí)行命令的用戶名或ID。例如進入到剛創(chuàng)建的容器中,并啟動一個bash:$dockerexec-it243c32535da7/bin/bashroot@243c32535da7:/#可以看到,一個bash終端打開了,在不影響容器內其他應用的前提下,用戶可以很容易與容器進行交互。4.4刪除容器可以使用dockerrm命令來刪除處于終止或退出狀態(tài)的容器,命令格式為dockerrm[-f|--force][-l|--link][-v|--volumes]CONTAINER[CONTAINER…]。主要支持的選項包括:-f,--force=false:是否強行終止并刪除一個運行中的容器;-l,--link=false:刪除容器的連接,但保留容器;-v,--volumes=false:刪除容器掛載的數據卷。例如,查看處于終止狀態(tài)的容器,并刪除:$dockerrmce554267d7a4Ce554267d7a4默認情況下,dockerrm命令只能刪除處于終止或退出狀態(tài)的容器,并不能刪除還處于運行狀態(tài)的容器。如果要直接刪除一個運行中的容器,可以添加-f參數。Docker會先發(fā)送SIGKILL信號給容器,終止其中的應用,之后強行刪除,如下所示:$dockerrm-f2ae2ae4.5導入和導出容器某些時候,需要將容器從一個系統(tǒng)遷移到另外一個系統(tǒng),此時可以使用Docker的導入和導出功能。這也是Docker自身提供的一個重要特性。1.導出容器導出容器是指導出一個已經創(chuàng)建的容器到一個文件,不管此時這個容器是否處于運行狀態(tài),可以使用dockerexport命令,該命令的格式為dockerexport[-o]--output[=""]]CONTAINER。其中,可以通過-o選項來指定導出的tar文件名,也可以直接通過重定向來實現。示例:分別導出ce554267d7a4容器和e812617b41f6容器到文件test_for_run.tar文件和test_for_stop.tar文件:$dockerexport-otest_for_run.tarce5$lstest_for_run.tar$dockerexporte81>test_for_stop.tar$lstest_for_run.tartest_for_stop.tar之后,可將導出的tar文件傳輸到其他機器上,然后再通過導人命令導人到系統(tǒng)中,從而實現容器的遷移。2.導入容器導出的文件又可以使用dockerimport命令導入變成鏡像,該命令格式為:dockerimport[-cI--change[=[]]][-m|--message[=MESSAGE]]file|URL|-[REPOSITORY[:TAG]]用戶可以通過-c,--change=[]選項在導入的同時執(zhí)行對容器進行修改的Dockerfile指令。下面將導出的test_for_run.tar文件導入到系統(tǒng)中:$dockerimporttest_for_run.tar-test/Ubuntu:v1.0之前鏡像章節(jié)中我們曾介紹過使用dockerload命令來導入一個鏡像文件,與dockerimport命令十分類似。實際上,既可以使用dockerload命令來導入鏡像存儲文件到本地鏡像庫,也可以使用dockerimport命令來導人一個容器快照到本地鏡像庫。這兩者的區(qū)別在于容器快照文件將丟棄所有的歷史記錄和元數據信息(即僅保存容器當時的快照狀態(tài)),而鏡像存儲文件將保存完整記錄,體積也更大。此外,從容器快照文件導入時可以重新指定標簽等元數據信息。4.6實現容器的網絡端口映射下面我們來實現Docker容器的網絡端口映射。我們先創(chuàng)建了一個python應用的容器。$dockerrun-d-Ptraining/webapppythonapp.pyfce072cc88cee71b1cdceb57c2821d054a4a59f67da6b416fceb5593f059fc6d另外,我們可以指定容器綁定的網絡地址,比如綁定。我們使用-P參數創(chuàng)建一個容器,使用dockerps來看到端口5000綁定主機端口32768。$dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESfce072cc88cetraining/webapp"pythonapp.py"4minutesagoUp4minutes:32768->5000/tcpgrave_hopper我們也可以使用-p標識來指定容器端口綁定到主機端口。兩種方式的區(qū)別是:-P:是容器內部端口隨機映射到主機的高端口。-p:是容器內部端口綁定到指定的主機端口。另外,我們可以指定容器綁定的網絡地址,比如綁定。這樣我們就可以通過訪問:5001來訪問容器的5002端口。上面的例子中,默認都是綁定tcp端口,如果要綁定UPD端口,可以在端口后面加上/udp。dockerport命令可以讓我們快捷地查看端口的綁定情況。$dockerportadoring_stonebraker5002:5001第五部分Docker容器實現Web服務與應用5.1Docker容器實現Apache服務方法一、通過Dockerfile

構建創(chuàng)建Dockerfile首先,創(chuàng)建目錄apache,用于存放后面的相關東西。$mkdir-p~/apache/www~/apache/logs~/apache/confwww目錄將映射為apache容器配置的應用程序目錄,logs目錄將映射為apache容器的日志目錄,conf目錄里的配置文件將映射為apache容器的配置文件,進入創(chuàng)建的apache目錄,創(chuàng)建Dockerfile,內容如下:Dockerfile文件中COPYhttpd-foreground/usr/local/bin/是將當前目錄下的httpd-foreground拷貝到鏡像里,作為httpd服務的啟動腳本,所以我們要在本地創(chuàng)建一個腳本文件httpd-foreground#!/bin/bashset-e#ApachegetsgrumpyaboutPIDfilespre-existingrm-f/usr/local/apache2/logs/httpd.pidexechttpd-DFOREGROUND賦予httpd-foreground文件可執(zhí)行權限$chmod+xhttpd-foreground通過Dockerfile創(chuàng)建一個鏡像,替換成你自己的名字$dockerbuild-thttpd.創(chuàng)建完成后,我們可以在本地的鏡像列表里查找到剛剛創(chuàng)建的鏡像$dockerimageshttpdREPOSITORYTAGIMAGEIDCREATEDSIZEhttpdlatestda1536b4ef1423secondsago....195.1MB方法二、dockerpullhttpd查找DockerHub上的httpd鏡像這里我們拉取官方的鏡像$dockerpullhttpd等待下載完成后,我們就可以在本地鏡像列表里查到REPOSITORY為httpd的鏡像。使用apache鏡像運行容器命令說明:-p80:80:將容器的80端口映射到主機的80端口-v$PWD/www/:/usr/local/apache2/htdocs/:將主機中當前目錄下的www目錄掛載到容器的

/usr/local/apache2/htdocs/-v$PWD/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf:將主機中當前目錄下的

conf/httpd.conf文件掛載到容器的/usr/local/apache2/conf/httpd.conf-v$PWD/logs/:/usr/local/apache2/logs/:將主機中當前目錄下的logs目錄掛載到容器的

/usr/local/apache2/logs/查看容器啟動情況$dockerpsCONTAINERIDIMAGECOMMAND...............PORTSNAMES79a97f2aac37httpd"httpd-foreground"...:80->80/tcpsharp_swanson通過瀏覽器訪問驗證Docker中的Apache服務是否可訪問。5.2Docker容器實現Nginx服務方法一、通過Dockerfile

構建創(chuàng)建Dockerfile首先,創(chuàng)建目錄nginx,用于存放后面的相關東西。$mkdirp~/nginx/www~/nginx/logs~/nginx/confwww目錄將映射為nginx容器配置的虛擬目錄,logs目錄將映射為nginx容器的日志目錄,conf目錄里的配置文件將映射為nginx容器的配置文件,進入創(chuàng)建的nginx目錄,創(chuàng)建Dockerfile。通過Dockerfile創(chuàng)建一個鏡像,替換成你自己的名字。dockerbuild-tnginx.創(chuàng)建完成后,我們可以在本地的鏡像列表里查找到剛剛創(chuàng)建的鏡像方法二、dockerpullnginx查找DockerHub上的nginx鏡像。這里我們拉取官方的鏡像$dockerpullnginx等待下載完成后,我們就可以在本地鏡像列表里查到REPOSITORY為nginx的鏡像。使用nginx鏡像,運行容器命令說明:-p80:80:將容器的80端口映射到主機的80端口--namemynginx:將容器命名為mynginx-v$PWD/www:/www:將主機中當前目錄下的www掛載到容器的/www-v$PWD/conf/nginx.conf:/etc/nginx/nginx.conf:將主機中當前目錄下的nginx.conf掛載到容器的/etc/nginx/nginx.conf-v$PWD/logs:/wwwlogs:將主機中當前目錄下的logs掛載到容器的/wwwlogs查看容器啟動情況通過瀏覽器訪問5.3Docker容器實現Python應用方法一、通過Dockerfile

構建創(chuàng)建Dockerfile首先,創(chuàng)建目錄python,用于存放后面的相關東西。$mdkir-p~/python~/python/myappmyapp目錄將映射為python容器配置的應用目錄,進入創(chuàng)建的python目錄,創(chuàng)建Dockerfile。通過Dockerfile創(chuàng)建一個鏡像,替換成你自己的名字$dockerbuild-tpython:3.5.創(chuàng)建完成后,我們可以在本地的鏡像列表里查找到剛剛創(chuàng)建的鏡像方法二、dockerpullpython查找DockerHub上的python鏡像這里我們拉取官方的鏡像,標簽為3.5$dockerpullpython:3.5等待下載完成后,我們就可以在本地鏡像列表里查到REPOSITORY為python,標簽為3.5的鏡像。在~/python/myapp目錄下創(chuàng)建一個helloworld.py文件,代碼如下:#!/usr/bin/pythonprint("Hello,World!");運行容器$dockerrun-v$PWD/myapp:/usr/src/myapp-w/usr/src/myapppython:3.5pythonhelloworld.py命令說明:-v$PWD/myapp:/usr/src/myapp:將主機中當前目錄下的myapp掛載到容器的/usr/src/myapp-w/usr/src/myapp:指定容器的/usr/src/myapp目錄為工作目錄pythonhelloworld.py:使用容器的python命令來執(zhí)行工作目錄中的helloworld.py文件輸出結果:Hello,World!5.4Docker容器實現MySQL服務方法一、通過Dockerfile

構建創(chuàng)建Dockerfile首先,創(chuàng)建目錄mysql,用于存放后面的相關東西。$mkdir-p~/mysql/data~/mysql/logs~/mysql/confdata目錄將映射為mysql容器配置的數據文件存放路徑,logs目錄將映射為mysql容器的日志目錄,conf目錄里的配置文件將映射為mysql容器的配置文件。進入創(chuàng)建的mysql目錄,創(chuàng)建DockerfileFROMdebian:jessie通過Dockerfile創(chuàng)建一個鏡像,替換成你自己的名字。$dockerbuild-tmysql.創(chuàng)建完成后,我們可以在本地的鏡像列表里查找到剛剛創(chuàng)建的鏡像$dockerimages|grepmysqlmysql..............5.62c0964ec182a3weeksago329MB方法二、dockerpullmysql查找DockerHub上的mysql鏡像。這里我們拉取官方的鏡像,標簽為5.6。$dockerpullmysql:5.6等待下載完成后,我們就可以在本地鏡像列表里查到REPOSITORY為mysql,標簽為5.6的鏡像。運行容器:命令說明:-p3306:3306:將容器的3306端口映射到主機的3306端口-v$PWD/conf/f:/etc/mysql/f:將主機當前目錄下的conf/f掛載到容器的/etc/mysql/f-v$PWD/logs:/logs:將主機當前目錄下的logs目錄掛載到容器的/logs-v$PWD/data:/mysql_data:將主機當前目錄下的data目錄掛載到容器的/mysql_data-eMYSQL_ROOT_PASSWORD=123456:初始化root用戶的密碼查看容器啟動情況:第六部分Docker的運行監(jiān)控在運維體系中,監(jiān)控是非常重要的組成部分。通過監(jiān)控可以實時掌握系統(tǒng)運行的狀態(tài),對故障的提前預警,歷史狀態(tài)的回放等,還可以通過監(jiān)控數據為系統(tǒng)的容量規(guī)劃提供輔助決策,為系統(tǒng)性能優(yōu)化提供真實的用戶行為和體驗。6.1容器的監(jiān)控方案傳統(tǒng)的監(jiān)控系統(tǒng)大多是針對物理機或虛擬機設計的,物理機和虛擬機的特點是靜態(tài)的,生命周期長,一個環(huán)境安裝配置好后可能幾年都不會去變動,那么對

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論