容器化部署 — Docker介紹

更新於 發佈於 閱讀時間約 4 分鐘

※ 透過三個場景來理解需要Docker的理由:

● 想像第一個場景

  • 你開發好的 Express.js 後端服務已經順利通過了 localhost 的測試。
  • 發給你的同事以後,同事卻說他打不開。
  • 你用同事的電腦 debug 以後,花了好幾個小時終於修好了。
  • 修好以後把服務部署到線上主機,結果線上主機打開又報錯了...

發生原因

● 執行環境 (Environment)指的是程式運行時所依賴的所有條件,除了程式本身以外的因素:

  • 作業系統不同:(Windows XP, Windows 10, macOS, Debian, Ubuntu, CentOS ...)。
  • 軟體版本不同: (Python, Node, Java, gcc ...)。
  • 硬體架構不同: (arm, x86, risc-v ...)。
  • 硬體配置不同: (cpu, ram, disk ...)。

● 結論:

同一個程式在不同的環境下,會有不同的結果。

※ 如何解決環境不同的問題:虛擬化技術

  • docker的核心理念把應用程式和程式所需要的「環境」,全部打包成像一個個的貨櫃來運送。
  • 結論這就是透過虛擬化的技術來解決環境不同的問題。
raw-image

※ 虛擬機 vs Docker:

虛擬機:

  • 模擬硬體 + 作業系統 + 所有東西。
  • 資源分配是靜態的。
  • 啟動速度慢。
  • 隔離級別高。

Docker:

  • 模擬執行環境 + 你的程式。
  • 資源分配是動態的。
  • 啟動速度快。
  • 隔離級別較低。

※ 隔離級別:

● 想像第二個場景

  • 你開發好的後端順利部署到線上主機了。
  • 你同事的服務也要部署到同一台主機。
  • 他不小心覆蓋到你的服務需要的檔案。
  • 你的服務壞掉了...。

結論說明了服務隔離的重要性。

※ 虛擬化技術提供的服務隔離:

  • 每個 Docker Container 從容器內部看就是一台獨立的機器。
  • Docker 內部不會影響外面(Host–主機)的東西,例如被病毒攻擊也不會影響真正跑Docker的主機,只是Container壞掉而已。
  • Docker 外面也沒辦法直接影響 Container 裡面的東西。
  • Container 之間彼此也無法造成影響,除非額外設定。

※ 自動化完成重複性的動作:

● 想像第三個場景

1.你每部署一個服務,就需要在新的主機上做很多事:

  • 安裝 Node。
  • 安裝 yarn。
  • 執行 yarn install 安裝需要的套件。
  • 設定各種其他有的沒的東西...終於設定好了。

2.結果老闆要你一次部署到 100 台主機上面。

※ 容器化提供的自動化流程:

  • 為你的服務編寫一個腳本 Dockerfile,腳本會說明如何去編寫打包一個Image。
  • 根據這個腳本來完成你的服務需要的所有前置要求。
  • 腳本完成後,生成一個可以直接運行的容器鏡像 Image。
  • Image具有濃縮的概念,就是把應用程式和程式所需要的「環境」全部打包成一個Image。你可以把 Image 便利地推送到任何地方。
  • 並且在任何需要部署的地方將 Image 拉取下來。
  • 只要那個地方有 Docker,就可以一鍵啟動你的服務。

※ Dockerfile:一個把服務打包成 Image 的腳本

  1. 腳本:是一行行由上而下的一個概念。把原本做的事情,寫成一段很多個命令的腳本。
  2. Dockerfile基本概念就是透過指令讓Docker去做我不想要重複做的事情,讓它照著腳本來運行。
  3. 常用Dockerfile腳本編寫指令
  • FROM: 從別人已經寫好的 Image 為基礎,讓使用者不需要從零開始,跳過許多繁瑣的安裝與配置過程。FROM 是 Dockerfile 中的第一條指令,為整個構建過程設定基礎。例如:使用各種框架的Image。
  • MAINTAINER: 設定 Image 的作者的資訊,相當於註解。
  • LABEL: 設定 Image 的標籤(key-value pair),方便尋找哪個版本的Image。
  • EXPOSE: 這個 Image 運行後需要對外開放的端口。也就是想要在Docker上面運行一個後端服務,一定要打開對外開放的一個端口。
  • COPY: 把現有的檔案複製進去正在打包的 Image。
  • RUN: 執行一段指令。例如:npm install。
  • CMD: 宣告一個在 Image 被載入到 Container 被啟動後要執行的指令。例如:使用CMD去執行node然後index.js的這個指令。

※ 總結:

  • 通過 Dockerfile 將服務打包成 Imag。
  • 將打包好的 Image 上傳到 repository(倉庫的概念)。
  • 從 repository 把 Image 下載到主機。
  • 在主機通過 Docker 把這個 Image 啟動成 Container。



全端網頁開發專業知識分享
留言
avatar-img
留言分享你的想法!
※ Google Cloud Platform (GCP): 網址:https://cloud.google.com/ ※ 進入控制台:建立專案 ※ 第一步設立帳單: ※ 第二步管理帳單帳戶: 一個帳單帳戶就是一個付款方式。 ※ 建立付款帳戶: ※ 新增專案: ※ 租用虛擬主機:Co
※ 什麼是線上部署(Deploy): 將應用程式或服務從本地環境轉移到伺服器或雲端平台上,確保其能夠透過網路被公眾或特定用戶訪問的過程。其中包括將域名透過 DNS 配置指向伺服器的公網 IP(Public IP),而該公網 IP 上運行著應用程式,並確保相關的服務端口已開放以便外部訪問。 ※ 線
※ 建立通知伺服器訂單完成狀態的 API: ※ 進入Default Application帳號裡面的Add Webhook: 網址:https://developer.paypal.com/dashboard/applications/sandbox ※ 複製END_POINT的URL:.en
※ 安裝 PayPal 伺服器 SDK:在伺服器端處理訂單和付款 網址:https://developer.paypal.com/studio/checkout/standard/getstarted //在開發和測試階段模擬或測試 PayPal 結帳流程 npm install --
※ 前端串接: 第一步設定paypal JavaScript SDKconfiguration:views --> index.ejs 網址:https://developer.paypal.com/sdk/js/configuration/ <!--顯示paypal 按鈕-->     <d
※ PayPal官方文件教學: 網址:https://developer.paypal.com/home/ 第一步:註冊帳號 第二步:註冊商業帳號 第三步:註冊成功 ※ PayPal REST APIs說明: 登入開發者平台:在Sandbox模式開發 網址:https://de
※ Google Cloud Platform (GCP): 網址:https://cloud.google.com/ ※ 進入控制台:建立專案 ※ 第一步設立帳單: ※ 第二步管理帳單帳戶: 一個帳單帳戶就是一個付款方式。 ※ 建立付款帳戶: ※ 新增專案: ※ 租用虛擬主機:Co
※ 什麼是線上部署(Deploy): 將應用程式或服務從本地環境轉移到伺服器或雲端平台上,確保其能夠透過網路被公眾或特定用戶訪問的過程。其中包括將域名透過 DNS 配置指向伺服器的公網 IP(Public IP),而該公網 IP 上運行著應用程式,並確保相關的服務端口已開放以便外部訪問。 ※ 線
※ 建立通知伺服器訂單完成狀態的 API: ※ 進入Default Application帳號裡面的Add Webhook: 網址:https://developer.paypal.com/dashboard/applications/sandbox ※ 複製END_POINT的URL:.en
※ 安裝 PayPal 伺服器 SDK:在伺服器端處理訂單和付款 網址:https://developer.paypal.com/studio/checkout/standard/getstarted //在開發和測試階段模擬或測試 PayPal 結帳流程 npm install --
※ 前端串接: 第一步設定paypal JavaScript SDKconfiguration:views --> index.ejs 網址:https://developer.paypal.com/sdk/js/configuration/ <!--顯示paypal 按鈕-->     <d
※ PayPal官方文件教學: 網址:https://developer.paypal.com/home/ 第一步:註冊帳號 第二步:註冊商業帳號 第三步:註冊成功 ※ PayPal REST APIs說明: 登入開發者平台:在Sandbox模式開發 網址:https://de
你可能也想看
Google News 追蹤
Thumbnail
該來的終究還是來了 度過焦躁不安的一整周,學徒老人家我的不安感等比級數的襲來,自3/19寫了第一篇關於<巴克萊銀行:倉促撤退>的報告,看到市場上的機構法人有如大洪水、地震來臨前夕開始竄逃撤退。 海湖莊園協議 接著,在3/31與4/2兩天接著寫了川普與他的財經團隊在海湖莊園豪
Thumbnail
空單爆天量、技術指標超賣、情緒恐慌到極致:美股嘎空行情有機會啟動嗎? 重點摘要: 技術面極度超賣,反彈條件醞釀中,但尚未明確止穩 SPY 與 QQQ 的重要指標,如MACD、KDJ、RSI等指標進入極端超賣區,但尚未出現底部鈍化或明確反轉訊號,技術面仍屬空方主導。 連續出現跳空缺口,空方動
Thumbnail
全新 vocus 挑戰活動「方格人氣王」來啦~四大挑戰任你選,留言 / 愛心 / 瀏覽數大 PK,還有新手專屬挑戰!無論你是 vocus 上活躍創作者或剛加入的新手,都有機會被更多人看見,獲得站上版位曝光&豐富獎勵!🏆
Thumbnail
為什麼要用Docker安裝? Docker是一個容器化平台, 就類似於我們早期虛擬機的VMWare、Virtual Box…等, 虛擬機平台一般, 只是面向的是伺服端, 供企業快速、簡單、輕量的佈署開發完成的程式軟體, 並將相關的環境依賴皆封裝成一包所謂的映像檔(image), 透過這樣的方式減少
Docker是一種容器化技術,可以將應用程式及相關依賴項目打包到一個容器中。這篇文章介紹了安裝Docker的步驟,以及幾個比較偏向使用者的應用程式。
Thumbnail
前言 大家好上次我們教了如何建立自己的 Docker Image,今天我們要來教怎麼把自己做好的 Docker Image 上傳到 Docker Hub,如果以後自己在公司有搭建 Docker Registry,也可以用同樣方式上傳到公司的 Docker Registry 私有倉庫 登入 Doc
Thumbnail
前言 上次講到 Dockerfile、DockerImage、Docker Container 他們之間的關係,今天我們要來熟悉 Docker Image 如何使用,教你如何抓取雲端上的 Docker Image, Docker Image 下載來源 當我們今天要要使用 Docker Imag
Thumbnail
前言 上次我們初步體驗 Docker 快速佈署能力,今天我們要來講解 Dockerfile、Docker Image 與 Docker Container 這些常見的名詞,我們來了解在我們佈署的時候做哪些事情 Docker 佈署流程 首先看到如下圖上半部,在我們一個完整的佈署流程,我們會先將我
Thumbnail
前言 大家好在先前我們講了什麼是 Docker,Docker 好處有什麼以及怎麼安裝 Docker,今天我們要來開始初體驗 Docker 容器,使用後您會發現 Docker 非常的方便快速 Docker Hub 介紹 首先在開始學怎麼抓取 Docker Image 之前,我們要先來介紹 Doc
Thumbnail
前言 上次我們講到 Docker 的功用與好處,今天我們要在講解,如何安裝 Docker 這個容器,讓我們在之後的教學應用更好的實作與練習,現在讓我們開始吧 Docker Engine 與 Docker Desktop 首先在講解怎麼安裝 Docker 時,我們先講解 Docker Engin
Thumbnail
前言 上次我們對 Docker 架構進行了講解,今天我們來講解 Docker 的好處,他到底可以幫助我們什麼事情 ? 為什麼 Docker 如此受人喜歡 ? 現在就來講述 Docker 有什麼好處 跨平台 Docker 可以確保在不同的作業系統是可運作的,可減少機器運作的問題 版本控制 打
Thumbnail
前言 上次我們針對 Docker 這樣容器化技術做了一點介紹,今天我們要來講解 Docker 架構,你是否發現在每次程式上伺服器的流程很麻煩呢 ? 是否發現你寫的程式在別的作業系統不能用呢 ? 如果你遇到這些問題,Docker 都可以幫助你解決這些問題 Docker 架構 在 Docker 這
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇
Thumbnail
該來的終究還是來了 度過焦躁不安的一整周,學徒老人家我的不安感等比級數的襲來,自3/19寫了第一篇關於<巴克萊銀行:倉促撤退>的報告,看到市場上的機構法人有如大洪水、地震來臨前夕開始竄逃撤退。 海湖莊園協議 接著,在3/31與4/2兩天接著寫了川普與他的財經團隊在海湖莊園豪
Thumbnail
空單爆天量、技術指標超賣、情緒恐慌到極致:美股嘎空行情有機會啟動嗎? 重點摘要: 技術面極度超賣,反彈條件醞釀中,但尚未明確止穩 SPY 與 QQQ 的重要指標,如MACD、KDJ、RSI等指標進入極端超賣區,但尚未出現底部鈍化或明確反轉訊號,技術面仍屬空方主導。 連續出現跳空缺口,空方動
Thumbnail
全新 vocus 挑戰活動「方格人氣王」來啦~四大挑戰任你選,留言 / 愛心 / 瀏覽數大 PK,還有新手專屬挑戰!無論你是 vocus 上活躍創作者或剛加入的新手,都有機會被更多人看見,獲得站上版位曝光&豐富獎勵!🏆
Thumbnail
為什麼要用Docker安裝? Docker是一個容器化平台, 就類似於我們早期虛擬機的VMWare、Virtual Box…等, 虛擬機平台一般, 只是面向的是伺服端, 供企業快速、簡單、輕量的佈署開發完成的程式軟體, 並將相關的環境依賴皆封裝成一包所謂的映像檔(image), 透過這樣的方式減少
Docker是一種容器化技術,可以將應用程式及相關依賴項目打包到一個容器中。這篇文章介紹了安裝Docker的步驟,以及幾個比較偏向使用者的應用程式。
Thumbnail
前言 大家好上次我們教了如何建立自己的 Docker Image,今天我們要來教怎麼把自己做好的 Docker Image 上傳到 Docker Hub,如果以後自己在公司有搭建 Docker Registry,也可以用同樣方式上傳到公司的 Docker Registry 私有倉庫 登入 Doc
Thumbnail
前言 上次講到 Dockerfile、DockerImage、Docker Container 他們之間的關係,今天我們要來熟悉 Docker Image 如何使用,教你如何抓取雲端上的 Docker Image, Docker Image 下載來源 當我們今天要要使用 Docker Imag
Thumbnail
前言 上次我們初步體驗 Docker 快速佈署能力,今天我們要來講解 Dockerfile、Docker Image 與 Docker Container 這些常見的名詞,我們來了解在我們佈署的時候做哪些事情 Docker 佈署流程 首先看到如下圖上半部,在我們一個完整的佈署流程,我們會先將我
Thumbnail
前言 大家好在先前我們講了什麼是 Docker,Docker 好處有什麼以及怎麼安裝 Docker,今天我們要來開始初體驗 Docker 容器,使用後您會發現 Docker 非常的方便快速 Docker Hub 介紹 首先在開始學怎麼抓取 Docker Image 之前,我們要先來介紹 Doc
Thumbnail
前言 上次我們講到 Docker 的功用與好處,今天我們要在講解,如何安裝 Docker 這個容器,讓我們在之後的教學應用更好的實作與練習,現在讓我們開始吧 Docker Engine 與 Docker Desktop 首先在講解怎麼安裝 Docker 時,我們先講解 Docker Engin
Thumbnail
前言 上次我們對 Docker 架構進行了講解,今天我們來講解 Docker 的好處,他到底可以幫助我們什麼事情 ? 為什麼 Docker 如此受人喜歡 ? 現在就來講述 Docker 有什麼好處 跨平台 Docker 可以確保在不同的作業系統是可運作的,可減少機器運作的問題 版本控制 打
Thumbnail
前言 上次我們針對 Docker 這樣容器化技術做了一點介紹,今天我們要來講解 Docker 架構,你是否發現在每次程式上伺服器的流程很麻煩呢 ? 是否發現你寫的程式在別的作業系統不能用呢 ? 如果你遇到這些問題,Docker 都可以幫助你解決這些問題 Docker 架構 在 Docker 這
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇