I. 簡介
Docker 是一個(gè)開源的應(yīng)用容器引擎拖云,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的鏡像中顽馋,然后發(fā)布到任何流行的 Linux或Windows 機(jī)器上尘喝,也可以實(shí)現(xiàn)虛擬化压昼。容器是完全使用沙箱機(jī)制炕倘,相互之間不會(huì)有任何接口钧大。
由于本地開發(fā)好的程序往往都需要部署到服務(wù)器上進(jìn)行運(yùn)行,這就導(dǎo)致了程序需要運(yùn)行在不同的環(huán)境上罩旋,這通常是一個(gè)令人頭痛的事情啊央。在過去,開發(fā)團(tuán)隊(duì)需要清楚的告訴運(yùn)維部署團(tuán)隊(duì)涨醋,其所使用的全部配置文件+所有軟件環(huán)境瓜饥。不過,即便如此浴骂,仍然常常發(fā)生部署失敗的狀況乓土。
于是乎,虛擬化技術(shù)應(yīng)運(yùn)而生。開發(fā)團(tuán)隊(duì)將開發(fā)好的程序在虛擬機(jī)上運(yùn)行趣苏,這樣就能解決運(yùn)維的問題狡相。但是由于虛擬機(jī)技術(shù)過重的特性導(dǎo)致了其資源占用多、冗余步驟多以及啟動(dòng)慢的缺陷拦键。而這個(gè)時(shí)候一種新的虛擬化技術(shù)搭配上容器化的思想的產(chǎn)品便出現(xiàn)了谣光,而它就是Docker。
下圖是虛擬機(jī)技術(shù)和容器化技術(shù)架構(gòu)的對(duì)比芬为。我們可以得出以下總結(jié):
- 傳統(tǒng)虛擬機(jī)技術(shù)是虛擬出一套硬件后萄金,在其上運(yùn)行一個(gè)完整操作系統(tǒng),在該系統(tǒng)上再運(yùn)行所需應(yīng)用進(jìn)程
- 而容器內(nèi)的應(yīng)用進(jìn)程直接運(yùn)行于宿主的內(nèi)核媚朦,容器內(nèi)沒有自己的內(nèi)核氧敢,而且也沒有進(jìn)行硬件虛擬。 因此容器要比傳統(tǒng)虛擬機(jī)更為輕便询张。
- 每個(gè)容器之間互相隔離孙乖,每個(gè)容器有自己的文件系統(tǒng) ,容器之間進(jìn)程不會(huì)相互影響份氧,能區(qū)分計(jì)算資源唯袄。
[圖片上傳失敗...(image-efadd2-1643314980201)]
](https://upload-images.jianshu.io/upload_images/646931-4b1431b77887632f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
于是乎相比于虛擬機(jī)技術(shù),容器化技術(shù)具有以下優(yōu)勢:
-
更快速的應(yīng)用交付和部署
傳統(tǒng)的應(yīng)用開發(fā)完成后蜗帜,需要提供一堆安裝程序和配置說明文檔恋拷,安裝部署后需根據(jù)配置文檔進(jìn)行繁雜 的配置才能正常運(yùn)行。Docker化之后只需要交付少量容器鏡像文件厅缺,在正式生產(chǎn)環(huán)境加載鏡像并運(yùn)行即 可蔬顾,應(yīng)用安裝配置在鏡像里已經(jīng)內(nèi)置好,大大節(jié)省部署配置和測試驗(yàn)證時(shí)間
-
更便捷的升級(jí)和擴(kuò)縮容
隨著微服務(wù)架構(gòu)和Docker的發(fā)展湘捎,大量的應(yīng)用會(huì)通過微服務(wù)方式架構(gòu)诀豁,應(yīng)用的開發(fā)構(gòu)建將變成搭樂高積 木一樣,每個(gè)Docker容器將變成一塊“積木”窥妇,應(yīng)用的升級(jí)將變得非常容易舷胜。當(dāng)現(xiàn)有的容器不足以支撐業(yè) 務(wù)處理時(shí),可通過鏡像運(yùn)行新的容器進(jìn)行快速擴(kuò)容活翩,使應(yīng)用系統(tǒng)的擴(kuò)容從原先的天級(jí)變成分鐘級(jí)甚至秒級(jí)
-
更簡單的系統(tǒng)運(yùn)維
應(yīng)用容器化運(yùn)行后逞带,生產(chǎn)環(huán)境運(yùn)行的應(yīng)用可與開發(fā)、測試環(huán)境的應(yīng)用高度一致纱新,容器會(huì)將應(yīng)用程序相關(guān) 的環(huán)境和狀態(tài)完全封裝起來,不會(huì)因?yàn)榈讓踊A(chǔ)架構(gòu)和操作系統(tǒng)的不一致性給應(yīng)用帶來影響穆趴,產(chǎn)生新的 BUG脸爱。當(dāng)出現(xiàn)程序異常時(shí),也可以通過測試環(huán)境的相同容器進(jìn)行快速定位和修復(fù)
-
更高效的計(jì)算資源利用
Docker是內(nèi)核級(jí)虛擬化未妹,其不像傳統(tǒng)的虛擬化技術(shù)一樣需要額外的Hypervisor [管理程序] 支持簿废,所以在 一臺(tái)物理機(jī)上可以運(yùn)行很多個(gè)容器實(shí)例空入,可大大提升物理服務(wù)器的CPU和內(nèi)存的利用率
相關(guān)網(wǎng)站
Docker官網(wǎng):http://www.docker.com
Docker中文網(wǎng)站:https://www.docker-cn.com
Docker Hub官網(wǎng):https://hub.docker.com (倉庫)
II. 基本原理
如下圖所示,Docker使用客戶端-服務(wù)器(C/S)架構(gòu)模式族檬,使用遠(yuǎn)程API來管理和創(chuàng)建Docker容器歪赢。服務(wù)器端分為Docker daemon, Image和Container三個(gè)部分。此外還有Docker Registry单料。
下面首先來介紹一下Docker中的主要概念
-
鏡像(Image)
Docker 鏡像(Image)就是一個(gè)只讀的模板埋凯。鏡像可以用來創(chuàng)建 Docker 容器,一個(gè)鏡像可以創(chuàng)建很 多容器扫尖。 就好似 Java 中的 類和對(duì)象白对,類就是鏡像,容器就是對(duì)象换怖!
-
容器(Container)
Docker 利用容器(Container)獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用甩恼。容器是用鏡像創(chuàng)建的運(yùn)行實(shí)例。 它可以被啟動(dòng)沉颂、開始条摸、停止、刪除铸屉。每個(gè)容器都是相互隔離的钉蒲,保證安全的平臺(tái)。 可以把容器看做是一個(gè)簡易版的 Linux 環(huán)境(包括root用戶權(quán)限抬探、進(jìn)程空間子巾、用戶空間和網(wǎng)絡(luò)空間等)和運(yùn)行在其中的應(yīng)用程序。小压。 容器的定義和鏡像幾乎一模一樣线梗,也是一堆層的統(tǒng)一視角,唯一區(qū)別在于容器的最上面那一層是可讀可寫的怠益。
-
Registry和倉庫(Repository)
倉庫(Repository)是集中存放鏡像文件的場所仪搔。 倉庫(Repository)和倉庫注冊(cè)服務(wù)器(Registry)是有區(qū)別的。倉庫注冊(cè)服務(wù)器上往往存放著多個(gè)倉庫蜻牢,每個(gè)倉庫中又包含了多個(gè)鏡像烤咧,每個(gè)鏡像有不同的標(biāo)簽(tag)。 倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式抢呆。 最大的公開倉庫是 Docker Hub(https://hub.docker.com/)煮嫌,存放了數(shù)量龐大的鏡像供用戶下載。%EF%BC%8C%E5%AD%98%E6%94%BE%E4%BA%86%E6%95%B0%E9%87%8F%E5%BA%9E%E5%A4%A7%E7%9A%84%E9%95%9C%E5%83%8F%E4%BE%9B%E7%94%A8%E6%88%B7%E4%B8%8B%E8%BD%BD%E3%80%82) 國內(nèi)的公開倉庫包括阿里云 抱虐、網(wǎng)易云等昌阿。
Docker的運(yùn)行原理如下:客戶端可以將docker命令發(fā)送到服務(wù)器端的Docker daemon上,再由Docker damon根據(jù)指令創(chuàng)建、選擇或者從Docker倉庫中拉扰潮(pull)鏡像灶轰。接著客戶端可以通過鏡像創(chuàng)建容器。當(dāng)我們需要使用程序時(shí)刷钢,運(yùn)行相應(yīng)的容器即可笋颤。
小結(jié)
需要正確的理解倉儲(chǔ)/鏡像/容器這幾個(gè)概念 :
- Docker 本身是一個(gè)容器運(yùn)行載體或稱之為管理引擎。我們把應(yīng)用程序和配置依賴打包好形成一個(gè) 可交付的運(yùn)行環(huán)境内地,這個(gè)打包好的運(yùn)行環(huán)境就似乎image鏡像文件伴澄。只有通過這個(gè)鏡像文件才能生成Docker容器。image 文件可以看作是容器的模板瓤鼻。Docker 根據(jù) image 文件生成容器的實(shí)例秉版。 同一個(gè) image 文件,可以生成多個(gè)同時(shí)運(yùn)行的容器實(shí)例茬祷。
- image 文件生成的容器實(shí)例清焕,本身也是一個(gè)文件,稱為鏡像文件祭犯。一個(gè)容器運(yùn)行一種服務(wù)秸妥,當(dāng)我們需要的時(shí)候,就可以通過docker客戶端創(chuàng)建一個(gè)對(duì)應(yīng)的運(yùn)行實(shí)例沃粗, 也就是我們的容器
- 至于倉庫粥惧,就是放了一堆鏡像的地方,我們可以把鏡像發(fā)布到倉庫中最盅,需要的時(shí)候從倉庫中拉下來 就可以了突雪。
III. 基本使用
-
Docker安裝
-
幫助命令
docker version # 顯示Docker版本信息 docker info # 顯示Docker系統(tǒng)信息,包括鏡像和容器數(shù) docker --help # 幫助
-
鏡像命令
docker images # 列出本機(jī)所有鏡像 # 可選項(xiàng) -a:列出本地所有鏡像 -q: 只顯示鏡像id --digests: 顯示鏡像的摘要信息 # 搜索鏡像 docker search image_name # 在DockerHub倉庫中搜索某個(gè)鏡像 # 下載(拉任屑)鏡像 docker pull image_name:edition # 在DockeHub上下載某個(gè)鏡像 # 刪除鏡像 docker rmi -f image_id # 刪除單個(gè)鏡像 docker rmi -f image_name:tag # 刪除多個(gè)鏡像 docker rmi -f $(docker images -qa) # 刪除全部鏡像
-
容器命令
- 以某個(gè)鏡像為基礎(chǔ)生成并運(yùn)行容器
docker run [OPTIONS] IMAGE [COMMAND][ARG...] # 常用參數(shù)說明 --name="Name" # 給容器指定一個(gè)名字 -d # 后臺(tái)方式運(yùn)行容器咏删,并返回容器的id -i # 以交互模式運(yùn)行容器,通常和 -t 一起使用 -t # 給容器重新分配一個(gè)終端问词,通常和 -i 一起使用 -P # 隨機(jī)端口映射(大寫) -p # 指定端口映射(小結(jié))督函,一般可以有四種寫法 ip:hostPort:containerPort ip:containerPort hostPort:containerPort (常用) containerPort # 例子 docker run -it centos /bin/bash # 使用centos進(jìn)行用交互模式啟動(dòng)容器,在容器內(nèi)執(zhí)行/bin/bash命令
- 列出所有容器
docker ps [OPTIONS] # 常用參數(shù)說明 -a # 列出當(dāng)前所有正在運(yùn)行的容器 + 歷史運(yùn)行過的容器 -l # 顯示最近創(chuàng)建的容器 -n=? # 顯示最近n個(gè)創(chuàng)建的容器 -q # 靜默模式激挪,只顯示容器編號(hào)辰狡。
- 退出容器
exit # 容器停止退出 ctrl+P+Q # 容器不停止退出 - **啟動(dòng)已停止的容器** ```shell docker start (容器id or 容器名) # 啟動(dòng)容器 docker restart (容器id or 容器名) # 重啟容器 docker stop (容器id or 容器名) # 停止容器 docker kill (容器id or 容器名) # 強(qiáng)制停止容器
- 刪除容器
docker rm 容器id # 刪除指定容器 docker rm -f $(docker ps -a -q) # 刪除所有容器 docker ps -a -q|xargs docker rm # 刪除所有容器
-
常用命令總結(jié)
docker常用命令1[圖片上傳中...(image-f44fd8-1642627027451-0)]
III. 容器數(shù)據(jù)卷
在外面使用容器的時(shí)候,我們不希望容器中的數(shù)據(jù)在容器被刪除后也一并刪除了垄分,這時(shí)候我們就可以通過使用容器數(shù)據(jù)卷宛篇,將數(shù)據(jù)儲(chǔ)存在本地并用Docker將其掛載到容器中,這樣我們即使刪除了容器薄湿,數(shù)據(jù)也依舊存在服務(wù)器中叫倍,也就實(shí)現(xiàn)了數(shù)據(jù)持久化豌鸡。
特點(diǎn)
- 數(shù)據(jù)卷可在容器之間共享或重用數(shù)據(jù)
- 卷中的更改可以直接生效
- 數(shù)據(jù)卷中的更改不會(huì)包含在鏡像的更新中
- 數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止
容器數(shù)據(jù)卷掛載命令(-v)
# 匿名掛載
-v 容器內(nèi)路徑 docker run -d -P --name nginx01 -v /etc/nginx nginx
# 匿名掛載的缺點(diǎn),就是不好維護(hù)段标,通常使用命令 docker volume維護(hù)
docker volume ls
# 具名掛載 -v 卷名:/容器內(nèi)路徑
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx nginx
# 查看掛載的路徑 [root@kuangshen ~]#
docker volume inspect nginxconfig
# 怎么判斷掛載的是卷名而不是本機(jī)目錄名?
不是/開始就是卷名炉奴,是/開始就是目錄名
# 改變文件的讀寫權(quán)限
# ro: readonly
# rw: readwrite
# 指定容器對(duì)我們掛載出來的內(nèi)容的讀寫權(quán)限
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx:rw nginx
Dockerfile 掛載容器數(shù)據(jù)卷
# 1逼庞、我們?cè)谒拗鳈C(jī) /home 目錄下新建一個(gè) docker-test-volume文件夾
[root@kuangshen home]# mkdir docker-test-volume
# 說明:在編寫DockerFile文件中使用 VOLUME 指令來給鏡像添加一個(gè)或多個(gè)數(shù)據(jù)卷
VOLUME["/dataVolumeContainer1","/dataVolumeContainer2","/dataVolumeContainer 3"] # 出于可移植和分享的考慮,我們之前使用的 -v 主機(jī)目錄:容器目錄 這種方式不能夠直接在 DockerFile中實(shí)現(xiàn)瞻赶。 # 由于宿主機(jī)目錄是依賴于特定宿主機(jī)的赛糟,并不能夠保證在所有宿主機(jī)上都存在這樣的特定目錄.
# 2、編寫DockerFile文件
[root@kuangshen docker-test-volume]# pwd /home/docker-test-volume
[root@kuangshen docker-test-volume]# vim dockerfile1
[root@kuangshen docker-test-volume]# cat dockerfile1
# volume test
FROM centos VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "-------end------"
CMD /bin/bash
# 3砸逊、build后生成鏡像璧南,獲得一個(gè)新鏡像 kuangshen/centos
docker build -f /home/docker-test-volume/dockerfile1 -t kuangshen/centos . # 注意最后有個(gè).
IV. 構(gòu)建鏡像:DOCKERFILE
我們除了可以從倉庫中拉取鏡像以外,我們也可以自己創(chuàng)建鏡像师逸,這就要用到Docerfile司倚。
dockerfile是用來構(gòu)建Docker鏡像的構(gòu)建文件,是由一系列命令和參數(shù)構(gòu)成的腳本篓像。
構(gòu)建步驟:
- 編寫DockerFile文件
- docker build 構(gòu)建鏡像
- docker run
DOCKERFILE構(gòu)建過程
基礎(chǔ)知識(shí):
- 每條保留字指令都必須為大寫字母且后面要跟隨至少一個(gè)參數(shù)
- 指令按照從上到下动知,順序執(zhí)行
-
表示注釋 每條指令都會(huì)創(chuàng)建一個(gè)新的鏡像層,并對(duì)鏡像進(jìn)行提交
流程:
- docker從基礎(chǔ)鏡像運(yùn)行一個(gè)容器
- 執(zhí)行一條指令并對(duì)容器做出修改
- 執(zhí)行類似 docker commit 的操作提交一個(gè)新的鏡像層
- Docker再基于剛提交的鏡像運(yùn)行一個(gè)新容器
- 執(zhí)行dockerfile中的下一條指令直到所有指令都執(zhí)行完成员辩!
說明:
- 從應(yīng)用軟件的角度來看盒粮,DockerFile,docker鏡像與docker容器分別代表軟件的三個(gè)不同階段奠滑。
- DockerFile 是軟件的原材料 (代碼) Docker 鏡像則是軟件的交付品 (.apk)
- Docker 容器則是軟件的運(yùn)行狀態(tài) (客戶下載安裝執(zhí)行)
- DockerFile 面向開發(fā)丹皱,Docker鏡像成為交付標(biāo)準(zhǔn),Docker容器則涉及部署與運(yùn)維宋税,三者缺一不可摊崭!
-
DockerFile
需要定義一個(gè)DockerFile,DockerFile定義了進(jìn)程需要的一切東西弃甥。DockerFile涉及的內(nèi)容 包括執(zhí)行代碼或者是文件爽室、環(huán)境變量、依賴包淆攻、運(yùn)行時(shí)環(huán)境阔墩、動(dòng)態(tài)鏈接庫、操作系統(tǒng)的發(fā)行版瓶珊、服務(wù)進(jìn) 程和內(nèi)核進(jìn)程(當(dāng)引用進(jìn)行需要和系統(tǒng)服務(wù)和內(nèi)核進(jìn)程打交道啸箫,這時(shí)需要考慮如何設(shè)計(jì) namespace的權(quán) 限控制)等等。
-
Docker鏡像
在DockerFile 定義了一個(gè)文件之后伞芹,Docker build 時(shí)會(huì)產(chǎn)生一個(gè)Docker鏡像忘苛,當(dāng)運(yùn)行 Docker 鏡像時(shí)蝉娜,會(huì)真正開始提供服務(wù);
-
Docker容器
容器是直接提供服務(wù)的
DOCKERFILE指令
FROM # 基礎(chǔ)鏡像扎唾,當(dāng)前新鏡像是基于哪個(gè)鏡像的
MAINTAINER # 鏡像維護(hù)者的姓名混合郵箱地址
RUN # 容器構(gòu)建時(shí)需要運(yùn)行的命令
EXPOSE # 當(dāng)前容器對(duì)外保留出的端口
WORKDIR # 指定在創(chuàng)建容器后召川,終端默認(rèn)登錄的進(jìn)來工作目錄,一個(gè)落腳點(diǎn)
ENV # 用來在構(gòu)建鏡像過程中設(shè)置環(huán)境變量
ADD # 將宿主機(jī)目錄下的文件拷貝進(jìn)鏡像且ADD命令會(huì)自動(dòng)處理URL和解壓tar壓縮包
COPY # 類似ADD胸遇,拷貝文件和目錄到鏡像中荧呐!
VOLUME # 容器數(shù)據(jù)卷,用于數(shù)據(jù)保存和持久化工作
CMD # 指定一個(gè)容器啟動(dòng)時(shí)要運(yùn)行的命令纸镊,dockerFile中可以有多個(gè)CMD指令倍阐,但只有最后一個(gè)生效!
ENTRYPOINT # 指定一個(gè)容器啟動(dòng)時(shí)要運(yùn)行的命令逗威!和CMD一樣
ONBUILD # 當(dāng)構(gòu)建一個(gè)被繼承的DockerFile時(shí)運(yùn)行命令峰搪,父鏡像在被子鏡像繼承后,父鏡像的ONBUILD被觸發(fā)
V. DOCKER 網(wǎng)絡(luò)
在實(shí)際場景中凯旭,我們會(huì)遇到多個(gè)Container之間通訊的問題概耻。而Docker網(wǎng)絡(luò)就是用于解決此問題的技術(shù)。docker會(huì)給每個(gè)容器都分配一個(gè)ip尽纽,且容器和容器之間是可以互相訪問的咐蚯。
Docker網(wǎng)絡(luò)原理
每一個(gè)安裝了Docker的linux主機(jī)都有一個(gè)docker0的虛擬網(wǎng)卡。這是個(gè)橋接網(wǎng)卡弄贿,使用了veth-pair 技術(shù)春锋。Docker使用Linux橋接,在宿主機(jī)虛擬一個(gè)Docker容器網(wǎng)橋(docker0)差凹,Docker啟動(dòng)一個(gè)容器時(shí)會(huì)根據(jù) Docker網(wǎng)橋的網(wǎng)段分配給容器一個(gè)IP地址期奔,稱為Container-IP,同時(shí)Docker網(wǎng)橋是每個(gè)容器的默認(rèn)網(wǎng) 關(guān)危尿。因?yàn)樵谕凰拗鳈C(jī)內(nèi)的容器都接入同一個(gè)網(wǎng)橋呐萌,這樣容器之間就能夠通過容器的Container-IP直接通信。
Docker容器網(wǎng)絡(luò)就很好的利用了Linux虛擬網(wǎng)絡(luò)技術(shù)谊娇,在本地主機(jī)和容器內(nèi)分別創(chuàng)建一個(gè)虛擬接口肺孤,并 讓他們彼此聯(lián)通(這樣一對(duì)接口叫veth pair);
Docker中的網(wǎng)絡(luò)接口默認(rèn)都是虛擬的接口济欢。虛擬接口的優(yōu)勢就是轉(zhuǎn)發(fā)效率極高(因?yàn)長inux是在內(nèi)核中 進(jìn)行數(shù)據(jù)的復(fù)制來實(shí)現(xiàn)虛擬接口之間的數(shù)據(jù)轉(zhuǎn)發(fā)赠堵,無需通過外部的網(wǎng)絡(luò)設(shè)備交換),對(duì)于本地系統(tǒng)和容 器系統(tǒng)來說法褥,虛擬接口跟一個(gè)正常的以太網(wǎng)卡相比并沒有區(qū)別茫叭,只是他的速度快很多。
[圖片上傳中...(image-41d42a-1642627027452-2)]
VI. 定義并運(yùn)行多容器:DOCKER COMPOSE
Docker Compose是一個(gè)用于定義并運(yùn)行多容器應(yīng)用的工具半等。
Docker Compose的步驟如下:
- 為每個(gè)容器(自定義容器)編寫Dockerfile
- 編寫docker-compose.yml文件揍愁,用于定義如何運(yùn)行多容器以及定義容器配置
- 執(zhí)行
docker-compose up
命令呐萨,用于啟動(dòng)項(xiàng)目。
NOTE: Compose :重要的概念莽囤。
- 服務(wù)services: 容器谬擦。應(yīng)用。(web朽缎、redis怯屉、mysql….)
- 項(xiàng)目project: 一組關(guān)聯(lián)的容器。 博客饵沧。web、mysql赌躺。
docker-compose.yml編寫
# 3層狼牺!
version: '' # 版本
services: # 服務(wù)
服務(wù)1: web
# 服務(wù)配置
images
build
network
.....
服務(wù)2: redis
....
服務(wù)3: redis
# 其他配置 網(wǎng)絡(luò)/卷、全局規(guī)則
volumes:
networks:
configs:
Note: docker-compose會(huì)自動(dòng)為多容器之間創(chuàng)建網(wǎng)絡(luò)礼患,保證通訊是钥。
VII. 集群部署:DOCKER SWARM
Docker Swarm 是Docker 的集群管理工具。 它將Docker 主機(jī)池轉(zhuǎn)變?yōu)閱蝹€(gè)虛擬Docker 主機(jī)缅叠。 Docker Swarm 提供了標(biāo)準(zhǔn)的Docker API悄泥,所有任何已經(jīng)與Docker 守護(hù)程序通信的工具都可以使用Swarm 輕松地?cái)U(kuò)展到多個(gè)主機(jī)。
VIII. 總結(jié)
Docker 是一個(gè)開源的應(yīng)用容器引擎肤粱,它的出現(xiàn)大大簡化了運(yùn)維的難度弹囚,提高了運(yùn)維效率。過去我們需要在服務(wù)器上安裝程序所需要的所有依賴领曼,而如今我們只需要編寫好docker-compose和Dockefile的腳本鸥鹉,就可以使程序一鍵跑通。在企業(yè)級(jí)的應(yīng)用中庶骄,我們必然會(huì)驚顫使用到Docker和容器化技術(shù)毁渗。