阿里雲企業帳號註冊 使用Docker在阿裡雲伺服器上一鍵部署你的首個容器應用

阿里雲國際 / 2026-06-25 12:51:13

第一章:把「一鍵部署」想清楚

很多人第一次接觸容器,最大的挫折不是 Docker 本身,而是「部署」這件事:你把程式打包好之後,還要在伺服器上安裝依賴、設定環境、開通網路、啟動服務、檢查是否成功。只要其中任一環節漏掉,整個流程就會變得像拼圖缺角。

所謂「一鍵部署」,本質上是把部署流程標準化。你需要先決定:

  • 你的應用要以什麼方式被啟動(命令是什麼、端口是什麼、需要哪些環境變數)。
  • 你的應用要怎麼被打包(Dockerfile 怎麼寫、映像名稱規則是什麼)。
  • 你的部署要依賴哪些外部條件(伺服器已開哪些端口、是否需要登入私有映像倉庫)。
  • 成功的判斷標準是什麼(容器是否在跑、健康狀態如何、頁面是否可回應)。

本文會以「一個簡單的 Web 應用容器」為例。你可以把它理解為你未來所有服務的模板:把你自己的程式替換進去,流程不變。

第二章:準備阿里雲伺服器與網路環境

2.1 建立 ECS(或你選擇的計算實例)

在阿里雲建立一台計算實例時,建議你至少滿足:能夠遠端連線(SSH)、有足夠的磁碟空間、網路帶寬能支撐你後續的映像拉取。具體規格看你應用複雜度,但如果只是第一個容器,入門型配置即可。

2.2 開放安全組:端口一定要想清楚

容器跑起來不等於你在外網看得到。你要確認兩層事情:

  • 安全組(Security Group)是否允許入站到你的服務端口。
  • 容器映射到主機的端口是否正確。

例如你在容器內用 80 端口提供 Web 服務,那你通常會在部署時做 -p 80:80-p 8080:80 之類的映射。若你選擇暴露到 8080,就要確保安全組允許 8080 入站。

初學者常見錯誤是:容器端口映射做了,但安全組沒放行;或安全組放行了 80,結果部署映射的是 8080,兩邊永遠對不上。這也是為什麼「一鍵部署」更需要把端口配置寫死在腳本裡,避免人工手滑。

第三章:在伺服器上安裝 Docker

你可以用阿里雲提供的基礎映像或自行安裝。這裡重點是讓 Docker 可用,並讓你使用非 root 的方式操作(更安全)。

3.1 安裝 Docker 引擎

阿里雲企業帳號註冊 在主機中依你的作業系統選擇合適的安裝方式。無論你使用哪種方式,目標是達到:

  • docker --version 能正常輸出版本。
  • 阿里雲企業帳號註冊 docker ps 能列出容器列表。
  • Docker 服務能在重啟後維持運行(可選,但建議)。

3.2 設定普通帳號使用 Docker(避免一直 sudo)

建議你把帳號加入 Docker 群組,這樣在部署腳本執行時不用反覆切 root。操作完成後重新登入或重新載入環境,再測試一次 docker ps 是否能正常使用。

第四章:撰寫你的第一個容器應用

你可以把應用想像成一個「輸入幾個參數,輸出一個 HTTP 回應」。部署時,只要能穩定回應,就算成功。

4.1 一個簡單的 Web 應用範例

阿里雲企業帳號註冊 假設你準備了一個簡單的 Node.js(或任何語言)服務。實務上,你的程式可能已經存在,這裡只是用來說明 Dockerfile 的目的。

核心需求是:

  • 容器啟動時執行固定命令。
  • 容器監聽固定端口(例如 80 或 3000)。
  • 必要的環境變數可由部署腳本注入。

4.2 Dockerfile:把構建做成可重現的步驟

Dockerfile 的好處是你不必記憶每個步驟。你要做的是把「從程式碼到映像」寫清楚,讓任何地方執行 docker build 都得到一致結果。

下面用一個示意 Dockerfile(你可依你的程式語言替換)來說明結構:

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
ENV PORT=80
EXPOSE 80
CMD ["node", "server.js"]

你需要確保:

  • EXPOSE 的端口與你的服務實際監聽一致。
  • CMD 的啟動指令是你預期的。

4.3 映像命名規則:讓一鍵腳本更簡單

建議你統一使用類似 registry/user/app:tag 的命名方式。即使你先不推送到映像倉庫,腳本也能預留位置。例如:

  • 映像名:myapp
  • tag:latestv1

當你後續要升級版本,腳本只要改 tag,不需要重寫流程。

第五章:建立「一鍵部署」腳本的思路

真正的一鍵部署,不是把所有事情都塞進一段巨型指令,而是把流程拆成:建置、上傳(可選)、停舊容器、拉/建新映像、啟動容器、檢查狀態。你的使用者只需要一個指令。

阿里雲企業帳號註冊 5.1 一鍵部署腳本應該包含哪些步驟

  • 確認 Docker 正常。
  • 取得映像(本地 build 或從倉庫拉取)。
  • 若舊容器存在,停止並移除(避免端口衝突)。
  • 啟動新容器,設定端口映射、環境變數、掛載資料目錄。
  • 檢查容器是否在跑,並給出訪問方式或提示。

5.2 避免踩坑:端口、名稱、重啟策略

這幾點如果做不好,你會覺得「一鍵部署不穩」。例如:

  • 容器名稱固定:--name myapp。否則你後續停止舊容器會抓錯。
  • 端口固定:-p 8080:80 之類。你的安全組要與之匹配。
  • 重啟策略:--restart unless-stopped 讓服務在重啟後自動恢復。

第六章:示範一鍵部署(Build + Run)

下面給出一份你可以直接放到伺服器上執行的腳本範例。它的前提是:你的程式碼或 Dockerfile 已在伺服器目錄下,或你已把目錄拷貝過來。

6.1 目錄結構建議


project/
  Dockerfile
  server.js
  package.json
  ...

腳本放在 project 目錄同層或 project 內都可以,只要你使用一致路徑。

6.2 deploy.sh 範例腳本

把以下內容存成 deploy.sh,並賦予執行權限:

chmod +x deploy.sh
#!/usr/bin/env bash
set -e

APP_NAME='myapp'
IMAGE_NAME='myapp'
TAG='latest'
FULL_IMAGE_NAME="${IMAGE_NAME}:${TAG}"

HOST_PORT=8080
CONTAINER_PORT=80

# 設定你需要的環境變數(示例)
ENV_MODE='production'

echo '--- Checking docker ---'
docker --version > /dev/null

echo '--- Build image ---'
docker build -t "${FULL_IMAGE_NAME}" .

echo '--- Stop & remove old container if exists ---'
if docker ps -a --format '{{.Names}}' | grep -Eq "^${APP_NAME}$"; then
  docker stop "${APP_NAME}" || true
  docker rm "${APP_NAME}" || true
fi

echo '--- Run new container ---'
docker run -d \
  --name "${APP_NAME}" \
  --restart unless-stopped \
  -p "${HOST_PORT}:${CONTAINER_PORT}" \
  -e "NODE_ENV=${ENV_MODE}" \
  "${FULL_IMAGE_NAME}"

echo '--- Done ---'
echo "Container: ${APP_NAME}"
echo "Visit: http://<YOUR_SERVER_IP>:${HOST_PORT}"

echo '--- Current logs (last 20 lines) ---'
docker logs --tail 20 "${APP_NAME}" || true

你只要進入伺服器,確保程式碼在目錄中,接著執行:

./deploy.sh

如果一切正確,你就會得到容器啟動狀態與最近的日誌。

6.3 第一版就先做「本地 build」,之後再升級

你可能會想:映像不是應該從雲端倉庫拉取嗎?可以。但第一階段為了省複雜度,我們先把「可跑起來」放第一位。

等你完成流程,第二階段再做:

  • 把映像推送到映像倉庫(例如阿里雲的容器鏡像服務)。
  • 部署腳本改成 docker pull,避免每次在伺服器 build。
  • 阿里雲企業帳號註冊 加上映像加速與登入步驟,讓部署更快、更穩。

第七章:用資料持久化讓服務不會「一重啟就丟」

很多人第一次部署只做容器啟動就結束,但現實應用通常需要保存資料:上傳檔、資料庫檔案、快取、或某些應用需要的本地檔案。

容器的檔案系統是短暫的:容器被移除或重新建立後,容器內的資料就可能消失。所以你要把需要保留的目錄掛載到主機或使用資料卷(volume)。

7.1 用掛載資料卷(主機路徑示例)

例如你的應用需要把上傳檔寫到容器內 /data,你在主機建立一個目錄:

mkdir -p /data/myapp

然後在 docker run 增加:

-v /data/myapp:/data

這樣容器重建後,資料仍留在主機的 /data/myapp 中。

7.2 權限問題是常見地雷

如果你的應用在容器內以非 root 使用者運行,可能會遇到寫入權限不足。解法通常有兩種:

  • 調整容器內使用者或啟動時權限。
  • 調整主機掛載目錄的擁有者與權限。

你可以先用簡單方式驗證:進入容器檢查使用者(whoami 或看程式預設),再決定掛載目錄要給誰寫。

第八章:日誌、健康狀態與故障排查

阿里雲企業帳號註冊 一鍵部署的價值之一,是你能快速知道它到底成功了還是失敗了。失敗也不怕,怕的是你完全不知道錯在哪。

8.1 快速查看容器是否在跑

docker ps

你要確認容器狀態是 Up,而不是 Exited。

8.2 用日志定位錯誤

docker logs -n 100 myapp

如果你的服務啟動後立刻退出,通常日志會告訴你原因,例如:

  • 程式缺少環境變數。
  • 端口被占用或未正確監聽。
  • 依賴套件或檔案不存在。

8.3 加上健康檢查(可選但建議)

你也可以在 Dockerfile 或 docker run 補上健康檢查。當健康狀態設置好,你未來做自動化運維會更省事。

健康檢查不是必須,但如果你已經把腳本整理好,補上這一層會讓系統更像「產品」而不是「實驗」。

第九章:從「能跑」到「更像工程」的下一步

部署能跑起來只是第一步。接下來你會遇到更現實的要求:版本管理、環境差異、快速回滾、安全性。

9.1 版本化:用 tag 對應程式版本

把 tag 從 latest 改成帶版本資訊,例如 v1.0.3。你可以在部署腳本中用參數控制:

  • 部署 v1.0.3 就用對應 tag。
  • 要回滾就部署前一版 tag。

阿里雲企業帳號註冊 9.2 環境變數:把配置從程式中抽離

例如資料庫連線字串、第三方 API Key,不要寫在程式碼裡。你可以在部署時透過 -e 注入,或使用環境文件。

初學階段用 -e 足夠,到了中後期再考慮:

  • 環境文件(.env)
  • 祕密管理(避免把敏感資訊寫進映像或版本庫)

9.3 映像加速:避免每次 build 都很慢

如果你使用的是預先 build 好的映像,就只需要拉取;如果你在伺服器上每次 build,速度取決於你能否順利拉到 base image 與依賴。

你可以考慮在 Docker daemon 或 build 配置中使用加速器(例如鏡像加速)。這在跨地域的情況下特別有感。

第十章:把你的流程固化成可重複的一鍵部署

當你完成前面步驟,你已經有了一鍵部署的雛形。但要真正讓它「可用在下一個專案」,你需要把變數也抽象出來。

10.1 把常量改成參數或配置

  • 映像名稱與 tag
  • 阿里雲企業帳號註冊 主機端口與容器端口
  • 容器名稱
  • 是否掛載資料卷
  • 環境變數列表

做法可以是:腳本支援命令列參數,或讀取一個簡單配置檔。原則是:你不需要每次改程式碼,直接改配置即可。

10.2 在部署完成後給出明確輸出

你的腳本最後輸出最好包含:

  • 容器是否存在、狀態是什麼
  • 服務端口映射
  • 最近日志

使用者看完輸出就知道下一步要做什麼,而不是猜。

結語:你已經跨過部署的門檻

用 Docker 在阿里雲伺服器上一鍵部署首個容器應用,真正學到的不是某條指令,而是把「部署」拆成穩定、可重現的流程。你已經完成了:

  • 雲端主機環境的準備(網路與端口)。
  • Docker 的基礎安裝與可用性驗證。
  • 用 Dockerfile 將應用打包成可運行的映像。
  • 用腳本將「建置、替換、啟動、檢查」串成一鍵操作。
  • 理解資料持久化與常見故障排查方式。

下一個你要做的,就是把你的實際專案帶入同樣的模板:把程式碼換掉、調整端口與環境變數、必要時加入資料卷與健康檢查。當你能做到這一步,你就不再害怕部署,而是把部署當成日常工具。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系