容器化部署 — 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
留言分享你的想法!
avatar-img
奧莉薇走在成為後端工程師之路上
23會員
167內容數
全端網頁開發專業知識分享
2025/04/26
※ 場景: 即時聊天應用: 設計一個支持多房間功能的即時聊天平台,像 WhatsApp、LINE或Facebook Messenger,提供文字、語音、視訊聊天功能,方便管理群組聊天。 功能亮點:加入特別功能,例如可加入多房間功能、使用者名單、表情符號支持、文件分享或訊息已讀未讀狀態。 展示
2025/04/26
※ 場景: 即時聊天應用: 設計一個支持多房間功能的即時聊天平台,像 WhatsApp、LINE或Facebook Messenger,提供文字、語音、視訊聊天功能,方便管理群組聊天。 功能亮點:加入特別功能,例如可加入多房間功能、使用者名單、表情符號支持、文件分享或訊息已讀未讀狀態。 展示
2025/04/26
※ 先建立基本的express後端服務: 1.建立新資料夾:Socket mkdir socket 2.進入資料夾:Socket cd ​bsocket 3. 安裝 Experss 到專案中 npm init -y //初始化專案,建立 package.json 檔 npm insta
Thumbnail
2025/04/26
※ 先建立基本的express後端服務: 1.建立新資料夾:Socket mkdir socket 2.進入資料夾:Socket cd ​bsocket 3. 安裝 Experss 到專案中 npm init -y //初始化專案,建立 package.json 檔 npm insta
Thumbnail
2025/04/10
※ 什麼是 Socket.io:一個基於傳統 WebSocket API 之上的框架。 ※ Socket.io常用功能: Custom Events:在 Socket.io 中,開發者可以創建自己的事件來處理特定的功能或需求。 Rooms:分組的功能。每個連接的用戶(或稱為 socket)可
Thumbnail
2025/04/10
※ 什麼是 Socket.io:一個基於傳統 WebSocket API 之上的框架。 ※ Socket.io常用功能: Custom Events:在 Socket.io 中,開發者可以創建自己的事件來處理特定的功能或需求。 Rooms:分組的功能。每個連接的用戶(或稱為 socket)可
Thumbnail
看更多
你可能也想看
Thumbnail
為什麼要用Docker安裝? Docker是一個容器化平台, 就類似於我們早期虛擬機的VMWare、Virtual Box…等, 虛擬機平台一般, 只是面向的是伺服端, 供企業快速、簡單、輕量的佈署開發完成的程式軟體, 並將相關的環境依賴皆封裝成一包所謂的映像檔(image), 透過這樣的方式減少
Thumbnail
為什麼要用Docker安裝? Docker是一個容器化平台, 就類似於我們早期虛擬機的VMWare、Virtual Box…等, 虛擬機平台一般, 只是面向的是伺服端, 供企業快速、簡單、輕量的佈署開發完成的程式軟體, 並將相關的環境依賴皆封裝成一包所謂的映像檔(image), 透過這樣的方式減少
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
前言 大家好上次我們教了如何建立自己的 Docker Image,今天我們要來教怎麼把自己做好的 Docker Image 上傳到 Docker Hub,如果以後自己在公司有搭建 Docker Registry,也可以用同樣方式上傳到公司的 Docker Registry 私有倉庫 登入 Doc
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
前言 上次講到 Dockerfile、DockerImage、Docker Container 他們之間的關係,今天我們要來熟悉 Docker Image 如何使用,教你如何抓取雲端上的 Docker Image, Docker Image 下載來源 當我們今天要要使用 Docker Imag
Thumbnail
前言 上次我們初步體驗 Docker 快速佈署能力,今天我們要來講解 Dockerfile、Docker Image 與 Docker Container 這些常見的名詞,我們來了解在我們佈署的時候做哪些事情 Docker 佈署流程 首先看到如下圖上半部,在我們一個完整的佈署流程,我們會先將我
Thumbnail
前言 上次我們初步體驗 Docker 快速佈署能力,今天我們要來講解 Dockerfile、Docker Image 與 Docker Container 這些常見的名詞,我們來了解在我們佈署的時候做哪些事情 Docker 佈署流程 首先看到如下圖上半部,在我們一個完整的佈署流程,我們會先將我
Thumbnail
前言 大家好在先前我們講了什麼是 Docker,Docker 好處有什麼以及怎麼安裝 Docker,今天我們要來開始初體驗 Docker 容器,使用後您會發現 Docker 非常的方便快速 Docker Hub 介紹 首先在開始學怎麼抓取 Docker Image 之前,我們要先來介紹 Doc
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 Engine 與 Docker Desktop 首先在講解怎麼安裝 Docker 時,我們先講解 Docker Engin
Thumbnail
前言 上次我們對 Docker 架構進行了講解,今天我們來講解 Docker 的好處,他到底可以幫助我們什麼事情 ? 為什麼 Docker 如此受人喜歡 ? 現在就來講述 Docker 有什麼好處 跨平台 Docker 可以確保在不同的作業系統是可運作的,可減少機器運作的問題 版本控制 打
Thumbnail
前言 上次我們對 Docker 架構進行了講解,今天我們來講解 Docker 的好處,他到底可以幫助我們什麼事情 ? 為什麼 Docker 如此受人喜歡 ? 現在就來講述 Docker 有什麼好處 跨平台 Docker 可以確保在不同的作業系統是可運作的,可減少機器運作的問題 版本控制 打
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News