<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Docker 入門(mén)終極指南:邊學(xué)邊用

          共 9679字,需瀏覽 20分鐘

           ·

          2020-08-09 05:40


          點(diǎn)擊上方藍(lán)色“Go語(yǔ)言中文網(wǎng)”關(guān)注我們,領(lǐng)全套Go資料,每天學(xué)習(xí)?Go?語(yǔ)言

          Web 時(shí)代,應(yīng)用變得越來(lái)越強(qiáng)大,與此同時(shí)也越來(lái)越復(fù)雜。集群部署、隔離環(huán)境、灰度發(fā)布以及動(dòng)態(tài)擴(kuò)容缺一不可,而容器化則成為中間的必要橋梁。

          本節(jié)我們就來(lái)探索一下 Docker 的神秘世界,從零到一掌握 Docker 的基本原理與實(shí)踐操作。別再守著前端那一畝三分地,是時(shí)候該開(kāi)疆?dāng)U土了。

          我們將會(huì)圍繞下面幾點(diǎn)展開(kāi):1.講個(gè)故事 2.虛擬機(jī)與容器 3.認(rèn)識(shí) Docker4.核心概念 5.安裝 Docker6.快速開(kāi)始 7.常規(guī)操作 8.最佳實(shí)踐

          一、講個(gè)故事

          為了更好的理解 Docker 是什么,我們先來(lái)講個(gè)故事[1]

          我需要蓋一個(gè)房子,于是我搬石頭、砍木頭、畫(huà)圖紙、蓋房子。一頓操作,終于把這個(gè)房子蓋好了。


          結(jié)果,住了一段時(shí)間,心血來(lái)潮想搬到海邊去。這時(shí)候按以往的辦法,我只能去海邊,再次搬石頭、砍木頭、畫(huà)圖紙、蓋房子。


          煩惱之際,跑來(lái)一個(gè)魔法師教會(huì)我一種魔法。這種魔法可以把我蓋好的房子復(fù)制一份,做成「鏡像」,放在我的背包里。

          黑魔法

          等我到了海邊,就用這個(gè)「鏡像」,復(fù)制一套房子,拎包入住。

          是不是很神奇?對(duì)應(yīng)到我們的項(xiàng)目中來(lái),房子就是項(xiàng)目本身,鏡像就是項(xiàng)目的復(fù)制,背包就是鏡像倉(cāng)庫(kù)。如果要?jiǎng)討B(tài)擴(kuò)容,從倉(cāng)庫(kù)中取出項(xiàng)目鏡像,隨便復(fù)制就可以了。Build?once,Run?anywhere!

          不用再關(guān)注版本、兼容、部署等問(wèn)題,徹底解決了「上線(xiàn)即崩,無(wú)休止構(gòu)建」的尷尬。

          二、虛擬機(jī)與容器

          開(kāi)始之前,我們來(lái)做一些基礎(chǔ)知識(shí)的儲(chǔ)備:

          1.虛擬機(jī):虛擬化硬件 虛擬機(jī) Virtual Machine 指通過(guò)軟件模擬的具有完整硬件系統(tǒng)功能的、運(yùn)行在一個(gè)完全隔離環(huán)境中的完整計(jì)算機(jī)系統(tǒng)。在實(shí)體計(jì)算機(jī)中能夠完成的工作在虛擬機(jī)中都能夠?qū)崿F(xiàn)。

          在計(jì)算機(jī)中創(chuàng)建虛擬機(jī)時(shí),需要將實(shí)體機(jī)的部分硬盤(pán)和內(nèi)存容量作為虛擬機(jī)的硬盤(pán)和內(nèi)存容量。每個(gè)虛擬機(jī)都有獨(dú)立的 CMOS、硬盤(pán)和操作系統(tǒng),可以像使用實(shí)體機(jī)一樣對(duì)虛擬機(jī)進(jìn)行操作。在容器技術(shù)之前,業(yè)界的網(wǎng)紅是虛擬機(jī)。

          虛擬機(jī)技術(shù)的代表,是 VMWareOpenStack。更多請(qǐng)參看百科虛擬機(jī)[2]。

          2.容器:將操作系統(tǒng)層虛擬化,是一個(gè)標(biāo)準(zhǔn)的軟件單元

          • 隨處運(yùn)行:容器可以將代碼與配置文件和相關(guān)依賴(lài)庫(kù)進(jìn)行打包,從而確保在任何環(huán)境下的運(yùn)行都是一致的。
          • 高資源利用率:容器提供進(jìn)程級(jí)的隔離,因此可以更加精細(xì)地設(shè)置 CPU 和內(nèi)存的使用率,進(jìn)而更好地利用服務(wù)器的計(jì)算資源。
          • 快速擴(kuò)展:每個(gè)容器都可作為單獨(dú)的進(jìn)程予以運(yùn)行,并且可以共享底層操作系統(tǒng)的系統(tǒng)資源,這樣一來(lái)可以加快容器的啟動(dòng)和停止效率。

          3.區(qū)別與聯(lián)系

          • 虛擬機(jī)雖然可以隔離出很多「子電腦」,但占用空間更大,啟動(dòng)更慢。虛擬機(jī)軟件可能還要花錢(qián),例如VMWare;
          • 容器技術(shù)不需要虛擬出整個(gè)操作系統(tǒng),只需要虛擬一個(gè)小規(guī)模的環(huán)境,類(lèi)似「沙箱」;
          • 運(yùn)行空間,虛擬機(jī)一般要幾 GB 到 幾十 GB 的空間,而容器只需要 MB 級(jí)甚至 KB 級(jí);

          我們來(lái)看一下對(duì)比數(shù)據(jù):

          特性虛擬機(jī)容器
          隔離級(jí)別操作系統(tǒng)級(jí)進(jìn)程
          隔離策略Hypervisor[3](虛擬機(jī)監(jiān)控器)Cgroups[4](控制組群)
          系統(tǒng)資源5 ~ 15%0 ~ 5%
          啟動(dòng)時(shí)間分鐘級(jí)秒級(jí)
          鏡像存儲(chǔ)GB - TBKB - MB
          集群規(guī)模上百上萬(wàn)
          高可用策略備份、容災(zāi)、遷移彈性、負(fù)載、動(dòng)態(tài)

          與虛擬機(jī)相比,容器更輕量且速度更快,因?yàn)樗昧?Linux 底層操作系統(tǒng)在隔離的環(huán)境中運(yùn)行。虛擬機(jī)的 Hypervisor 創(chuàng)建了一個(gè)非常牢固的邊界,以防止應(yīng)用程序突破它,而容器的邊界不那么強(qiáng)大。

          物理機(jī)部署不能充分利用資源,造成資源浪費(fèi)。虛擬機(jī)方式部署,虛擬機(jī)本身會(huì)占用大量資源,導(dǎo)致資源浪費(fèi),另外虛擬機(jī)性能也很差。而容器化部署比較靈活,且輕量級(jí),性能較好。

          虛擬機(jī)屬于虛擬化技術(shù),而 Docker 這樣的容器技術(shù),屬于輕量級(jí)的虛擬化。

          三、認(rèn)識(shí) Docker


          1.概念Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎,讓開(kāi)發(fā)者可以打包他們的應(yīng)用以及依賴(lài)包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。

          Docker 技術(shù)的三大核心概念,分別是:鏡像 Image、容器 Container、倉(cāng)庫(kù) Repository。

          2.Docker 輕量級(jí)的原因?相信你也會(huì)有這樣的疑惑:為什么 Docker 啟動(dòng)快?如何做到和宿主機(jī)共享內(nèi)核?

          當(dāng)我們請(qǐng)求 Docker 運(yùn)行容器時(shí),Docker 會(huì)在計(jì)算機(jī)上設(shè)置一個(gè)資源隔離的環(huán)境。然后將打包的應(yīng)用程序和關(guān)聯(lián)的文件復(fù)制到 Namespace 內(nèi)的文件系統(tǒng)中,此時(shí)環(huán)境的配置就完成了。之后 Docker 會(huì)執(zhí)行我們預(yù)先指定的命令,運(yùn)行應(yīng)用程序。

          鏡像不包含任何動(dòng)態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會(huì)被改變。

          四、核心概念

          1.Build, Ship and Run(搭建、運(yùn)輸、運(yùn)行);

          2.Build?once, Run?anywhere(一次搭建,處處運(yùn)行);

          3.Docker 本身并不是容器,它是創(chuàng)建容器的工具,是應(yīng)用容器引擎;

          4.Docker 三大核心概念,分別是:鏡像 Image,容器 Container、倉(cāng)庫(kù) Repository

          5.Docker 技術(shù)使用 Linux 內(nèi)核和內(nèi)核功能(例如 Cgroupsnamespaces)來(lái)分隔進(jìn)程,以便各進(jìn)程相互獨(dú)立運(yùn)行。

          6.由于 NamespaceCgroups 功能僅在 Linux 上可用,因此容器無(wú)法在其他操作系統(tǒng)上運(yùn)行。那么 Docker 如何在 macOSWindows 上運(yùn)行?Docker 實(shí)際上使用了一個(gè)技巧,并在非 Linux 操作系統(tǒng)上安裝 Linux 虛擬機(jī),然后在虛擬機(jī)內(nèi)運(yùn)行容器。

          7.鏡像是一個(gè)可執(zhí)行包,其包含運(yùn)行應(yīng)用程序所需的代碼、運(yùn)行時(shí)、庫(kù)、環(huán)境變量和配置文件,容器是鏡像的運(yùn)行時(shí)實(shí)例

          更多關(guān)于 Docker 的原理,可以查看 `Docker` 工作原理及容器化簡(jiǎn)易指南[5],這里不再贅述。

          五、安裝 Docker

          1.命令行安裝HomebrewCask 已經(jīng)支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 來(lái)進(jìn)行安裝,執(zhí)行如下命令:

          brew?cask?install?docker

          更多安裝方式,請(qǐng)查看官方文檔:安裝 `Docker`[6]

          2.查看版本

          docker?-v

          3.配置鏡像加速設(shè)置 Docker Engine[7] 寫(xiě)入配置:

          {
          ??"registry-mirrors":?[
          ????"http://hub-mirror.c.163.com/",
          ????"https://registry.docker-cn.com"
          ??],
          ??"insecure-registries":[],
          ??"experimental":?false,
          ??"debug":?true
          }

          4.安裝桌面端

          桌面端操作非常簡(jiǎn)單,先去官網(wǎng)下載[8]。通過(guò) Docker 桌面端,我們可以方便的操作:1.clone:克隆一個(gè)項(xiàng)目 2.build:打包鏡像 3.run:運(yùn)行實(shí)例 4.share:共享鏡像

          好了,準(zhǔn)備工作就緒,下面可以大展身手了!

          六、快速開(kāi)始

          安裝完 Docker 之后,我們先打個(gè)實(shí)際項(xiàng)目的鏡像,邊學(xué)邊用。

          1.首先需要大致了解一下我們將會(huì)用到的 11 個(gè)命令

          命令描述
          FROM基于哪個(gè)鏡像來(lái)實(shí)現(xiàn)
          MAINTAINER鏡像創(chuàng)建者
          ENV聲明環(huán)境變量
          RUN執(zhí)行命令
          ADD添加宿主機(jī)文件到容器里,有需要解壓的文件會(huì)自動(dòng)解壓
          COPY添加宿住機(jī)文件到容器里
          WORKDIR工作目錄
          EXPOSE容器內(nèi)應(yīng)用可使用的端口
          CMD容器啟動(dòng)后所執(zhí)行的程序,如果執(zhí)行 docker run 后面跟啟動(dòng)命令會(huì)被覆蓋掉
          ENTRYPOINT與 CMD 功能相同,但需 docker run 不會(huì)覆蓋,如果需要覆蓋可增加參數(shù) -entrypoint 來(lái)覆蓋
          VOLUME數(shù)據(jù)卷,將宿主機(jī)的目錄映射到容器中的目錄

          2.新建項(xiàng)目為了快捷,我們直接使用`Vue` 腳手架[9]構(gòu)建項(xiàng)目:

          vue?create?docker-demo

          嘗試啟動(dòng)一下:

          yarn?serve

          訪(fǎng)問(wèn)地址:http://localhost:8080/。項(xiàng)目就緒,我們接著為項(xiàng)目打包:

          yarn?build

          這時(shí)候,項(xiàng)目目錄下的 Dist 就是我們要部署的靜態(tài)資源了,我們繼續(xù)下一步。

          需要注意:前端項(xiàng)目一般分兩類(lèi),一類(lèi)直接 Nginx 靜態(tài)部署,一類(lèi)需要啟動(dòng) Node 服務(wù)。本節(jié)我們只考慮第一種。關(guān)于 Node 服務(wù),下文[10]我會(huì)詳細(xì)說(shuō)明。

          3.新建 Dockerfile

          cd?docker-demo?&&?touch?Dockerfile

          此時(shí)的項(xiàng)目目錄如下:

          .
          ├──?Dockerfile
          ├──?README.md
          ├──?babel.config.js
          ├──?dist
          ├──?node_modules
          ├──?package.json
          ├──?public
          ├──?src
          └──?yarn.lock

          可以看到我們已經(jīng)在 docker-demo 目錄下成功創(chuàng)建了 Dockerfile 文件。

          4.準(zhǔn)備 Nginx 鏡像運(yùn)行你的 Docker 桌面端,就會(huì)默認(rèn)啟動(dòng)實(shí)例,我們?cè)诳刂婆_(tái)拉取 Nginx 鏡像:

          docker?pull?nginx

          控制臺(tái)會(huì)出現(xiàn)如下信息:

          Using?default?tag:?latest
          latest:?Pulling?from?library/nginx
          8559a31e96f4:?Pull?complete
          8d69e59170f7:?Pull?complete
          3f9f1ec1d262:?Pull?complete
          d1f5ff4f210d:?Pull?complete
          1e22bfa8652e:?Pull?complete
          Digest:?sha256:21f32f6c08406306d822a0e6e8b7dc81f53f336570e852e25fbe1e3e3d0d0133
          Status:?Downloaded?newer?image?for?nginx:latest
          docker.io/library/nginx:latest

          如果你出現(xiàn)這樣的異常,請(qǐng)確認(rèn) Docker 實(shí)例是否正常運(yùn)行。

          Cannot?connect?to?the?Docker?daemon?at?unix:///var/run/docker.sock.?Is?the?docker?daemon?running?

          鏡像準(zhǔn)備 OK,我們?cè)诟夸泟?chuàng)建 Nginx 配置文件:

          touch?default.conf

          寫(xiě)入:

          server?{
          ????listen???????80;
          ????server_name??localhost;

          ????#charset?koi8-r;
          ????access_log??/var/log/nginx/host.access.log??main;
          ????error_log??/var/log/nginx/error.log??error;

          ????location?/?{
          ????????root???/usr/share/nginx/html;
          ????????index??index.html?index.htm;
          ????}

          ????error_page???500?502?503?504??/50x.html;
          ????location?=?/50x.html?{
          ????????root???/usr/share/nginx/html;
          ????}
          }

          5.配置鏡像打開(kāi) Dockerfile ,寫(xiě)入如下內(nèi)容:

          FROM?nginx
          COPY?dist/?/usr/share/nginx/html/
          COPY?default.conf?/etc/nginx/conf.d/default.conf

          我們逐行解釋一下代碼:

          • FROM nginx 指定該鏡像是基于 nginx:latest 鏡像而構(gòu)建的;
          • COPY dist/ /usr/share/nginx/html/ 命令的意思是將項(xiàng)目根目錄下 dist 文件夾中的所有文件復(fù)制到鏡像中 /usr/share/nginx/html/ 目錄下;
          • COPY default.conf /etc/nginx/conf.d/default.confdefault.conf 復(fù)制到 etc/nginx/conf.d/default.conf,用本地的 default.conf 配置來(lái)替換 Nginx 鏡像里的默認(rèn)配置。

          6.構(gòu)建鏡像Docker 通過(guò) build 命令來(lái)構(gòu)建鏡像:

          docker?build?-t?jartto-docker-demo?.

          按照慣例,我們解釋一下上述代碼:

          • -t 參數(shù)給鏡像命名 jartto-docker-demo
          • . 是基于當(dāng)前目錄的 Dockerfile 來(lái)構(gòu)建鏡像

          執(zhí)行成功后,將會(huì)輸出:

          Sending?build?context?to?Docker?daemon??115.4MB
          Step?1/3?:?FROM?nginx
          ?--->?2622e6cca7eb
          Step?2/3?:?COPY?dist/?/usr/share/nginx/html/
          ?--->?Using?cache
          ?--->?82b31f98dce6
          Step?3/3?:?COPY?default.conf?/etc/nginx/conf.d/default.conf
          ?--->?7df6efaf9592
          Successfully?built?7df6efaf9592
          Successfully?tagged?jartto-docker-demo:latest

          鏡像制作成功!我們來(lái)查看一下容器:

          docker?image?ls?|?grep?jartto-docker-demo

          可以看到,我們打出了一個(gè) 133MB 的項(xiàng)目鏡像:

          jartto-docker-demo?latest?7df6efaf9592?About?a?minute?ago?133MB

          鏡像也有好壞之分,后續(xù)我們將介紹如何優(yōu)化,這里可以先暫時(shí)忽略。

          7.運(yùn)行容器

          docker?run?-d?-p?3000:80?--name?docker-vue?jartto-docker-demo

          這里解釋一下參數(shù):

          • -d 設(shè)置容器在后臺(tái)運(yùn)行
          • -p 表示端口映射,把本機(jī)的 3000 端口映射到 container80 端口(這樣外網(wǎng)就能通過(guò)本機(jī)的 3000 端口訪(fǎng)問(wèn)了
          • --name 設(shè)置容器名 docker-vue
          • jartto-docker-demo 是我們上面構(gòu)建的鏡像名字

          補(bǔ)充一點(diǎn):在控制臺(tái),我們可以通過(guò) docker ps 查看剛運(yùn)行的 ContainerID

          docker?ps?-a

          控制臺(tái)會(huì)輸出:

          CONTAINER?ID?IMAGE??????????????COMMAND??????????????????CREATED???????STATUS?PORTS??NAMES
          ab1375befb0b?jartto-docker-demo?"/docker-entrypoint.…"???8?minutes?ago?Up?7?minutes??0.0.0.0:3000->80/tcp??docker-vue

          如果你使用桌面端,那么打開(kāi) Docker Dashboard 就可以看到容器列表了,如下圖:

          8.訪(fǎng)問(wèn)項(xiàng)目因?yàn)槲覀冇成淞吮緳C(jī) 3000 端口,所以執(zhí)行:

          curl?-v?-i?localhost:3000

          或者打開(kāi)瀏覽器,訪(fǎng)問(wèn):localhost:3000

          9.發(fā)布鏡像

          如果你想為社區(qū)貢獻(xiàn)力量,那么需要將鏡像發(fā)布,方便其他開(kāi)發(fā)者使用。

          發(fā)布鏡像需要如下步驟:

          • 登陸 [dockerhub](https://hub.docker.com "dockerhub"),注冊(cè)賬號(hào);
          • 命令行執(zhí)行 docker login,之后輸入我們的賬號(hào)密碼,進(jìn)行登錄;
          • 推送鏡像之前,需要打一個(gè) Tag,執(zhí)行 docker tag /:

          全流程結(jié)束,以后我們要使用,再也不需要「搬石頭、砍木頭、畫(huà)圖紙、蓋房子」了,拎包入住。這也是 docker 獨(dú)特魅力所在。

          七、常規(guī)操作

          到這里,恭喜你已經(jīng)完成了 Docker 的入門(mén)項(xiàng)目!如果還想繼續(xù)深入,不妨接著往下看看。

          1.參數(shù)使用

          • FROM

            • 指定基礎(chǔ)鏡像,所有構(gòu)建的鏡像都必須有一個(gè)基礎(chǔ)鏡像,且 FROM 命令必須是 Dockerfile 的第一個(gè)命令
            • FROM [AS ] 指定從一個(gè)鏡像構(gòu)建起一個(gè)新的鏡像名字
            • FROM [:] [AS ] 指定鏡像的版本 Tag
            • 示例:FROM mysql:5.0 AS database
          • MAINTAINER

          • RUN

            • 構(gòu)建鏡像時(shí)要執(zhí)行的命令
            • RUN
            • 示例:RUN ["executable", "param1", "param2"]
          • ADD

            • 將本地的文件添加復(fù)制到容器中去,壓縮包會(huì)解壓,可以訪(fǎng)問(wèn)網(wǎng)絡(luò)上的文件,會(huì)自動(dòng)下載
            • ADD
            • 示例:ADD *.js /app 添加 js 文件到容器中的 app 目錄下
          • COPY
            • 功能和 ADD 一樣,只是復(fù)制,不會(huì)解壓或者下載文件
          • CMD
            • 啟動(dòng)容器后執(zhí)行的命令,和 RUN 不一樣,RUN 是在構(gòu)建鏡像是要運(yùn)行的命令
            • 當(dāng)使用 docker run 運(yùn)行容器的時(shí)候,這個(gè)可以在命令行被覆蓋
            • 示例:CMD ["executable", "param1", "param2"]
          • ENTRYPOINT

            • 也是執(zhí)行命令,和 CMD 一樣,只是這個(gè)命令不會(huì)被命令行覆蓋
            • ENTRYPOINT ["executable", "param1", "param2"]
            • 示例:ENTRYPOINT ["donnet", "myapp.dll"]
          • LABEL:為鏡像添加元數(shù)據(jù),key-value 形式

            • LABEL = = ...
            • 示例:LABEL version="1.0" description="這是一個(gè)web應(yīng)用"
          • ENV:設(shè)置環(huán)境變量,有些容器運(yùn)行時(shí)會(huì)需要某些環(huán)境變量

            • ENV 一次設(shè)置一個(gè)環(huán)境變量
            • ENV = = = 設(shè)置多個(gè)環(huán)境變量
            • 示例:ENV JAVA_HOME /usr/java1.8/
          • EXPOSE:暴露對(duì)外的端口(容器內(nèi)部程序的端口,雖然會(huì)和宿主機(jī)的一樣,但是其實(shí)是兩個(gè)端口)

            • EXPOSE
            • 示例:EXPOSE 80
            • 容器運(yùn)行時(shí),需要用 -p 映射外部端口才能訪(fǎng)問(wèn)到容器內(nèi)的端口
          • VOLUME

            :指定數(shù)據(jù)持久化的目錄,官方語(yǔ)言叫做掛載

            • VOLUME /var/log 指定容器中需要被掛載的目錄,會(huì)把這個(gè)目錄映射到宿主機(jī)的一個(gè)隨機(jī)目錄上,實(shí)現(xiàn)數(shù)據(jù)的持久化和同步。
            • VOLUME ["/var/log","/var/test".....] 指定容器中多個(gè)需要被掛載的目錄,會(huì)把這些目錄映射到宿主機(jī)的多個(gè)隨機(jī)目錄上,實(shí)現(xiàn)數(shù)據(jù)的持久化和同步
            • VOLUME /var/data var/log 指定容器中的 var/log 目錄掛載到宿主機(jī)上的 /var/data 目錄,這種形式可以手動(dòng)指定宿主機(jī)上的目錄
          • WORKDIR

            :設(shè)置工作目錄,設(shè)置之后 ,

            RUN、CMD、COPY、ADD

            的工作目錄都會(huì)同步變更

            • WORKDIR
            • 示例:WORKDIR /app/test
          • USER

            :指定運(yùn)行命令時(shí)所使用的用戶(hù),為了安全和權(quán)限起見(jiàn),根據(jù)要執(zhí)行的命令選擇不同用戶(hù)

            • USER :[]
            • 示例:USER test
          • ARG

            :設(shè)置構(gòu)建鏡像是要傳遞的參數(shù)

            • ARG [=]
            • ARG name=sss

          更多操作,請(qǐng)移步官方使用文檔[11]。

          八、最佳實(shí)踐

          在掌握 Docker 常規(guī)操作之后,我們很容易就可以打出自己想要的項(xiàng)目鏡像。然而不同的操作打出的鏡像也是千差萬(wàn)別。

          究竟是什么原因?qū)е络R像差異,我們不妨繼續(xù)探索。

          以下是在應(yīng)用 Docker 過(guò)程中整理的最佳實(shí)踐,請(qǐng)盡量遵循如下準(zhǔn)則:

          1.Require 明確:需要什么鏡像 2.步驟精簡(jiǎn):變化較少的 Step 優(yōu)先 3.版本明確:鏡像命名明確 4.說(shuō)明文檔:整個(gè)鏡像打包步驟可以重現(xiàn)

          推薦如下兩篇文章:Intro Guide to Dockerfile Best Practices[12]Best practices for writing Dockerfiles[13]

          九、總結(jié)

          容器化技術(shù)必將是云時(shí)代不可或缺的技能之一,而 Docker 只是滄海一粟。隨之而來(lái)的還有集群容器管理 K8sService Mesh 、Istio 等技術(shù)。打開(kāi) Docker 的大門(mén),不斷抽絲剝繭,逐層深入,你將感受到容器化的無(wú)窮魅力。

          趕快打開(kāi)技能邊界,為你的前端技術(shù)賦能吧!

          文章首發(fā)于?Jartto's?blog?,?轉(zhuǎn)載文章請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章出處,作者信息及本版權(quán)聲明

          原文鏈接:http://jartto.wang/2020/07/04/learn-docker/

          參考資料

          [1]

          故事: https://my.oschina.net/jamesview/blog/2994112

          [2]

          百科虛擬機(jī): https://baike.baidu.com/item/虛擬機(jī)/104440?fr=aladdin

          [3]

          Hypervisor: https://baike.baidu.com/item/hypervisor/3353492?fr=aladdin

          [4]

          Cgroups: https://baike.baidu.com/item/Cgroup/4988200?fr=aladdin

          [5]

          Docker 工作原理及容器化簡(jiǎn)易指南: http://dockone.io/article/8788

          [6]

          安裝 Docker: https://www.docker.com/get-started

          [7]

          Docker Engine: https://docs.docker.com/engine/reference/commandline/dockerd/

          [8]

          官網(wǎng)下載: https://www.docker.com/products/docker-desktop

          [9]

          Vue 腳手架: https://cli.vuejs.org/guide/creating-a-project.html#vue-create

          [10]

          下文: http://jartto.wang/2020/07/04/learn-docker/#

          [11]

          官方使用文檔: https://docs.docker.com/

          [12]

          Intro Guide to Dockerfile Best Practices: https://www.docker.com/blog/intro-guide-to-dockerfile-best-practices/

          [13]

          Best practices for writing Dockerfiles: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/



          推薦閱讀


          學(xué)習(xí)交流 Go 語(yǔ)言,掃碼回復(fù)「進(jìn)群」即可


          站長(zhǎng) polarisxu

          自己的原創(chuàng)文章

          不限于 Go 技術(shù)

          職場(chǎng)和創(chuàng)業(yè)經(jīng)驗(yàn)


          Go語(yǔ)言中文網(wǎng)

          每天為你

          分享 Go 知識(shí)

          Go愛(ài)好者值得關(guān)注


          瀏覽 77
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99爱视频在线观看 | 亚洲一级二级三级 | 特级西西444www大胆高清图片 | 激情五月片 | 亚洲精品无码激情AV在线观看 |