<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>無伺服器 - 東東 GCP 教學 - GCP 實戰講師</title>
	<atom:link href="https://dongdonggcp.com/category/%E7%84%A1%E4%BC%BA%E6%9C%8D%E5%99%A8/feed/" rel="self" type="application/rss+xml" />
	<link>https://dongdonggcp.com</link>
	<description>助你考取證照，轉職成功</description>
	<lastBuildDate>Wed, 29 Jul 2026 08:54:55 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1</generator>

<image>
	<url>https://dongdonggcp.com/wp-content/uploads/2025/04/cropped-340838097_121391010914395_5443948698124160121_n-32x32.jpg</url>
	<title>無伺服器 - 東東 GCP 教學 - GCP 實戰講師</title>
	<link>https://dongdonggcp.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>容器 (Container) 技術是什麼？從零開始看懂 Docker 與容器化應用</title>
		<link>https://dongdonggcp.com/2026/07/29/what-is-container-technology-docker-guide/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=what-is-container-technology-docker-guide</link>
					<comments>https://dongdonggcp.com/2026/07/29/what-is-container-technology-docker-guide/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 29 Jul 2026 08:19:58 +0000</pubDate>
				<category><![CDATA[無伺服器]]></category>
		<category><![CDATA[CI/CD]]></category>
		<category><![CDATA[Container]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[容器]]></category>
		<guid isPermaLink="false">https://dongdonggcp.com/?p=12323</guid>

					<description><![CDATA[<p>容器技術是一種將應用程式和其執行環境打包的技術，確保程式在不同環境中穩定運行。它比虛擬機更輕量和快速，是雲端開發的基石。Docker和Kubernetes使容器化的使用變得更簡單，適合微服務和CI/CD流程。</p>
<p>The post <a href="https://dongdonggcp.com/2026/07/29/what-is-container-technology-docker-guide/">容器 (Container) 技術是什麼？從零開始看懂 Docker 與容器化應用</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">容器技術是一種讓應用程式可以在任何環境中穩定執行的打包技術，不需要擔心「在我電腦上可以跑，你電腦上不行」的問題。</p>



<p class="wp-block-paragraph">它比虛擬機輕量、啟動快，是現代雲端開發的核心基礎。</p>



<p class="wp-block-paragraph">只要你理解它的概念，Docker、Kubernetes 這些詞就不會再讓你頭痛。</p>



<h3 class="wp-block-heading">容器技術的定義</h3>



<p class="wp-block-paragraph">一種「把應用程式和它需要的所有東西打包在一起」的技術，確保程式在任何環境都能穩定執行。</p>



<p class="wp-block-paragraph">這個「所有東西」包含：</p>



<ol class="wp-block-list">
<li>程式碼本身</li>



<li>執行環境 (不同程式需要的環境都不一樣)</li>



<li>相依套件 (像是函式庫 Library 或模組，沒有裝就不能順利跑起來，像 python 要處理資料就要再裝 pandas)</li>



<li>容器設定檔 (Dockerfile)</li>
</ol>



<p class="wp-block-paragraph">打包完之後，這個容器可以在任何支援容器的機器上執行。</p>



<p class="wp-block-paragraph">不管你的作業系統是 Ubuntu、CentOS 還是 Windows Server，甚至在你的 Mac 電腦，只要先裝好 Docker，同一個容器都可以順利跑起來。</p>



<h4 class="wp-block-heading">容器和「貨櫃」的關係：生活化比喻</h4>



<p class="wp-block-paragraph">容器的英文是 Container，這個字本來就是「貨櫃」的意思。</p>



<p class="wp-block-paragraph">以前船運貨物，每次都要重新裝箱、綁繩、確認尺寸，而每艘船、每個港口規格不同，搬運過程很容易出錯。</p>



<p class="wp-block-paragraph">貨櫃標準化之後，不管是船運、火車還是卡車，同一個貨櫃直接搬上去就能走，裡面的東西不需要重新整理。</p>



<p class="wp-block-paragraph">容器技術做的事情一模一樣：把你的應用程式裝進一個標準化的「盒子」，這個盒子搬到哪裡都能直接執行。</p>



<figure class="wp-block-image aligncenter size-large"><img fetchpriority="high" decoding="async" width="1024" height="551" src="https://dongdonggcp.com/wp-content/uploads/2026/07/從實體貨運到數位標準-容器-Container-的本質-1024x551.png" alt="" class="wp-image-12328" srcset="https://dongdonggcp.com/wp-content/uploads/2026/07/從實體貨運到數位標準-容器-Container-的本質-1024x551.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/07/從實體貨運到數位標準-容器-Container-的本質-300x161.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/07/從實體貨運到數位標準-容器-Container-的本質-768x413.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/07/從實體貨運到數位標準-容器-Container-的本質.png 1493w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">從實體貨運到數位標準 容器 (Container) 的本質</figcaption></figure>



<h4 class="wp-block-heading">容器技術解決了什麼問題？</h4>



<p class="wp-block-paragraph">在它出現之前，工程師最常遇到這個情境：</p>



<p class="wp-block-paragraph">開發環境裝的是 Python 3.8，測試環境是 Python 3.6，上線環境是 Python 3.11。</p>



<p class="wp-block-paragraph">程式在開發機跑得好好的，一到正式環境就報錯，花兩天找問題，最後發現程式根本沒寫錯，而是套件版本不對。</p>



<p class="wp-block-paragraph">容器從根本解決這個問題：開發、測試、上線用的是同一個容器映像檔，環境完全一致，不會出現版本差異。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" width="1024" height="530" src="https://dongdonggcp.com/wp-content/uploads/2026/07/在我電腦上可以跑！！-1024x530.png" alt="" class="wp-image-12327" srcset="https://dongdonggcp.com/wp-content/uploads/2026/07/在我電腦上可以跑！！-1024x530.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/07/在我電腦上可以跑！！-300x155.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/07/在我電腦上可以跑！！-768x398.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/07/在我電腦上可以跑！！-1536x795.png 1536w, https://dongdonggcp.com/wp-content/uploads/2026/07/在我電腦上可以跑！！.png 1820w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">在我電腦上可以跑！！</figcaption></figure>



<h3 class="wp-block-heading">容器技術的運作原理</h3>



<h4 class="wp-block-heading">容器是怎麼隔離環境的？</h4>



<p class="wp-block-paragraph">容器使用 Linux 核心內建的兩個機制來做隔離：</p>



<ol class="wp-block-list">
<li><strong>Namespace</strong>：讓每個容器有自己的「視角」，容器 A 看不到容器 B 的處理程序、網路介面、檔案系統。</li>



<li><strong>Cgroups（Control Groups）</strong>：限制每個容器能用多少 CPU、記憶體、磁碟 I/O，避免一個容器把整台機器的資源吃光。</li>
</ol>



<p class="wp-block-paragraph">這兩個機制讓多個容器可以同時在同一台機器上執行，彼此不干擾，也不互搶資源。</p>



<p class="wp-block-paragraph">如果你是初學者來，不需要記住 Namespace 和 Cgroups 的細節。</p>



<p class="wp-block-paragraph">只要記住一件事：<strong>容器的隔離是靠作業系統核心直接支援的，不是靠模擬出另一台電腦</strong>。這就是容器比虛擬機輕量的根本原因。</p>



<h4 class="wp-block-heading">為什麼容器可以這麼輕量？</h4>



<p class="wp-block-paragraph">虛擬機要模擬一整台電腦，包含硬體層、作業系統、核心。</p>



<p class="wp-block-paragraph">光是一個虛擬機就要佔用 10–20 GB 的空間，啟動需要 30 秒到幾分鐘，所以開機才這麼慢。</p>



<p class="wp-block-paragraph">容器不模擬硬體，也不需要自己的作業系統核心，直接借用宿主機（Host）的 Linux 核心。</p>



<p class="wp-block-paragraph">一個容器映像檔大約只有 100–200 MB，啟動時間在 1–3 秒以內。</p>



<p class="wp-block-paragraph">這個差異在大規模部署時非常明顯：一台實體機器可能只能跑 10–20 個虛擬機，但可以輕鬆跑超過 100 個容器。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" width="1024" height="549" src="https://dongdonggcp.com/wp-content/uploads/2026/07/容器-Container-輕量化的秘密-作業系統級別的隔離-1024x549.png" alt="" class="wp-image-12330" srcset="https://dongdonggcp.com/wp-content/uploads/2026/07/容器-Container-輕量化的秘密-作業系統級別的隔離-1024x549.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/07/容器-Container-輕量化的秘密-作業系統級別的隔離-300x161.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/07/容器-Container-輕量化的秘密-作業系統級別的隔離-768x411.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/07/容器-Container-輕量化的秘密-作業系統級別的隔離.png 1411w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">容器 (Container) 輕量化的秘密 作業系統級別的隔離</figcaption></figure>



<h4 class="wp-block-heading">容器映像檔（Image）是什麼？</h4>



<p class="wp-block-paragraph">容器映像檔（Image）是容器的「範本」，是一個唯讀的打包檔案，裡面包含程式碼和所有執行環境，用來啟動容器實例。</p>



<p class="wp-block-paragraph">「實例」這個名詞有點難解釋，你可以理解爲一臺虛擬的小電腦，隨時可以產生出來或刪除掉。</p>



<p class="wp-block-paragraph">你可以把 Image 想成「食譜」，容器是「用這份食譜做出來的菜」。</p>



<p class="wp-block-paragraph">同一份食譜可以做出很多份菜，同一個 Image 可以啟動很多個容器實例，彼此獨立、互不影響。</p>



<p class="wp-block-paragraph">你也可以把 Image 想成遊戲光碟片，那容器就是光碟片開始轉，裡面的遊戲檔被讀出來執行的樣子。</p>



<p class="wp-block-paragraph">Image 採用分層結構：</p>



<ol class="wp-block-list">
<li>底層是作業系統基礎（例如 Ubuntu slim）</li>



<li>上面一層是語言環境（例如 Node.js 18）</li>



<li>最上面才是你的應用程式</li>
</ol>



<p class="wp-block-paragraph">如果你第一次打包映像檔，它會先上網下載作業系統環境的相關檔案；然後第二層再下載你的程式語言所需要的環境檔案，以及一些相依性的套件。</p>



<p class="wp-block-paragraph">由於它每一層都可以快取 (暫存在你電腦裡面)，如果你的程式碼有改，更新容器只需要重新打包有變動的那層，不用再下載作業系統跟程式語言環境，效率很高。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="534" src="https://dongdonggcp.com/wp-content/uploads/2026/07/容器映像檔Image-唯讀的應用程式食譜-1024x534.png" alt="" class="wp-image-12331" srcset="https://dongdonggcp.com/wp-content/uploads/2026/07/容器映像檔Image-唯讀的應用程式食譜-1024x534.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/07/容器映像檔Image-唯讀的應用程式食譜-300x157.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/07/容器映像檔Image-唯讀的應用程式食譜-768x401.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/07/容器映像檔Image-唯讀的應用程式食譜.png 1437w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">容器映像檔 (Image) 唯讀的應用程式食譜</figcaption></figure>



<h3 class="wp-block-heading">容器 vs 虛擬機：哪裡不一樣？</h3>



<p class="wp-block-paragraph">容器（Container）和虛擬機（Virtual Machine，VM）都是用來隔離執行環境的技術，但架構完全不同：</p>



<p class="wp-block-paragraph">容器共用宿主機的 OS 核心，虛擬機則模擬出一整台獨立的電腦。這個差異直接決定了兩者在速度、體積和資源消耗上的巨大差距。 </p>



<h4 class="wp-block-heading">架構差異一次看懂</h4>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>比較項目</th><th>容器</th><th>虛擬機</th></tr></thead><tbody><tr><td>作業系統</td><td>共用宿主機核心</td><td>每個 VM 有自己的 OS</td></tr><tr><td>啟動時間</td><td>1–3 秒</td><td>30 秒–幾分鐘</td></tr><tr><td>映像檔大小</td><td>100–500 MB</td><td>10–40 GB</td></tr><tr><td>隔離程度</td><td>程序層隔離</td><td>完整硬體層隔離</td></tr><tr><td>資源消耗</td><td>低</td><td>高</td></tr><tr><td>移植性</td><td>高（跨平台執行）</td><td>中（依賴 Hypervisor）</td></tr></tbody></table></figure>



<h4 class="wp-block-heading">啟動速度與資源佔用的比較</h4>



<p class="wp-block-paragraph">容器啟動快，不是因為硬體更好，而是架構不同。</p>



<p class="wp-block-paragraph">虛擬機每次啟動的流程：</p>



<ol class="wp-block-list">
<li>初始化虛擬硬體</li>



<li>載入 BIOS</li>



<li>啟動 OS 核心</li>



<li>載入系統服務</li>



<li>才能執行你的程式</li>
</ol>



<p class="wp-block-paragraph">容器啟動的流程：</p>



<ol class="wp-block-list">
<li>在宿主機核心上建立隔離空間</li>



<li>載入映像檔</li>



<li>執行程式</li>
</ol>



<p class="wp-block-paragraph">跳過了模擬硬體和啟動 OS 這兩個最耗時的步驟，所以快。</p>



<p class="wp-block-paragraph">在資源佔用方面：一台 8 GB RAM 的伺服器，跑虛擬機時每個 VM 至少需要 1–2 GB RAM 給 OS 本身；</p>



<p class="wp-block-paragraph">跑容器時 OS 的 RAM 消耗幾乎為零，幾乎所有記憶體都給應用程式用。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="542" src="https://dongdonggcp.com/wp-content/uploads/2026/07/核心架構對決-為什麼容器能取代虛擬機-1024x542.png" alt="" class="wp-image-12329" srcset="https://dongdonggcp.com/wp-content/uploads/2026/07/核心架構對決-為什麼容器能取代虛擬機-1024x542.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/07/核心架構對決-為什麼容器能取代虛擬機-300x159.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/07/核心架構對決-為什麼容器能取代虛擬機-768x406.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/07/核心架構對決-為什麼容器能取代虛擬機.png 1429w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">核心架構對決 為什麼容器能取代虛擬機?</figcaption></figure>



<h4 class="wp-block-heading">什麼情況該用容器？什麼情況該用虛擬機？</h4>



<p class="wp-block-paragraph"><strong>適合容器的情況：</strong></p>



<ol class="wp-block-list">
<li>微服務架構，需要大量部署小型服務</li>



<li>CI/CD 流程，需要快速啟動、測試、銷毀環境</li>



<li>開發環境一致性，多人協作的專案</li>



<li>雲端部署，需要彈性擴充和縮減的應用程式</li>
</ol>



<p class="wp-block-paragraph"><strong>適合虛擬機的情況：</strong></p>



<ol class="wp-block-list">
<li>需要完整 OS 隔離（例如執行不信任的第三方程式）</li>



<li>Windows 應用程式（容器對 Windows 的支援較複雜）</li>



<li>需要模擬不同作業系統進行相容性測試</li>



<li>對安全隔離要求極高的金融或醫療系統</li>
</ol>



<p class="wp-block-paragraph">兩者不是非此即彼的關係。</p>



<p class="wp-block-paragraph">實際生產環境中，常見做法是：虛擬機作為底層基礎設施，容器在虛擬機上運行。</p>



<h3 class="wp-block-heading">Docker 容器：最主流的容器工具</h3>



<h4 class="wp-block-heading">Docker 是什麼？和容器的關係</h4>



<p class="wp-block-paragraph">容器技術這個概念在 Docker 之前就存在，但當時提供容器技術的廠商非常多，而且操作複雜、工具不統一，只有少數工程師會用。</p>



<p class="wp-block-paragraph">Docker 是目前最主流的容器工具，由 <a href="https://www.docker.com/" target="_blank" rel="noopener" title="">Docker</a> Inc. 於 2013 年發布。</p>



<p class="wp-block-paragraph">它讓開發者可以用簡單的指令打包、分發、執行容器，大幅降低容器技術的使用門檻。</p>



<p class="wp-block-paragraph">並且提供統一的指令介面、映像檔格式，以及 <a href="https://hub.docker.com/" target="_blank" rel="noopener" title="">Docker Hub</a> 這個映像檔共享平台。</p>



<p class="wp-block-paragraph">所以 Docker 幾乎一統江湖，成為容器技術的獨佔廠商。</p>



<p class="wp-block-paragraph"><strong>容器技術是概念，Docker </strong>則是<strong>最受歡迎的容器</strong>廠商。</p>



<p class="wp-block-paragraph">現在說「用容器部署」，90% 的情況都是在用 Docker 或基於 Docker 格式的工具。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="516" src="https://dongdonggcp.com/wp-content/uploads/2026/07/Docker-將複雜概念轉化為開發標準-1024x516.png" alt="" class="wp-image-12333" srcset="https://dongdonggcp.com/wp-content/uploads/2026/07/Docker-將複雜概念轉化為開發標準-1024x516.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/07/Docker-將複雜概念轉化為開發標準-300x151.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/07/Docker-將複雜概念轉化為開發標準-768x387.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/07/Docker-將複雜概念轉化為開發標準.png 1372w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Docker: 將複雜概念轉化為開發標準</figcaption></figure>



<h4 class="wp-block-heading">Docker Hub：映像檔從哪裡來？</h4>



<p class="wp-block-paragraph">Docker Hub 是 Docker 官方的映像檔倉庫（Repository），可以把它想成「容器的 App Store」。</p>



<p class="wp-block-paragraph">想跑一個 <a href="https://hub.docker.com/hardened-images/catalog/dhi/mysql" target="_blank" rel="noopener" title="">MySQL</a> 資料庫？不需要自己安裝，一行指令就能從 Docker Hub 下載官方的 MySQL 映像檔，直接啟動。</p>



<p class="wp-block-paragraph">Docker Hub 上有超過 1,000 萬個映像檔，包含：</p>



<ul class="wp-block-list">
<li>各種語言的執行環境（<a href="https://hub.docker.com/hardened-images/catalog/dhi/python" target="_blank" rel="noopener" title="">Python</a>、<a href="https://hub.docker.com/hardened-images/catalog/dhi/node" target="_blank" rel="noopener" title="">Node.js</a>、Go）</li>



<li>資料庫（<a href="https://hub.docker.com/hardened-images/catalog/dhi/mysql" target="_blank" rel="noopener" title="">MySQL</a>、<a href="https://hub.docker.com/hardened-images/catalog/dhi/postgres" target="_blank" rel="noopener" title="">PostgreSQL</a>、<a href="https://hub.docker.com/hardened-images/catalog/dhi/redis" target="_blank" rel="noopener" title="">Redis</a>）</li>



<li>Web 伺服器（<a href="https://hub.docker.com/hardened-images/catalog/dhi/nginx" target="_blank" rel="noopener" title="">Nginx</a>、<a href="https://hub.docker.com/_/httpd" target="_blank" rel="noopener" title="">Apache</a>）</li>
</ul>



<p class="wp-block-paragraph">你也可以把自己打包好的映像檔推上去，私有或公開都支援。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="718" src="https://dongdonggcp.com/wp-content/uploads/2026/07/Docker-Hub-1024x718.png" alt="" class="wp-image-12334" srcset="https://dongdonggcp.com/wp-content/uploads/2026/07/Docker-Hub-1024x718.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/07/Docker-Hub-300x210.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/07/Docker-Hub-768x539.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/07/Docker-Hub.png 1430w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Docker 官方的映像檔倉庫（Repository）Docker Hub</figcaption></figure>



<h4 class="wp-block-heading">用 Docker 跑第一個容器：3 個步驟</h4>



<p class="wp-block-paragraph">假設你已經安裝好 Docker，跑第一個 Docker 容器只需要：</p>



<ol class="wp-block-list">
<li>開啟終端機，輸入 <code>docker pull nginx</code>，從 Docker Hub 下載 Nginx 的映像檔</li>



<li>輸入 <code>docker run -d -p 8080:80 nginx</code>，啟動容器並把 8080 port 對應到容器內的 80 port</li>



<li>開啟瀏覽器，前往 <code>http://localhost:8080</code>，看到 Nginx 歡迎頁面就代表成功</li>
</ol>



<p class="wp-block-paragraph">從下載到執行，整個過程在 30 秒內完成。你不需要安裝、設定 Nginx，只要這三步就有一個完整運行的 Web 伺服器。這就是 Docker 容器改變開發流程的地方。</p>



<h3 class="wp-block-heading">Kubernetes 容器編排：容器多了之後怎麼管？</h3>



<h4 class="wp-block-heading">為什麼需要 Kubernetes？</h4>



<p class="wp-block-paragraph">3–5 個容器，Docker 指令就夠用。300 個容器分散在 20 台伺服器上，Docker 指令完全不夠用。你需要解決：</p>



<ul class="wp-block-list">
<li>某個容器掛掉，要怎麼自動重啟？</li>



<li>流量暴增，要怎麼自動增加容器數量？</li>



<li>新版本要怎麼在不停機的情況下更新？</li>



<li>20 台伺服器的資源要怎麼統一分配？</li>
</ul>



<p class="wp-block-paragraph">這些問題就是「容器編排」要解決的事。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="568" src="https://dongdonggcp.com/wp-content/uploads/2026/07/從單一容器到艦隊管理-規模化的挑戰-1024x568.png" alt="" class="wp-image-12335" srcset="https://dongdonggcp.com/wp-content/uploads/2026/07/從單一容器到艦隊管理-規模化的挑戰-1024x568.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/07/從單一容器到艦隊管理-規模化的挑戰-300x167.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/07/從單一容器到艦隊管理-規模化的挑戰-768x426.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/07/從單一容器到艦隊管理-規模化的挑戰.png 1409w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">從單一容器到艦隊管理 規模化的挑戰</figcaption></figure>



<p class="wp-block-paragraph"><a href="https://kubernetes.io/" target="_blank" rel="noopener" title="">Kubernetes</a>（簡稱 K8s）是目前最主流的容器編排平台，由 Google 於 2014 年開源，現在由 <a href="https://www.cncf.io/" target="_blank" rel="noopener" title="">CNCF</a>（雲端原生運算基金會）維護，是大規模容器化應用的業界標準。</p>



<h4 class="wp-block-heading">Kubernetes 和 Docker 的分工</h4>



<p class="wp-block-paragraph">Docker 負責：<strong>建立和執行單個容器</strong>。</p>



<p class="wp-block-paragraph">Kubernetes 負責：<strong>管理大量容器的生命週期</strong>，包含排程、擴縮、自我修復、網路和儲存配置。</p>



<p class="wp-block-paragraph">兩者是互補關係，不是競爭關係。在大多數生產環境中，Kubernetes 會呼叫容器執行時（Container Runtime）來實際啟動和停止容器，Docker 就是最常見的容器執行時之一。</p>



<h4 class="wp-block-heading">容器編排解決的三個核心問題</h4>



<p class="wp-block-paragraph">Kubernetes 解決了容器規模化之後最常見的三個痛點：</p>



<ol class="wp-block-list">
<li><strong>自我修復（Self-healing）</strong>：容器掛掉，Kubernetes 在幾秒內自動重新啟動，不需要人工介入</li>



<li><strong>水平擴展（Horizontal Scaling）</strong>：CPU 使用率超過 80% 時，Kubernetes 自動新增容器副本；流量下降後自動縮減，節省成本</li>



<li><strong>滾動更新（Rolling Update）</strong>：新版本部署時，Kubernetes 逐步替換舊容器，零停機時間，出問題可以一鍵回滾到上一版</li>
</ol>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="527" src="https://dongdonggcp.com/wp-content/uploads/2026/07/Kubernetes-K8s-現代容器編排-管理-的業界標準-1024x527.png" alt="" class="wp-image-12336" srcset="https://dongdonggcp.com/wp-content/uploads/2026/07/Kubernetes-K8s-現代容器編排-管理-的業界標準-1024x527.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/07/Kubernetes-K8s-現代容器編排-管理-的業界標準-300x154.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/07/Kubernetes-K8s-現代容器編排-管理-的業界標準-768x395.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/07/Kubernetes-K8s-現代容器編排-管理-的業界標準.png 1401w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Kubernetes (K8s) 現代容器編排 (管理) 的業界標準</figcaption></figure>



<h3 class="wp-block-heading">容器技術的實際應用場景</h3>



<h4 class="wp-block-heading">開發環境一致性：再也不會「我電腦上可以跑」</h4>



<p class="wp-block-paragraph">這是最直接、最普遍的應用場景。</p>



<p class="wp-block-paragraph">10 人的開發團隊，每個人的電腦環境都不一樣：Windows、macOS、不同版本的 Linux，不同版本的 Node.js、Python、資料庫。</p>



<p class="wp-block-paragraph">用容器技術，把開發環境定義在一個 <code>docker-compose.yml</code> 檔案中。新成員加入團隊，執行一個指令就能啟動和資深工程師完全相同的開發環境，從加入到開始寫程式只需要 15 分鐘，而不是過去光設定環境就要花一整天的「環境設定地獄」。</p>



<h4 class="wp-block-heading">微服務架構與容器化應用</h4>



<p class="wp-block-paragraph">微服務架構是把一個大型應用程式拆成很多個小型、獨立的服務，每個服務負責一個功能，可以獨立開發、部署、擴展。容器化應用是微服務架構的最佳搭配：每個微服務打包成一個容器，可以用不同的程式語言撰寫、獨立部署、獨立擴展。 </p>



<p class="wp-block-paragraph">舉個例子：一個電商平台有訂單服務、庫存服務、推薦系統、金流服務各自獨立。促銷期間推薦系統需要大量 CPU，你可以只針對推薦系統的容器擴展，不需要把整個平台都擴展，省下大量成本。</p>



<h4 class="wp-block-heading">CI/CD 流程中的容器角色</h4>



<p class="wp-block-paragraph">CI/CD（持續整合 / 持續交付）是現代軟體開發的標準流程：工程師提交程式碼後，自動執行測試、打包、部署，不需要人工介入。</p>



<p class="wp-block-paragraph">容器在 CI/CD 流程中扮演關鍵角色：</p>



<ol class="wp-block-list">
<li>測試環境用容器啟動，每次測試都在乾淨的環境中執行，不受之前測試殘留的狀態影響</li>



<li>打包成容器映像檔，確保開發、測試、正式環境用完全相同的產物</li>



<li>部署時直接替換容器，速度快、可回滾，比傳統部署方式風險低很多</li>
</ol>



<h3 class="wp-block-heading">容器技術的限制與常見誤解</h3>



<h4 class="wp-block-heading">容器不是萬能的：三種不適合用容器的情境</h4>



<p class="wp-block-paragraph">它很強，但不是所有情境都適合：</p>



<ol class="wp-block-list">
<li><strong>需要 GUI 的桌面應用程式</strong>：容器設計上是無頭（Headless）的，跑有圖形介面的軟體需要額外設定</li>



<li><strong>需要直接存取硬體的應用程式</strong>：例如需要存取特定 GPU、USB 裝置，容器的隔離層會增加複雜度</li>



<li><strong>狀態複雜的單體式舊系統（Legacy System）</strong>：把有幾十年歷史的大型系統容器化，往往需要大量改寫，成本超過效益</li>
</ol>



<p class="wp-block-paragraph">容器技術最適合「雲端原生（Cloud Native）」的應用程式——從設計之初就考慮到分散式部署、無狀態、水平擴展的架構。</p>



<h4 class="wp-block-heading">容器安全性：常見疑慮與對應做法</h4>



<p class="wp-block-paragraph">容器的隔離比虛擬機弱——這是事實，但不代表容器不安全。</p>



<p class="wp-block-paragraph">常見的安全疑慮和對應做法：</p>



<ol class="wp-block-list">
<li><strong>容器逃逸（Container Escape）</strong>：攻擊者從容器內部突破隔離，存取宿主機。<br>對應方式：不以 root 身分執行容器、定期更新容器映像檔、使用 Seccomp 和 AppArmor 限制系統呼叫</li>



<li><strong>映像檔安全性</strong>：從 Docker Hub 下載的映像檔可能包含漏洞或惡意程式。<br>對應方式：只使用官方映像檔或自建基礎映像、在 CI/CD 流程中加入映像檔掃描（例如 Trivy、Snyk）</li>



<li><strong>密鑰管理</strong>：不要把密碼、API Key 直接寫進映像檔。<br>對應方式：使用 Kubernetes Secret 或 HashiCorp Vault 管理敏感資訊</li>
</ol>



<p class="wp-block-paragraph">容器安全是可以管理的問題，只要遵守基本的安全實踐，風險完全在可接受的範圍內。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="554" src="https://dongdonggcp.com/wp-content/uploads/2026/07/技術界線與安全防護-容器並非萬靈丹-1-1024x554.png" alt="" class="wp-image-12339" srcset="https://dongdonggcp.com/wp-content/uploads/2026/07/技術界線與安全防護-容器並非萬靈丹-1-1024x554.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/07/技術界線與安全防護-容器並非萬靈丹-1-300x162.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/07/技術界線與安全防護-容器並非萬靈丹-1-768x416.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/07/技術界線與安全防護-容器並非萬靈丹-1.png 1365w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">技術界線與安全防護 容器並非萬靈丹</figcaption></figure>



<h3 class="wp-block-heading">學容器的建議路徑</h3>



<h4 class="wp-block-heading">從 Docker 開始還是從概念開始？</h4>



<p class="wp-block-paragraph">建議先從概念開始，再動手。</p>



<p class="wp-block-paragraph">很多人第一步就打開終端機跑 Docker 指令，結果遇到錯誤不知道為什麼，也不知道自己在做什麼，很快就放棄。</p>



<p class="wp-block-paragraph">理解「容器是什麼、解決什麼問題、和虛擬機有什麼差別」之後，再開始動手，每一個指令都有清楚的脈絡，遇到問題也更容易判斷方向。</p>



<h4 class="wp-block-heading">推薦的學習順序與資源</h4>



<p class="wp-block-paragraph">從零開始學容器技術，建議依這個順序：</p>



<ol class="wp-block-list">
<li><strong>理解概念</strong>：搞清楚容器 vs 虛擬機、Image vs 容器的關係（本文就是起點）</li>



<li><strong>安裝 Docker Desktop</strong>：官網提供 <a href="https://docs.docker.com/desktop/setup/install/windows-install/" target="_blank" rel="noopener" title="">Windows</a> 和 <a href="https://docs.docker.com/desktop/setup/install/mac-install/" target="_blank" rel="noopener" title="">macOS</a> 的圖形化安裝包，10 分鐘內完成</li>



<li><strong>跑第一個容器</strong>：用 <code>docker run hello-world</code> 確認環境正常，再跑 Nginx 或 Python 應用程式</li>



<li><strong>學習 Dockerfile</strong>：學會自己撰寫 Dockerfile，把自己的應用程式打包成映像檔</li>



<li><strong>學習 Docker Compose</strong>：用 YAML 檔案定義多容器環境，例如「應用程式 + 資料庫」的組合</li>



<li><strong>入門 Kubernetes</strong>：理解 Docker 之後再學 K8s，不要跳過 Docker 直接學 K8s</li>
</ol>



<p class="wp-block-paragraph">每個階段大約需要 1–2 週，有實作練習的情況下，2–3 個月可以達到在工作中使用容器技術的基本水準。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="545" src="https://dongdonggcp.com/wp-content/uploads/2026/07/零基礎實戰路徑-從概念到生產力-1024x545.png" alt="" class="wp-image-12340" srcset="https://dongdonggcp.com/wp-content/uploads/2026/07/零基礎實戰路徑-從概念到生產力-1024x545.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/07/零基礎實戰路徑-從概念到生產力-300x160.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/07/零基礎實戰路徑-從概念到生產力-768x409.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/07/零基礎實戰路徑-從概念到生產力.png 1419w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">零基礎實戰路徑 從概念到生產力</figcaption></figure>



<h3 class="wp-block-heading">結語：容器技術值得學嗎？</h3>



<p class="wp-block-paragraph">值得，而且越早學越好。</p>



<p class="wp-block-paragraph">容器技術已經不是「進階技能」，而是現代後端工程師和 DevOps 工程師的基本配備。</p>



<p class="wp-block-paragraph">人才需求中出現 Docker、Kubernetes 的頻率，在過去五年內增加了超過三倍。</p>



<p class="wp-block-paragraph">從理解容器的概念開始，裝好 Docker，跑幾個練習專案，這樣就夠了。Kubernetes 和進階的容器編排，等你對容器有基本掌握之後再學，不會太晚。</p>



<p class="wp-block-paragraph">容器技術的學習曲線在前兩週最陡，一旦度過那段，後面會越來越順。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="512" src="https://dongdonggcp.com/wp-content/uploads/2026/07/容器化已非進階選項-而是現代雲端的必備基石-1024x512.png" alt="" class="wp-image-12341" srcset="https://dongdonggcp.com/wp-content/uploads/2026/07/容器化已非進階選項-而是現代雲端的必備基石-1024x512.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/07/容器化已非進階選項-而是現代雲端的必備基石-300x150.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/07/容器化已非進階選項-而是現代雲端的必備基石-768x384.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/07/容器化已非進階選項-而是現代雲端的必備基石-1536x768.png 1536w, https://dongdonggcp.com/wp-content/uploads/2026/07/容器化已非進階選項-而是現代雲端的必備基石.png 1821w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">容器化已非進階選項, 而是現代雲端的必備基石</figcaption></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">常見問題（FAQ）</h3>



<p class="wp-block-paragraph"><strong>Q1：容器技術是什麼？用一句話說明。</strong><br>A：容器技術是一種把應用程式和它的執行環境打包在一起的技術，確保程式在任何機器上都能穩定執行，不受底層作業系統差異影響。<br>它比虛擬機輕量、啟動更快，是現代雲端部署的核心基礎。<br>尤其是它在開發、測試、上線環境完全一致，是容器技術解決的最核心問題。</p>



<p class="wp-block-paragraph"><strong>Q2：一個容器可以同時跑多個應用程式嗎？</strong><br>A：技術上可以，但不建議。容器的設計哲學是「一個容器、一個程序」，這樣才能充分發揮容器的輕量性和獨立性。<br>如果你需要跑多個應用程式，應該用多個容器，再用 Docker Compose 或 Kubernetes 讓它們協同工作。</p>



<p class="wp-block-paragraph"><strong>Q3：容器和 Serverless 有什麼關係？</strong><br>A：Serverless（如 AWS Lambda、GCP Cloud Functions）是更高階的抽象，你不需要管理伺服器或容器，只要上傳函數程式碼就好。<br>但實際上，很多 Serverless 平台的底層就是用容器技術來隔離和執行函數，只是這個細節被平台隱藏起來了。<br>最有名的就是 <a href="https://dongdonggcp.com/2025/07/20/cloud-run-tutorials/" target="_blank" rel="noopener" title="">Cloud Run</a>，它可以直接讓你的容器跑起來。</p>



<p class="wp-block-paragraph"><strong>Q4：Docker 和 Podman 有什麼差別？</strong><br>A：Podman 是 Red Hat 推出的容器工具，最大差別是不需要常駐的 Daemon（背景服務），以及預設不需要 root 權限執行，安全性稍高。<br>指令格式和 Docker 幾乎完全相同，可以直接替換使用。<br>對初學者來說，先學 Docker 就好，兩者概念完全通用。Podman 知名度低很多。</p>



<p class="wp-block-paragraph"><strong>Q5：容器映像檔更新了，跑起來的容器會自動更新嗎？</strong><br>A：不會。已經在跑的容器使用的是啟動時的映像檔版本，不會自動套用新映像檔。<br>你需要停止舊容器、拉取新映像檔、再啟動新容器。<br>這也是為什麼 Kubernetes 的滾動更新（Rolling Update）功能很重要，它可以幫你自動完成這個過程，而且不停機。</p>



<p class="wp-block-paragraph"><strong>Q6：容器的資料存放在哪裡？容器刪掉資料會不見嗎？</strong><br>A：預設情況下，容器內部產生的資料在容器刪除後就消失了。這是容器「無狀態」設計的一部分。如果你需要持久保存資料（例如資料庫的資料），要使用 Volume（磁碟掛載），把資料存在宿主機的指定路徑，容器刪除後資料仍然存在。</p>



<p class="wp-block-paragraph"><strong>Q7：學容器技術需要先學 Linux 嗎？</strong><br>A：不需要精通，但需要基本熟悉。你需要能看懂基本的 Linux 指令（ls、cd、cat、chmod）、了解檔案系統結構，以及知道什麼是 Port 和環境變數。<br>如果這些概念對你完全陌生，建議先花 1–2 週補一下 Linux 基礎，之後學容器技術會順很多。</p>



<p class="wp-block-paragraph"><strong>Q8：免費使用 Docker 有限制嗎？</strong><br>A：Docker Desktop（桌面版）對個人使用和小型公司（員工數少於 250 人、年營收低於 1,000 萬美元）免費。超過這個規模需要付費訂閱。<br>Docker Engine（命令列版本，在 Linux 伺服器上使用）則是完全免費且開源的。Docker Hub 免費帳號有 Image 下載次數限制，付費帳號則無限制。</p>



<p class="wp-block-paragraph"><strong>Q9：GCP、AWS、Azure 上的容器服務有什麼差別？</strong><br>A：三大雲端平台都提供託管的 Kubernetes 服務：GCP 是 <a href="https://dongdonggcp.com/2025/07/20/google-kubernetes-engine-tutorials/" target="_blank" rel="noopener" title="">GKE（Google Kubernetes Engine）</a>、AWS 是 EKS（Elastic Kubernetes Service）、Azure 是 AKS（Azure Kubernetes Service）。<br>三者核心功能相似，差異在於和各自雲端生態系的整合程度。GKE 因為 Kubernetes 本身就是 Google 開發的，整合度和功能被認為是最成熟的。</p>



<p class="wp-block-paragraph"><strong>Q10：公司說要「容器化」現有的系統，這有多難？</strong><br>A：難度差異很大，取決於現有系統的架構。<br>如果是相對現代的應用程式（有明確的相依套件清單、設定可以用環境變數注入），架構清晰的應用程式， 1–3 週就能完成基礎版本。<br>如果是有幾十年歷史的大型單體式系統，深度依賴特定硬體或作業系統功能，容器化可能需要數個月甚至不值得做。<br>建議先評估系統架構，再決定是否容器化以及容器化的範圍，有可能需要大幅的更動甚至重寫程式碼。</p>



<p class="wp-block-paragraph"></p><p>The post <a href="https://dongdonggcp.com/2026/07/29/what-is-container-technology-docker-guide/">容器 (Container) 技術是什麼？從零開始看懂 Docker 與容器化應用</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://dongdonggcp.com/2026/07/29/what-is-container-technology-docker-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>儲存容器映像檔的 Artifact Registry 簡介與上傳 Docker 映像檔教學</title>
		<link>https://dongdonggcp.com/2025/07/20/artifact-registry-tutorials/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=artifact-registry-tutorials</link>
					<comments>https://dongdonggcp.com/2025/07/20/artifact-registry-tutorials/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 20 Jul 2025 08:18:56 +0000</pubDate>
				<category><![CDATA[無伺服器]]></category>
		<category><![CDATA[Artifact Registry]]></category>
		<category><![CDATA[Container]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Docker Image]]></category>
		<category><![CDATA[Nodejs]]></category>
		<guid isPermaLink="false">https://dongdonggcp.com/?p=11173</guid>

					<description><![CDATA[<p>Artifact Registry 是 Google Cloud 中專門的容器映像檔儲存庫，除了 Docker 映像外，還支援 Maven Artifacts（Java）、Npm Packages、Python Packages、Helm Charts 等等。</p>
<p>The post <a href="https://dongdonggcp.com/2025/07/20/artifact-registry-tutorials/">儲存容器映像檔的 Artifact Registry 簡介與上傳 Docker 映像檔教學</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">Artifact Registry 簡介</h2>



<p class="wp-block-paragraph"><a href="https://www.googleadservices.com/pagead/aclk?sa=L&amp;ai=DChsSEwirsLTv_8qOAxXG2kwCHfITEJUYACICCAEQABoCdG0&amp;ae=2&amp;aspm=1&amp;co=1&amp;ase=2&amp;gclid=CjwKCAjwp_LDBhBCEiwAK7FnkhBSGGOAMvfHjawzthiFks7mErP8ixTosby2sEBJ0rz1lMGqoZSP2hoCfmAQAvD_BwE&amp;ohost=www.google.com&amp;cid=CAESV-D27f6HJLfY8fRQo7vyEJc-amuEDVvDvj7wVTm5UcHc2tc7-ZWroRb6nEiYHrpBHGo0vZXo4tcWYIOvM2iBxdUY17ArpWhXU9tGYG691bXGAlbxMry-5w&amp;category=acrcp_v1_47&amp;sig=AOD64_0OiELFeAQRJRqxZXvfz8ZOPSb8VQ&amp;q&amp;nis=4&amp;adurl&amp;ved=2ahUKEwjL0a_v_8qOAxUch68BHYbNGZkQ0Qx6BAgOEAE" target="_blank" rel="noopener" title="">Artifact Registry </a>是 Google Cloud 中專門的容器映像檔儲存庫，當時在 Artifact Registry 推出之前，己經有 Container Registry，但 Container Registry 只支援 <a href="https://www.docker.com/" target="_blank" rel="noopener" title="">Docker</a> 映像檔，並且功能較為簡單，也沒有細緻的權限管理機制，所以 Google 在 2020 年推出 Artifact Registry，作為 Container Registry 的全面升級。</p>



<p class="wp-block-paragraph">Artifact Registry 除了 Docker 映像外，還支援 Maven Artifacts（Java）、Npm Packages、Python Packages、Helm Charts 等等。</p>



<h2 class="wp-block-heading">建立容器映像檔示範</h2>



<h3 class="wp-block-heading">準備 Nodejs 程式檔案</h3>



<p class="wp-block-paragraph">接著我們就開始打造一個容器映像檔，並上傳到 Artifact Registry 吧！</p>



<p class="wp-block-paragraph">首先我們一樣開啟 Cloud Shell，建立一個資料夾例如 nodejs01，然後先建立第一個檔案 server.js</p>



<pre class="wp-block-code"><code>var http = require('http');
var handleRequest = function(request, response) {
  response.writeHead(200);
  response.end("Hello World from Dongdong Nodejs!!");
}
var www = http.createServer(handleRequest);
www.listen(8080);
</code></pre>



<p class="wp-block-paragraph">然後測試程式能否運作，輸入 node server.js，可以點擊預覽網頁的按鈕，看看網頁是否秀出內容：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="495" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-1-程式執行和預覽-1024x495.png" alt="" class="wp-image-11174" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-1-程式執行和預覽-1024x495.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-1-程式執行和預覽-300x145.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-1-程式執行和預覽-768x371.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-1-程式執行和預覽-1536x742.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-1-程式執行和預覽.png 1884w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">執行 Nodejs 程式並預覽網頁</figcaption></figure>



<h3 class="wp-block-heading">準備 Dockerfile</h3>



<p class="wp-block-paragraph">如果確認沒問題，再按下 ctrl + C 取回游標，接著準備第二個檔案 Dockerfile 內容如下：</p>



<pre class="wp-block-code"><code>FROM node:6.9.2
EXPOSE 8080
COPY server.js .
CMD node server.js
</code></pre>



<p class="wp-block-paragraph">Dockerfile 是說明檔，告訴 Docker 要如何打包這個 Image，包含這個容器使用什麼程式語言、對外開放哪個 Port、程式的檔案在哪裡、用什麼指令來跑程式等等。</p>



<p class="wp-block-paragraph">現在我們已經準備好兩個檔案如下：</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="981" height="230" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-2-確認目前準備好兩個檔案.png" alt="" class="wp-image-11175" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-2-確認目前準備好兩個檔案.png 981w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-2-確認目前準備好兩個檔案-300x70.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-2-確認目前準備好兩個檔案-768x180.png 768w" sizes="(max-width: 981px) 100vw, 981px" /><figcaption class="wp-element-caption">確認目前準備好兩個檔案</figcaption></figure>



<h3 class="wp-block-heading">建立 Artifact Registry 存放區</h3>



<p class="wp-block-paragraph">接著我們回到 Google Cloud Console，去 Artifact Registry 建立一個存放區：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="547" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-3-建立-Artifact-Registry-存放區-1024x547.png" alt="" class="wp-image-11176" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-3-建立-Artifact-Registry-存放區-1024x547.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-3-建立-Artifact-Registry-存放區-300x160.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-3-建立-Artifact-Registry-存放區-768x410.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-3-建立-Artifact-Registry-存放區-1536x820.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-3-建立-Artifact-Registry-存放區.png 1865w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">建立 Artifact Registry 存放區</figcaption></figure>



<p class="wp-block-paragraph">我們命名「nodejs-1」，格式選擇 Docker，Region 選在 asia-east1，再按下「建立」。 完成之後就會看到它顯示在存放區的列表：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="653" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-4-設定名稱、格式和儲存位置-1024x653.png" alt="" class="wp-image-11177" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-4-設定名稱、格式和儲存位置-1024x653.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-4-設定名稱、格式和儲存位置-300x191.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-4-設定名稱、格式和儲存位置-768x490.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-4-設定名稱、格式和儲存位置-1536x980.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-4-設定名稱、格式和儲存位置.png 1682w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">設定映像檔存放區的名稱、格式和儲存位置</figcaption></figure>



<h3 class="wp-block-heading">取得憑證</h3>



<p class="wp-block-paragraph">點擊「設定操作說明」，它會開啟一個視窗，並提供一個 gcloud 指令，把它複製起來，這樣之後才能從 Cloud Shell 直接推送映像檔上去：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="389" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-5-設定-gcloud-為憑證輔助程式-1024x389.png" alt="" class="wp-image-11178" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-5-設定-gcloud-為憑證輔助程式-1024x389.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-5-設定-gcloud-為憑證輔助程式-300x114.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-5-設定-gcloud-為憑證輔助程式-768x292.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-5-設定-gcloud-為憑證輔助程式-1536x584.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-5-設定-gcloud-為憑證輔助程式.png 1896w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">設定 gcloud 為憑證輔助程式</figcaption></figure>



<p class="wp-block-paragraph">直接將指令貼到 Cloud Shell 並執行，等它完成即可，你會看到它說 gcloud credentials 註冊成功：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="503" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-6-等待指令執完成-1024x503.png" alt="" class="wp-image-11179" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-6-等待指令執完成-1024x503.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-6-等待指令執完成-300x147.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-6-等待指令執完成-768x377.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-6-等待指令執完成-1536x754.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-6-等待指令執完成.png 1788w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">等待指令執完成</figcaption></figure>



<h3 class="wp-block-heading">建立 Docker 容器映像檔</h3>



<p class="wp-block-paragraph">接下來準備 Docker image 的完整名稱，它同時也是存放在 Artifact Registry 的路徑，格式如下：</p>



<p class="wp-block-paragraph">[位置]/[project-id]/[repo_name]/[image_name]:v1</p>



<p class="wp-block-paragraph">我的映像檔名字就像這樣：</p>



<p class="wp-block-paragraph">asia-east1-docker.pkg.dev/dong-dong-gcp-2-bigquery/nodejs-1/nodejs-web:v1</p>



<p class="wp-block-paragraph">準備好之後，就執行以下指令：</p>



<p class="wp-block-paragraph">docker build -t&nbsp; [位置]/[project-id]/[repo_name]/[image_name]:v1</p>



<p class="wp-block-paragraph">我的範例指令：</p>



<p class="wp-block-paragraph">docker build -t asia-east1-docker.pkg.dev/dong-dong-gcp-2-bigquery/nodejs-1/nodejs-web:v1 .&nbsp;</p>



<p class="wp-block-paragraph">你注意指令最後有一個句點，代表要把當前資料夾 (nodejs01) 內的檔案都打包進這個映像檔。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="425" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-7-建立容器映像檔-1024x425.png" alt="" class="wp-image-11180" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-7-建立容器映像檔-1024x425.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-7-建立容器映像檔-300x125.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-7-建立容器映像檔-768x319.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-7-建立容器映像檔-1536x638.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-7-建立容器映像檔.png 1866w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">建立容器映像檔</figcaption></figure>



<h3 class="wp-block-heading">測試 Docker Image 運作</h3>



<p class="wp-block-paragraph">我們再直接使用 Image 跑一次容器，確認應用程式正常</p>



<p class="wp-block-paragraph">docker run -d -p [port]:[port] [位置]/[project-id]/[repo_name]/[image_name]:v1</p>



<p class="wp-block-paragraph">我的範例指令：</p>



<p class="wp-block-paragraph">docker run -d -p 8080:8080 asia-east1-docker.pkg.dev/dong-dong-gcp-2-bigquery/nodejs-1/nodejs-web:v1&nbsp;&nbsp;&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">參數 -d ，指的是背景執行</p>



<p class="wp-block-paragraph">參數 -p 8080:8080 ，指的是把主機的 8080 Port 所有流量轉發到 web 這個Container 的 8080 Port</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="70" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-8-確認容器已開始運作-1024x70.png" alt="" class="wp-image-11181" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-8-確認容器已開始運作-1024x70.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-8-確認容器已開始運作-300x21.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-8-確認容器已開始運作-768x53.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-8-確認容器已開始運作-1536x105.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-8-確認容器已開始運作.png 1869w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">確認容器已開始運作</figcaption></figure>



<p class="wp-block-paragraph">然後我們點擊 Cloud Shell 視窗右上角的預覽按鈕，可以看到網頁已經正常顯示：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="531" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-9-確認能看到網頁-1024x531.png" alt="" class="wp-image-11182" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-9-確認能看到網頁-1024x531.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-9-確認能看到網頁-300x156.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-9-確認能看到網頁-768x398.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-9-確認能看到網頁-1536x797.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-9-確認能看到網頁.png 1677w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">確認能看到網頁</figcaption></figure>



<h3 class="wp-block-heading">停止 Docker 應用程式</h3>



<p class="wp-block-paragraph">確認無誤的話，我們要停止 Container 運作之前，要先查詢目前正在運作 Container 的 ID：&nbsp;</p>



<p class="wp-block-paragraph">docker ps&nbsp;</p>



<p class="wp-block-paragraph">取得 ID 之後，停止指定的 Container</p>



<p class="wp-block-paragraph">docker stop [container-id]</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="233" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-10-停止容器運作-1024x233.png" alt="" class="wp-image-11183" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-10-停止容器運作-1024x233.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-10-停止容器運作-300x68.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-10-停止容器運作-768x175.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-10-停止容器運作-1536x349.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-10-停止容器運作.png 1808w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">停止容器運作</figcaption></figure>



<h2 class="wp-block-heading">推送 Docker Image 到 Artifact Registry</h2>



<p class="wp-block-paragraph">現在就可以正式 Push Docker Image 到 Artifact Registry 了，執行以下指令：</p>



<p class="wp-block-paragraph">docker push [位置]/[project-id]/[repo_name]/[image_name]:v1</p>



<p class="wp-block-paragraph">我的範例指令：</p>



<p class="wp-block-paragraph">docker&nbsp; push asia-east1-docker.pkg.dev/dong-dong-gcp-2-bigquery/nodejs-1/nodejs-web:v1 &nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="347" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-11-映像檔推送完成-1024x347.png" alt="" class="wp-image-11184" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-11-映像檔推送完成-1024x347.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-11-映像檔推送完成-300x102.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-11-映像檔推送完成-768x261.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-11-映像檔推送完成-1536x521.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-11-映像檔推送完成.png 1851w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">映像檔推送完成</figcaption></figure>



<p class="wp-block-paragraph">我們看到映像檔已經推上去了，我們可以回到 Console 上按重新整理：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="621" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-12-在-Console-上看到映像檔出現了-1024x621.png" alt="" class="wp-image-11185" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-12-在-Console-上看到映像檔出現了-1024x621.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-12-在-Console-上看到映像檔出現了-300x182.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-12-在-Console-上看到映像檔出現了-768x466.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-3-12-在-Console-上看到映像檔出現了.png 1523w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">在 Artifact Registry 上看到映像檔出現了</figcaption></figure>



<p class="wp-block-paragraph">現在我們有一個映像檔在上面，之後就可以部署到 <a href="https://dongdonggcp.com/2025/07/20/cloud-run-tutorials/" target="_blank" rel="noopener" title="">Cloud Run</a> 或 <a href="https://dongdonggcp.com/2025/07/20/google-kubernetes-engine-tutorials/" title="">Google Kubernetes Engine</a> 囉！</p>



<p class="wp-block-paragraph">影片版教學：</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<div class="ast-oembed-container " style="height: 100%;"><iframe title="[GKE 教學] 031 Artifact Registry 教學，如何在 GCP 上建立第一個 Docker 容器映像檔 Container Image？| 免費下載 GKE 簡報、完整指令和程式碼" width="1200" height="675" src="https://www.youtube.com/embed/6DHUC-MZ34U?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
</div></figure><p>The post <a href="https://dongdonggcp.com/2025/07/20/artifact-registry-tutorials/">儲存容器映像檔的 Artifact Registry 簡介與上傳 Docker 映像檔教學</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://dongdonggcp.com/2025/07/20/artifact-registry-tutorials/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>上傳程式碼就能跑的微服務 – Cloud Run Functions 簡介與基本操作教學</title>
		<link>https://dongdonggcp.com/2025/07/20/cloud-run-functions-tutorials/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cloud-run-functions-tutorials</link>
					<comments>https://dongdonggcp.com/2025/07/20/cloud-run-functions-tutorials/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 20 Jul 2025 07:57:00 +0000</pubDate>
				<category><![CDATA[無伺服器]]></category>
		<category><![CDATA[Cloud Run]]></category>
		<category><![CDATA[Cloud Run Function]]></category>
		<category><![CDATA[Serverless]]></category>
		<guid isPermaLink="false">https://dongdonggcp.com/?p=11162</guid>

					<description><![CDATA[<p>Cloud Run Functions 是 Google Cloud 的 Functions as a Service (FaaS) 平台，讓你可以撰寫小型的、專注於單一任務的函式，不用管理機器。支援的程式語言包含 .Net、Go、Java、Node.js、PHP、Python 和 Ruby。</p>
<p>The post <a href="https://dongdonggcp.com/2025/07/20/cloud-run-functions-tutorials/">上傳程式碼就能跑的微服務 – Cloud Run Functions 簡介與基本操作教學</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">現在我們要介紹和 App Engine 同樣具備「上傳即部署」特性的服務：Cloud Run Functions。</p>



<p class="wp-block-paragraph">雖然 App Engine 和 Cloud Run Functions 都提供了無需管理基礎設施的便利性，但兩者在應用場景上有著重要差異。App Engine 適合部署完整的 Web 應用程式，而 Cloud Run Functions 則專注於輕量級的函式服務，讓開發人員能夠實現事件驅動的微服務架構。</p>



<h2 class="wp-block-heading">什麼是 Cloud Run Functions？</h2>



<p class="wp-block-paragraph">Cloud Run Functions 原名叫 Cloud Function，是 Google Cloud 的 Functions as a Service (FaaS) 平台，讓你可以撰寫小型的、專注於單一任務的函式，不用管理機器。支援的程式語言包含 .Net、Go、Java、Node.js、PHP、Python 和 Ruby。</p>



<p class="wp-block-paragraph">這些函式會在事件發生時自動執行，用完即停，真正實現了「用多少算多少」的理念。</p>



<p class="wp-block-paragraph">想像一下，你經營一家網路商店，當客戶下單時需要：</p>



<ul class="wp-block-list">
<li>發送確認郵件給客戶</li>



<li>更新庫存數量</li>



<li>記錄銷售資料到分析系統</li>



<li>通知物流部門準備出貨</li>
</ul>



<p class="wp-block-paragraph">在傳統單體式架構中，這些功能可能都寫在同一個應用程式中。但使用 Cloud Run Functions，你可以為每個任務建立獨立的函式，當訂單事件發生時，這些函式會自動被觸發 (Trigger) 執行，就是所謂的「事件驅動」特性。</p>



<p class="wp-block-paragraph">另外 Cloud Run Functions 也能 Autoscale，當同時有大量事件需要處理時，平台會自動建立多個函式執行個體 (instance；指輕量級的容器) 來並行處理；當需求降低時，也會自動縮減執行個體數量，甚至降到零。</p>



<p class="wp-block-paragraph">所以和 App Engine 一樣，你只需為函式實際執行的時間和資源消耗付費，沒有請求時完全不收費。</p>



<h2 class="wp-block-heading">Cloud Run Functions 的觸發機制</h2>



<p class="wp-block-paragraph">關於觸發機制，Cloud Run Functions 可以透過多種方式被觸發：</p>



<p class="wp-block-paragraph"><strong>HTTP Trigger</strong>：最常見的觸發方式，函式會曝露一個 HTTPS 端點，可以透過 REST API 呼叫。適合建立微服務 API、Webhook 處理器等。</p>



<p class="wp-block-paragraph"><strong>Cloud Storage Trigger</strong>：當 Google Cloud Storage 中的檔案被建立、刪除或修改時觸發。適合檔案處理、圖片縮放、資料備份等場景。</p>



<p class="wp-block-paragraph"><strong>Pub/Sub Trigger</strong>：當 Cloud Pub/Sub Topic 收到訊息時觸發。適合非同步訊息處理、事件串流處理等。</p>



<p class="wp-block-paragraph"><strong>Firebase Trigger</strong>：與 Firebase 服務整合，可以因應 Firestore 資料庫變更、使用者註冊、帳號變更事件等。</p>



<p class="wp-block-paragraph"><strong>Cloud Scheduler 觸發器</strong>：定時執行函式，類似 Cron Job 的功能。</p>



<h2 class="wp-block-heading">建立 Cloud Run Functions 示範</h2>



<p class="wp-block-paragraph">接著我們來建立一個簡單的函式看看，點擊主選單「Clodu Run 函式」再點擊「編寫函式」：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="343" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-1-編寫-Cloud-Run-Function-1024x343.png" alt="" class="wp-image-11163" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-1-編寫-Cloud-Run-Function-1024x343.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-1-編寫-Cloud-Run-Function-300x101.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-1-編寫-Cloud-Run-Function-768x257.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-1-編寫-Cloud-Run-Function-1536x515.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-1-編寫-Cloud-Run-Function.png 1880w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">編寫 Cloud Run Function</figcaption></figure>



<p class="wp-block-paragraph">給函式命名、設定地區和程式語言版本，你看到它有產生一個端點網址，那就是之後對外服務的網址：</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="1012" height="762" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-2-給函式命名、設定地區和程式語言版本.png" alt="" class="wp-image-11164" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-2-給函式命名、設定地區和程式語言版本.png 1012w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-2-給函式命名、設定地區和程式語言版本-300x226.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-2-給函式命名、設定地區和程式語言版本-768x578.png 768w" sizes="(max-width: 1012px) 100vw, 1012px" /><figcaption class="wp-element-caption">給函式命名、設定地區和程式語言版本</figcaption></figure>



<p class="wp-block-paragraph">往下看到驗證的部分，我們要讓所有網路上的任何人都可以存取，所以要取消「使用 IAM 驗證傳入要求」。另外在服務資源調度的部分，我們要把「執行個體數量下限」改成 0。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="780" height="790" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-3-取消勾選-IAM-驗證並設定執行個體數是下限.png" alt="" class="wp-image-11165" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-3-取消勾選-IAM-驗證並設定執行個體數是下限.png 780w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-3-取消勾選-IAM-驗證並設定執行個體數是下限-296x300.png 296w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-3-取消勾選-IAM-驗證並設定執行個體數是下限-768x778.png 768w" sizes="(max-width: 780px) 100vw, 780px" /><figcaption class="wp-element-caption">取消勾選 IAM 驗證並設定執行個體數是下限</figcaption></figure>



<p class="wp-block-paragraph">再來 Ingress 的部分，我們要勾選「全部」，這樣子才能開放外部進來存取喔！然後我們再點擊右下角的展開按鈕，查看進階設定：</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="1007" height="391" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-4-設定允許全部流量，並打開進階設定.png" alt="" class="wp-image-11166" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-4-設定允許全部流量，並打開進階設定.png 1007w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-4-設定允許全部流量，並打開進階設定-300x116.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-4-設定允許全部流量，並打開進階設定-768x298.png 768w" sizes="(max-width: 1007px) 100vw, 1007px" /><figcaption class="wp-element-caption">設定允許全部流量，並打開進階設定</figcaption></figure>



<p class="wp-block-paragraph">大部分內容都可以保持預設，主要看的是資源的部分，在正式的環境當中，你可以調整記憶體和 CPU 的規格，在這裡我們保持預設就好：</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="967" height="805" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-5-可以調整執行個體的規格.png" alt="" class="wp-image-11167" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-5-可以調整執行個體的規格.png 967w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-5-可以調整執行個體的規格-300x250.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-5-可以調整執行個體的規格-768x639.png 768w" sizes="(max-width: 967px) 100vw, 967px" /><figcaption class="wp-element-caption">可以調整執行個體的規格</figcaption></figure>



<p class="wp-block-paragraph">「執行個體數量上限」預設是 100，如果擔心它真的開到 100 台，可以像我一樣調成 5 就好，其他保持預設，最後按下「建立」：</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="846" height="865" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-6-設定執行個體數量上下限.png" alt="" class="wp-image-11168" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-6-設定執行個體數量上下限.png 846w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-6-設定執行個體數量上下限-293x300.png 293w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-6-設定執行個體數量上下限-768x785.png 768w" sizes="(max-width: 846px) 100vw, 846px" /><figcaption class="wp-element-caption">設定執行個體數量上下限</figcaption></figure>



<p class="wp-block-paragraph">接下來畫面會自動跳轉到「來源」這個頁籤，你可以在下方編輯程式碼，在這裡我們就保持不變，直接按下「儲存並重新部署」：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="569" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-7-儲存並重新部署-1024x569.png" alt="" class="wp-image-11169" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-7-儲存並重新部署-1024x569.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-7-儲存並重新部署-300x167.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-7-儲存並重新部署-768x427.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-7-儲存並重新部署.png 1289w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">儲存並重新部署</figcaption></figure>



<p class="wp-block-paragraph">接著它會在背景作業，將現有程式碼打包成容器，等它幾秒鐘後，就可以點擊網址，並且看到網頁了。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="601" src="https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-8-點擊網址看到網頁內容-1024x601.png" alt="" class="wp-image-11170" srcset="https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-8-點擊網址看到網頁內容-1024x601.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-8-點擊網址看到網頁內容-300x176.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-8-點擊網址看到網頁內容-768x451.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-8-點擊網址看到網頁內容-1536x902.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/07/9-2-8-點擊網址看到網頁內容.png 1782w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">點擊網址看到網頁內容</figcaption></figure>



<p class="wp-block-paragraph"></p><p>The post <a href="https://dongdonggcp.com/2025/07/20/cloud-run-functions-tutorials/">上傳程式碼就能跑的微服務 – Cloud Run Functions 簡介與基本操作教學</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://dongdonggcp.com/2025/07/20/cloud-run-functions-tutorials/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
