iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0
自我挑戰組

30天搞定科技背後的東西系列 第 19 篇

Day 19 : Docker 為什麼要把程式裝進盒子裡?

  • 分享至 

  • xImage
  •  

昨天聊到 Git 和 GitHub,知道 Git 可以幫工程師記錄程式的不同版本
但我又突然想到一個問題
為什麼同一個程式,在我的電腦可以正常執行,換到另一台電腦就突然不能跑了?
明明程式碼都是一樣的
到底是哪裡不一樣?

所以今天就來看看,Docker 到底是在解決什麼問題!

一、為什麼會有「在我電腦可以跑」?
假設今天我寫好一個程式
在我的電腦上執行
成功!!
結果把程式交給朋友
他一執行
不能跑
這時候最經典的一句話就出現了
可是我電腦可以跑啊

問題可能不是程式碼本身
而是兩台電腦的環境不一樣
例如作業系統不同、安裝的套件不同、版本不同,甚至連設定都可能不一樣

所以程式要正常執行
不只是需要程式碼
還需要一個適合它的環境

二、那 Docker 是什麼?
Docker 可以簡單理解成
把程式和它需要的執行環境一起打包起來
這就是為什麼常常會看到有人把 Docker 比喻成盒子

想像一下
如果我要寄一個東西給朋友
我不只是把東西本身丟給他
而是會放進一個箱子裡,再把需要一起帶過去的東西整理好

Docker 的概念有點類似
把程式、需要的套件、設定等一起整理成一個可以執行的環境
這樣換到其他電腦時
就比較不需要重新處理一大堆環境設定

三、Docker 裡面的「容器」是什麼?
Docker 最常聽到的一個詞就是
Container,容器
容器可以想像成一個隔離的小環境
程式就在這個環境裡執行
而且不同的容器可以有自己的環境和設定

例如今天有兩個程式
程式 A 需要某個版本的套件
程式 B 需要另一個版本

如果全部直接裝在同一台電腦裡
就可能互相影響

但如果分別放在不同的容器裡
就可以讓它們各自使用自己的環境
這樣管理起來就方便很多

四、Docker 跟虛擬機一樣嗎?
這兩個東西很容易被搞混
因為它們都可以把不同的環境隔離開來
但概念並不完全一樣
虛擬機通常會模擬一台完整的電腦
裡面甚至可以安裝一整套作業系統
而 Docker Container 則比較像是在同一個系統上,建立一個獨立的執行環境

所以通常來說
虛擬機比較像是開了一台新的電腦
Container 比較像是在同一台電腦裡隔出一個專門給程式使用的空間
這也是 Docker 很方便的地方

五、為什麼工程師會需要 Docker?
因為現在很多軟體專案都不是只有一個程式
可能會有前端、後端、資料庫,甚至還有其他服務
如果全部都直接安裝在自己的電腦裡
可能會遇到一堆環境設定問題
但如果把不同服務放進不同的 Container
就可以讓每個服務有自己的環境

例如
前端 → 一個 Container
後端 → 一個 Container
資料庫 → 一個 Container
它們彼此之間可以互相連接
但又可以分開管理

這樣當專案要搬到另一台電腦或伺服器時
就比較容易把整套環境一起建立起來

六、今天才發現,Docker 解決的其實是「環境問題」
以前看到 Docker 的時候
只知道那是一個工程師很常使用的工具
但今天才比較理解它存在的原因
它不是單純把程式裝進一個盒子裡而已
而是希望讓程式的執行環境更容易被建立、搬移和管理
所以當工程師說 把它 Dockerize
簡單來說,就是把這個程式整理成可以在 Docker 環境中執行的形式
這樣換到不同環境時
就比較不容易遇到
你那邊可以,我這邊不行的問題

七、心得
在還沒有上大學學程式設計以前
我一直覺得
程式就是程式
只要把程式碼給別人,應該就可以直接執行
但今天才發現
程式碼本身只是其中一部分
它還需要很多環境才能正常運作
而 Docker 就像是幫程式準備好一個「專屬的小房間」
把需要的東西整理好,再讓它在裡面執行
所以現在再看到「Container」這個詞
至少不會再覺得它是在講什麼神秘的東西了

⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯

明日預告

今天知道 Docker 可以把程式和它需要的環境整理在一起
但我又突然想到一個問題
如果現在很多網站、App 都需要伺服器、資料庫和 Docker,那這些東西到底是怎麼被管理的?
而且如果今天有一個服務突然來了幾十萬個人同時使用
難道工程師要自己一台一台去處理嗎?

那明天就來討論一下
「雲端上的服務到底是怎麼被管理的呢?」


上一篇
Day 18 : Git / GitHub 到底是在做什麼?
下一篇
Day 20 : 雲端上的服務到底是怎麼被管理的?
系列文
30天搞定科技背後的東西 共 21 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言