Docker 入門教學:不用安裝,用 Cloud Shell 跑出第一個容器

Docker 入門教學最快的起點:打開免費的 Cloud Shell,一行 docker run 就跑出第一個容器,不用安裝。

很多人學 Docker 第一關就卡在「安裝」:Mac 要裝 Homebrew、Windows 要開 WSL、公司電腦沒有管理員權限。這篇完全跳過安裝,只要有 Google 帳號和瀏覽器,跟著做大約 10 分鐘,就能親手跑起一個真的網頁伺服器。

這是「容器系列」的第 1 篇。系列會從 Docker 一路帶到 Kubernetes、Cloud Run、GKE,每一篇都在 Cloud Shell 實際跑過,指令和輸出都是真實結果。

Docker 入門三個名詞:映像檔像雞蛋糕模具、容器像烤出來的雞蛋糕、Registry 像賣模具的市集

為什麼你需要知道

  • 「我電腦可以跑,你電腦不行」:同一支程式,換一台電腦就壞掉,原因常常是少裝一個套件、版本不一樣。Docker 就是為了解決這件事出現的
  • 雲端服務幾乎都吃容器:Google Cloud 的 Cloud Run、GKE,交給它的都是「容器映像檔」。不懂 Docker,後面這些服務連第一步都踏不出去
  • 面試很愛問:雲端、後端、DevOps 的面試,常會從「容器跟虛擬機差在哪」「映像檔跟容器差在哪」問起
  • 很多人卡在安裝就放棄了:這篇用 Cloud Shell,跳過最容易勸退人的那一步,先體驗成功,再回頭理解原理

Docker 是什麼?先搞懂它在解決什麼問題

白話是什麼

Docker 是一個工具,它把「程式」和「程式需要的所有東西」(執行環境、套件、設定)打包成一包,讓這一包在任何裝了 Docker 的電腦上,都用一模一樣的方式跑起來。

打包好、正在跑的那一包,叫做容器(Container)。

生活比喻:夜市的雞蛋糕

想像你要開一攤雞蛋糕:

  • 模具決定了雞蛋糕的形狀,做好之後就固定不變
  • 用同一個模具,可以烤出很多個一模一樣的雞蛋糕
  • 一個雞蛋糕被吃掉了,模具不受影響,再烤一個就好
  • 模具可以向模具行買現成的,不用自己開模

Docker 的世界一模一樣,後面會一直用這個比喻:

Docker 名詞白話是什麼雞蛋糕比喻
映像檔(Image)打包好、不能改的範本,裡面有程式和它需要的環境模具
容器(Container)用映像檔「跑起來」的那一份,正在執行中烤出來的雞蛋糕
Registry(映像檔倉庫)存放、分享映像檔的地方,最有名的是 Docker Hub模具行、模具市集

Docker 官方文件的說法是:映像檔是「唯讀的範本」,容器是「映像檔可以執行的實例」。翻成白話,就是模具和雞蛋糕的關係。

來龍去脈:為什麼叫 Docker?

英文的 docker 是「碼頭工人」,負責在港口裝卸貨櫃。

貨櫃的厲害之處在於規格統一:不管裡面裝的是香蕉還是汽車零件,外面都是同一種箱子,船、吊車、卡車都能直接搬。Docker 想做的就是軟體界的貨櫃,所以它的標誌是一隻背著貨櫃的鯨魚。

「把程式關在隔離環境裡跑」的技術在 Linux 上其實早就有了,只是設定很麻煩、各家工具不統一。Docker 在 2013 年推出後,把它變成幾個簡單的指令,加上統一的映像檔格式和 Docker Hub,容器才真正普及。

容器跟虛擬機差在哪、容器的隔離原理,站上有一篇專門在講:容器 (Container) 技術是什麼?從零開始看懂 Docker 與容器化應用。這篇專心在「動手跑起來」。

為什麼要學

不懂 Docker,你會一直被「環境」卡住:教學文的指令在你電腦跑不起來、同事給的程式要裝一整天、部署到雲端不知道要交什麼東西給它。學會 Docker 之後,這些問題都變成「把映像檔拿來跑」一句話。


動手做:用 Cloud Shell 跑出第一個容器

在哪裡做:Google Cloud Shell,不用建專案、不用綁信用卡
要多久:大約 10 分鐘
會不會花錢:不會。官方定價頁寫明 Cloud Shell 對有 Google Cloud 帳號的人免費,每週可以用 50 小時

先認識幾個等一下會一直出現的名詞:

  • Cloud Shell:Google 免費借你的一台雲端 Linux 電腦,用瀏覽器就能操作,裡面已經裝好 Docker
  • 終端機(Terminal):一個黑底白字的視窗,你打字下指令,電腦回你文字結果。不用滑鼠點按鈕,全部用打字
  • 指令:你在終端機裡打的一行字,例如 docker run hello-world,打完按 Enter 就會執行
  • 伺服器(Server):一直開著、等別人來要資料的程式或電腦。你打開一個網頁,就是在跟某台伺服器要網頁內容

步驟 1:打開 Cloud Shell

用瀏覽器打開 shell.cloud.google.com,用你的 Google 帳號登入,個人的 Gmail 就可以。

第一次打開時,Cloud Shell 要花幾十秒「佈建機器」,畫面上會跳出這個視窗:

第一次打開 Cloud Shell 會跳出「授權 Cloud Shell」視窗,Docker 教學用不到,按授權或拒絕都可以

它是在問:要不要讓 Cloud Shell 用你的身分去呼叫 Google Cloud 的服務。這篇只用 Docker,用不到這個權限,按「授權」或「拒絕」都可以。按拒絕的話,之後真的需要時它會再問一次。

等它跑完,你會看到一個黑色的終端機:

Cloud Shell 打開後的終端機畫面,沒有設定任何專案也能使用 Docker

畫面上那幾行英文是在說「你還沒選專案,要用的話可以這樣設定」。這篇不用理它,Docker 不需要專案。

最後一行的 ~$ 叫做提示字元,意思是「我準備好了,請下指令」。~ 代表你現在在自己的家目錄。

截圖裡的提示字元有縮短,你的畫面會是「你的帳號@cloudshell:~$」,意思一樣。

步驟 2:確認 Docker 已經裝好

在終端機輸入下面這行,按 Enter:

docker version

指令不用一個字一個字打,可以直接複製文章裡的指令,點一下終端機再貼上(Mac 按 Cmd+V),最後按 Enter。

實際輸出(後半段省略):

Client: Docker Engine - Community
 Version:           29.9.2
 API version:       1.56
 Go version:        go1.26.10
 Git commit:        a82e528
 Built:             Tue Oct 20 18:44:40 2026
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          29.9.2
  API version:      1.56 (minimum version 1.40)
  (後面省略)
在 Cloud Shell 輸入 docker version,看到 Client 和 Server 兩段代表 Docker 已經裝好可以用

看到 Client 和 Server 兩段,就代表 Docker 已經可以用了。為什麼會有兩段?

  • Client(客戶端):就是你打的 docker 這個指令,負責「點單」
  • Server(伺服器端,也叫 Docker daemon):在背景一直開著的程式,負責真正去下載映像檔、建立容器,像是後場的師傅

你在前台點單,師傅在後場做。Docker 官方文件把這叫做「客戶端-伺服器架構」,之後看到 daemon 這個字,就想成後場師傅。

步驟 3:跑第一個容器 hello-world

docker run hello-world

實際輸出:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
4f55086f7dd0: Pull complete
d5e71e642bf5: Download complete
Digest: sha256:11a3eb1597e864c51b3f56733cb2e8a90bf0c284bfc05f9444d81c558bc848aa
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
(後面是一些推薦連結,省略)
docker run hello-world 的實際輸出:本機找不到映像檔就自動下載,再建立容器印出 Hello from Docker

恭喜,這就是你的第一個容器。前面幾行在說什麼:

  • Unable to find image 'hello-world:latest' locally:本機沒有這個映像檔(模具)
  • Pulling from library/hello-world:所以去 Registry 下載。Pull 就是「把映像檔下載到本機」
  • Status: Downloaded newer image:下載完成

後面那段英文是 hello-world 這個程式自己印出來的,它很貼心地解釋了剛剛發生的 4 件事:

步驟原文在說什麼雞蛋糕比喻
1Client 聯絡 daemon你跟師傅點單
2daemon 從 Docker Hub 下載 hello-world 映像檔師傅發現沒有這個模具,去模具行買
3daemon 用映像檔建立一個新容器並執行用模具烤出一個雞蛋糕
4daemon 把輸出傳回 Client,顯示在你的終端機把雞蛋糕交到你手上

docker run 一個指令就包辦了「下載、建立、啟動」三件事,這是最常用的 Docker 指令。

步驟 4:開一個真正的網站:nginx

hello-world 印完字就結束了。這次來跑一個會一直開著的東西:nginx。

nginx(念作 engine-x)是全世界最常用的網頁伺服器之一,它的工作就是「有人來要網頁,就把網頁送過去」。平常要用 nginx,得先在電腦上安裝、設定;用 Docker,一行就好:

docker run -d -p 8080:80 --name web nginx

實際輸出:

Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
8334177aa35b: Pull complete
9a2c3eb3312e: Pull complete
f2be67225471: Pull complete
d5f3a4724daf: Pull complete
24bf03b6a474: Pull complete
dd00b11a22aa: Pull complete
a856bfc2a772: Pull complete
ee284e8d8c11: Download complete
6542b5f86ffd: Download complete
Digest: sha256:4c41e2d0a3a55b325ed572cd0200bdb72af1433c3daa2bca6ef8eea68ce504a2
Status: Downloaded newer image for nginx:latest
b8f2578b014589319443fe273ff4667aed4c45d5a2527b6e8a6386f25f0932dd
docker run -d -p 8080:80 --name web nginx 的輸出:下載 nginx 映像檔的多個層之後,印出容器 ID

最後那一長串英數字是容器 ID,每個容器都有一個獨一無二的編號。看到它,就代表容器已經在背景跑起來了。

這行指令每個部分的意思:

docker run 指令拆解:-d 背景執行、-p 8080:80 把主機的 8080 對到容器的 80、--name 取名字、最後是映像檔名稱
部分意思不加會怎樣
docker run用映像檔建立並啟動一個容器
-ddetach,在背景執行,終端機馬上還給你nginx 的訊息會一直佔住畫面,要按 Ctrl+C 才能回來,而且按了容器就停了
-p 8080:80把 Cloud Shell 的 8080 號門,接到容器裡的 80 號門容器在跑,但外面連不進去
--name web幫容器取名叫 web,之後用名字操作它Docker 會隨機取一個名字,例如 great_jepsen
nginx要用的映像檔名稱

-p 8080:80 是最多人卡住的地方,先講清楚 Port(連接埠):

Port 是什麼:一台電腦上可以同時跑很多個服務,Port 就是用來分辨「你要找哪一個」的號碼,範圍是 0 到 65535。
比喻:電腦的 IP 位址像一棟大樓的地址,Port 像房間號碼。網頁伺服器習慣住在 80 號房,所以 nginx 在容器裡就是在 80 號房等客人。

容器是一個隔離的小空間,它的 80 號房外面的人敲不到。-p 8080:80 的意思是:在 Cloud Shell 這棟大樓開一扇 8080 號門,有人敲這扇門,就轉到容器裡的 80 號房。

記法:冒號左邊是外面(主機),右邊是裡面(容器)。

步驟 5:用 docker ps 看正在跑的容器

docker ps

實際輸出:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
b8f2578b0145   nginx     "/docker-entrypoint.…"   33 seconds ago   Up 32 seconds   0.0.0.0:8080->80/tcp   web
docker ps 顯示 web 容器正在執行,Port 欄位是 0.0.0.0:8080->80/tcp

ps 來自 Linux 的「process status」,意思是「列出正在跑的東西」。每一欄的意思:

欄位意思
CONTAINER ID容器 ID 的前 12 碼,跟剛剛那一長串是同一個
IMAGE用哪個映像檔建的
COMMAND容器啟動時執行的程式(太長被截掉了)
CREATED多久以前建立的
STATUSUp 代表正在跑,後面是跑了多久
PORTS0.0.0.0:8080->80/tcp:主機的 8080 轉到容器的 80,就是剛剛 -p 設定的
NAMES容器名字,就是 --name 取的 web

步驟 6:用 Web Preview 打開網頁

容器裡的 nginx 已經在等客人了,現在去敲門。

Cloud Shell 右上角有一個「網頁預覽」按鈕(一個框框裡有眼睛的圖示),點下去選「透過以下通訊埠預覽:8080」:

Cloud Shell 右上角的網頁預覽選單,選擇透過通訊埠 8080 預覽

瀏覽器會開一個新分頁,看到這個畫面就成功了:

透過 Cloud Shell 網頁預覽打開容器裡的 nginx,出現 Welcome to nginx! 歡迎頁

這個網頁是容器裡的 nginx 送出來的。你沒有安裝 nginx、沒有改任何設定檔,一行 docker run 就有一台網頁伺服器。

Web Preview 是什麼:Cloud Shell 的機器在 Google 機房裡,你的瀏覽器沒辦法直接連進去。Web Preview 是 Google 幫你搭的一條專屬通道,官方文件寫明只有你自己的帳號能打開,別人拿到網址也進不來。可以預覽的 Port 範圍是 2000 到 65000,選單上預設是 8080,要用別的號碼就點「變更通訊埠」。

步驟 7:同一個映像檔,再開第二個容器

一個模具可以烤很多個雞蛋糕。換一個 Port、換一個名字,再開一個:

docker run -d -p 8081:80 --name web2 nginx
docker ps

實際輸出:

13fd73624ea5fb06337263af991d42c667d9810ff363677a4e84926e1afd81d7
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                  PORTS                  NAMES
13fd73624ea5   nginx     "/docker-entrypoint.…"   1 second ago     Up Less than a second   0.0.0.0:8081->80/tcp   web2
b8f2578b0145   nginx     "/docker-entrypoint.…"   39 seconds ago   Up 37 seconds           0.0.0.0:8080->80/tcp   web
用同一個 nginx 映像檔開第二個容器 web2,docker ps 顯示兩個容器同時在跑

注意兩件事:

  • 這次沒有再下載,因為 nginx 映像檔(模具)已經在本機了,所以不到一秒就跑起來
  • 兩個容器的 IMAGE 都是 nginx,但 CONTAINER ID 不一樣:同一個模具,烤出兩個獨立的雞蛋糕。它們在容器裡都住 80 號房,但對外分別開了 8080 和 8081 兩扇門,所以不會打架

用 curl 確認第二個也能連:

curl -s localhost:8081 | grep title
<title>Welcome to nginx!</title>
用 curl 連線 localhost:8081,取得 nginx 歡迎頁的標題

curl 是什麼:一個在終端機裡「開網頁」的工具,它不會把網頁畫出來,而是直接把網頁的原始內容印出來。localhost 是「這台電腦自己」的意思。後面的 | grep title 是只挑出含有 title 的那一行,免得整頁 HTML 洗版。

步驟 8:用 docker ps -a 看所有容器

剛剛的 hello-world 容器跑去哪了?docker ps 只列出正在跑的,加上 -a(all)才會列出全部:

docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED              STATUS                          PORTS                  NAMES
13fd73624ea5   nginx         "/docker-entrypoint.…"   29 seconds ago       Up 28 seconds                   0.0.0.0:8081->80/tcp   web2
b8f2578b0145   nginx         "/docker-entrypoint.…"   About a minute ago   Up About a minute               0.0.0.0:8080->80/tcp   web
deb885238fa5   hello-world   "/hello"                 About a minute ago   Exited (0) About a minute ago                          great_jepsen
docker ps -a 列出所有容器,hello-world 容器的狀態是 Exited (0),代表已經正常結束

hello-world 的 STATUS 是 Exited (0):

  • Exited 代表已經結束、不在跑了,但容器還在,沒有被刪掉
  • 括號裡的 0 是「結束代碼」,0 代表正常結束,不是 0 通常代表出錯
  • 它的名字 great_jepsen 是 Docker 隨機取的,因為我們跑它時沒有加 --name。你的畫面會是別的名字

容器跑完不會自己消失,這是新手最容易忽略的事,用久了 docker ps -a 會堆滿一堆已結束的容器。下一段教你怎麼清。

容器的一生:docker run 建立並啟動,Up 執行中,docker stop 後變成 Exited,docker rm 才會真的刪掉

實測時的意外

這次在 Cloud Shell 實際跑,有幾個地方跟一般教學寫的不太一樣:

1. Cloud Shell 的 Docker 會先去 Google 的鏡像站下載

用 docker info 查 Cloud Shell 的 Docker 設定,會看到它預設設好了一個 Registry Mirror(映像檔鏡像站):

docker info -f '{{.RegistryConfig.Mirrors}}'
[https://asia-mirror.gcr.io/]

意思是:要下載 Docker Hub 的映像檔時,Docker 會先去 Google 在亞洲的快取站找,有就直接拿,沒有才去 Docker Hub。

這有什麼差別?Docker Hub 對沒登入的人有下載次數限制,官方文件寫的是每 6 小時 100 次(以 IP 位址計算)。而 Google 官方文件寫明,從這個快取站下載的映像檔不算進 Docker Hub 的次數。所以在 Cloud Shell 練習,比較不會撞到「下載太多次被擋」的錯誤。

hello-world 印出來的訊息還是寫「from the Docker Hub」,因為那段文字是寫死在程式裡的,不代表實際從哪裡下載。

2. docker ps 的表格會折行

Cloud Shell 視窗不夠寬時,docker ps 的表格會被折成兩行,欄位對不齊,看起來很亂。把瀏覽器視窗拉寬,或把畫面縮小一點(Windows 按 Ctrl 加 -,Mac 按 Cmd 加 -)就好。指令本身沒有錯。

3. docker images 的長相跟網路上的教學不一樣

清理完之後用 docker images 看本機的映像檔,這次在 Docker 29.9.2 看到的長這樣:

                                                                                                      i Info →   U  In Use
IMAGE                ID             DISK USAGE   CONTENT SIZE   EXTRA
hello-world:latest   11a3eb1597e8       25.9kB         9.49kB
nginx:latest         4c41e2d0a3a5        243MB         66.8MB
Docker 29 的 docker images 新格式,欄位是 IMAGE、ID、DISK USAGE、CONTENT SIZE、EXTRA

很多網路教學裡的欄位是 REPOSITORY、TAG、IMAGE ID、CREATED、SIZE,跟這裡不一樣。看到不同格式不用緊張,內容是一樣的:映像檔名稱、編號、大小。這裡把大小分成兩欄:DISK USAGE 是在硬碟上實際佔的空間,CONTENT SIZE 是下載的壓縮內容大小。映像檔怎麼看、latest 是什麼意思,第 3 篇會細講。

4. Cloud Shell 關掉一陣子,容器和映像檔都會不見

再用 docker info 查 Docker 把資料放在哪裡:

docker info -f '{{.DockerRootDir}}'
/var/lib/docker

/var/lib/docker 這個位置不在你的家目錄裡。

官方文件說明,Cloud Shell 閒置一小時後工作階段就會結束,這台機器會被收回,只有家目錄裡的 5 GB 會保留。所以隔天回來,docker images 會是空的,要重新下載。對練習來說剛好,不用擔心佔空間;但如果你想保留自己寫的檔案(之後的 Dockerfile),要放在家目錄。


用完記得刪

這篇建的東西都在 Cloud Shell 裡,不會產生任何費用,但養成清理的習慣很重要。之後到了 GCP 上,忘記刪就是真的會扣錢。

docker stop web web2
docker container prune -f
docker ps -a

實際輸出:

web
web2
Deleted Containers:
13fd73624ea5fb06337263af991d42c667d9810ff363677a4e84926e1afd81d7
b8f2578b014589319443fe273ff4667aed4c45d5a2527b6e8a6386f25f0932dd
deb885238fa5ceb37799b9822d14482e2af140c888e885eda949b4a020694650
Total reclaimed space: 159.7kB
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
清理容器:docker stop 停止 web 和 web2,docker container prune -f 刪掉三個已停止的容器,docker ps -a 已經是空的
  • docker stop web web2:停止兩個 nginx 容器(雞蛋糕不再保溫,但還在盤子上)。Docker 會先通知容器裡的程式收尾再停下來,所以可能要等一兩秒才印出名字
  • docker container prune -f:一次刪掉所有已停止的容器。prune 是「修剪」,-f 是 force,不再問你「確定嗎?」。連 hello-world 那個 Exited 的容器也一起清掉了,所以刪了 3 個
  • docker ps -a:只剩標題列,代表容器全部清乾淨

注意:刪掉容器不會刪掉映像檔(雞蛋糕吃掉了,模具還在)。剛剛的 docker images 可以看到 nginx 和 hello-world 都還在。要連映像檔一起刪,用 docker rmi,第 3 篇會示範。

Cloud Shell 本身不用特別關,直接關掉分頁就好,閒置一段時間它會自己結束。


到了 GCP 上叫什麼

這篇在 Cloud Shell 做的事,到了 Google Cloud 上都有對應的服務:

在這篇到了 GCP
從 Docker Hub 下載映像檔把自己的映像檔放在 Artifact Registry(Google 的映像檔倉庫),第 19 篇會教
docker run 跑一個網頁容器交給 Cloud Run 幫你跑,有人連線才開機、沒人用就關掉,第 20 篇會教
-p 8080:80 告訴 Docker 容器在聽哪個 PortCloud Run 也要知道容器在聽哪個 Port,官方文件寫的預設值是 8080
一次管很多個容器交給 Kubernetes,在 GCP 上叫 GKE,第 9 篇開始講

所以 Docker 是整個系列的地基:後面不管用哪個雲端服務,交出去的東西都是「容器映像檔」。


面試/證照會怎麼問

這篇的內容比較常出現在面試。後面 Kubernetes 篇會提到的 CKAD、CKA 證照是上機實作考,容器的基本觀念是前提;Google Cloud 的證照考的則是「該用哪個服務跑容器」,會在 Cloud Run、GKE 篇整理。

面試常見題

題目回答重點
映像檔和容器差在哪?映像檔是唯讀的範本,容器是用映像檔跑起來的實例;一個映像檔可以開很多個容器
容器和虛擬機差在哪?虛擬機模擬一整台電腦、有自己的作業系統;容器共用主機的作業系統核心,只隔離程式和環境,所以更輕、啟動更快
docker run -p 8080:80 是什麼意思?把主機的 8080 埠對到容器的 80 埠,冒號左邊是主機、右邊是容器
docker ps 和 docker ps -a 差在哪?前者只列正在跑的容器,後者連已經停止的也列出來
容器停止後還在嗎?還在,狀態是 Exited,要 docker rm 或 docker container prune 才會刪掉

看到這些字,就想到這個

題目出現的字想到
「唯讀」「範本」「template」映像檔
「執行中的實例」「instance」容器
「打包環境」「到哪裡都一樣」「我電腦可以跑」容器化、Docker
「把主機的 Port 對到容器」-p 主機:容器
「下載映像檔」「Docker Hub」docker pull、Registry

常見問答

學 Docker 一定要在電腦上安裝嗎?

不一定。Google Cloud Shell 已經裝好 Docker,用瀏覽器打開就能練習,這篇所有步驟都是在 Cloud Shell 完成的。等你要在自己的電腦開發時再安裝也不遲,Mac 和 Windows 通常是裝 Docker Desktop,可以參考 Docker 官方安裝說明。

Cloud Shell 要錢嗎?要綁信用卡嗎?

Google 官方定價頁寫明,Cloud Shell 對有 Google Cloud 帳號的使用者免費,每週有 50 小時的使用額度。這篇實測用的是沒有建立任何專案的帳號,Docker 照樣可以用。

Docker 要錢嗎?

Docker 引擎(Docker Engine)是開源的,免費使用,Cloud Shell 裡裝的就是它。要付費的是 Docker Desktop 這個桌面軟體的部分情況:官方授權說明寫明個人使用、教育、小型企業(員工少於 250 人且年營收少於 1,000 萬美元)免費,較大型組織的商業使用需要付費訂閱。

映像檔和容器差在哪?

映像檔是打包好、不能改的範本,像雞蛋糕的模具;容器是用映像檔跑起來的那一份,像烤出來的雞蛋糕。一個映像檔可以同時開很多個容器,刪掉容器不會影響映像檔。

為什麼 hello-world 跑完就停了?

因為 hello-world 這個程式的工作就是印出一段訊息,印完就結束了。容器裡的主程式結束,容器就跟著停止,狀態變成 Exited (0)。nginx 不一樣,它是網頁伺服器,會一直開著等人連線,所以容器會一直是 Up。

容器停掉之後,裡面的資料會不見嗎?

停止(stop)不會,容器還在,重新啟動資料都還在。但刪除(rm)之後,容器裡改過的東西就全部消失了,Docker 官方文件也明確寫到這點。想讓資料留下來要用 Volume,第 5 篇會講。

Docker Hub 下載映像檔有次數限制嗎?

有。Docker Hub 官方文件寫的是:沒登入的使用者每 6 小時 100 次,免費帳號登入後每 6 小時 200 次。在 Cloud Shell 練習比較不用擔心,因為它預設會先去 Google 的鏡像站下載,從那裡拿到的映像檔不算進 Docker Hub 的次數。


重點整理

  • Docker 把程式和它需要的環境打包在一起,讓它在任何地方都用同一個方式跑起來
  • 映像檔是唯讀的範本(模具),容器是映像檔跑起來的實例(雞蛋糕),Registry 是存放映像檔的倉庫(模具行)
  • docker run -d -p 8080:80 --name web nginx:背景執行、主機 8080 對容器 80、取名 web、用 nginx 映像檔
  • docker ps 看正在跑的,docker ps -a 看全部;容器跑完不會自己消失,用 docker container prune -f 清掉
  • Google Cloud Shell 免費、不用專案、已經裝好 Docker,是零基礎練習 Docker 最省事的地方

延伸閱讀

本系列下一篇

  • 第 2 篇:Docker 常用指令一次看懂:run、ps、logs、exec、stop、rm(撰寫中)

站上相關文章


跑出第一個容器,你已經跨過 Docker 最難的一關:開始。如果你想有系統地從容器一路學到在 Google Cloud 上部署服務,可以看看東東的 GCP 課程,或加 LINE 聊聊你現在的狀況,一起找出最適合你的學習順序。

Table of Contents
返回頂端