容器化部署 — Docker示範

更新於 發佈於 閱讀時間約 10 分鐘

※ 首先需要安裝Docker:

網址:https://www.docker.com/

raw-image

進入Get started:選擇下載版本

raw-image

確認安裝版本:

docker -v
raw-image

※ 編寫Dockerfile:打包Docker鏡像腳本

專案跟目錄新增文件:

1.第一行要以node的Docker image為基底因為我的程式碼本身是依賴node去執行。

2.查詢node image官方網站 ​:

網址:https://hub.docker.com/_/node

raw-image

3.以Node.js23 官方Image 作為基底 ​:

FROM node:23-Slim

程式碼解說:

  • slim 版本是 精簡版 的 Node.js Docker 映像,它比標準版本 更輕量,但可能缺少一些系統工具和依賴。這適合用於 容器化環境,尤其是當你希望減少映像大小並提高部署速度時。
  • 適合生產環境:如果你的應用不需要完整的工具鏈(如編譯 C++ 擴展),slim 版本可以幫助減少攻擊面並提高安全性。
  • 可能缺少某些工具:例如 curlgitbuild-essential 可能不包含在 slim 版本中,因此如果你的應用需要這些工具,可能需要手動安裝。

4.設定工作的資料夾,讓後續的命令都在這個指定的資料夾內執行 ​:

WORKDIR /app

5.複製寫好的程式碼到Docker Image裡面的資料夾 ​:

COPY . /app/

6.安裝需要的外部套件​:

RUN npm install

7.打開端口

EXPOSE 8080

8.依據package.json內容設定執行命令

CMD ["npm", "run", "dev"]

9.不要把node_modules複製到資料夾新增檔案.dockerignore,讓docker忽略某些文件或目錄,防止它們被複製到 Docker 映像 中。

raw-image

10.建構 Docker 映像的指令

docker build -t my-app .

程式碼解說:

  • docker build - 用於建構 Docker 映像。
  • -t my-app:為映像指定名稱 my-app(應改成自己資料夾的名稱)。
  • .:代表使用當前目錄(應包含 Dockerfile)。

11.列出本機所有的 Docker 映像的指令

docker images
raw-image


12.確認是否安裝 nodemon

npm list -g --depth=0 | grep nodemon

13.修改 Dockerfile新增nodemon

RUN npm install -g nodemon

14.執行

docker run websocket //改成自己的專案名稱
raw-image


※ 解決Docker服務隔離造成端口連線失敗:

raw-image

1.列出所有正在運行的容器

docker ps
raw-image

2.關閉容器

docker stop 所屬ID


3.刪除容器

docker rm  所屬ID

4.啟動 Docker 容器,透過容器內部端口映射去對應外面主機的端口

docker run -p 8080:8080 websocket

程式碼解說:

  • docker run:這是 Docker 用來啟動容器的指令
  • -p 8080:8080:這是 埠映射(port mapping)。它將主機(你的電腦)的 8080 埠映射到容器內的 8080 埠。這樣,當你在主機上訪問 localhost:8080,就會連接到容器內的應用程式的 8080 埠。
  • websocket:這是要執行的 映像檔名稱(image name)。它代表要使用的 Docker 映像檔來建立並啟動容器。
raw-image

5.連線結果

raw-image

※ 指令解說:

docker run -p 80:8080 -d my-express-service//容器的名稱

指令解說:

  • -p 80:8080:將 主機的 80 號端口映射到容器的 8080 號端口,這樣外部使用者可以透過 80 號端口訪問容器內的應用程式。
  • -d:讓容器 以背景模式運行(不會佔據終端畫面)。

確認啟動結果

raw-image
raw-image
docker images

指令解說:列出本地存儲的所有映像檔(images)

raw-image
docker tag websocket carola1408/websocket:latest
docker push carola1408/websocket:latest

指令解說:

  • docker tag : 重新命名 本地的 websocket 映像檔,並加上 Docker Hub 帳號和版本(latest)。
  • docker push:將你的映像檔上傳到 Docker Hub,讓其他人可以下載。
docker run carola1408/websocket

指令解說:使用 docker run來啟動Docker 映像檔。

raw-image
docker image tag 75ec995cba94 olive/websocket

指令解說:使用docker image tag 指令可以用來為現有的 Docker 映像建立新的標籤(tag),但它並不會真正更改映像的名稱,而是讓相同的映像可以擁有多個標籤。好處是你可以使用新的標籤來識別映像,例如更改倉庫名稱或版本標記。

raw-image
sudo -i //切換成管理員權限才能查看
docker ps

指令解說:

列出目前正在運行的容器,它會顯示正在執行的容器清單,包括容器 ID、名稱、映像名稱(image)、狀態、啟動時間等資訊。

raw-image


※ 聊天室無法連線:

raw-image

解決方式:重新啟動伺服器連線即可

npm run dev

伺服器啟動結果

raw-image

※ 將本地的 Docker 映像檔(image)上傳到遠端的鏡像倉庫(repository):

Docker hub:免費的線上倉庫

https://www.docker.com/products/docker-hub/

raw-image


raw-image
  • 完成驗證
raw-image
  • 回到終端機
docker login
  • 登入成功
raw-image

將映像檔推送到 Docker Hub:

docker tag websocket carola1408/websocket:latest
docker push carola1408/websocket:latest
docker run carola1408/websocket
  • 推送成功
raw-image
  • 運行結果
raw-image

※ 優化Dockerfile:

#以Node.js23 官方Image 作為基底
FROM node:23-slim

# 設定工作的資料夾,讓後續的命令都在這個指定的資料夾內執行。
WORKDIR /app
COPY package.json package-lock.json ./

# 安裝需要的外部套件
RUN npm install

# 複製寫好的程式碼到Docker Image裡面的資料夾
COPY . .

# 打開端口
EXPOSE 8080

#安裝nodemon
RUN npm install -g nodemon

# 執行命令
CMD ["npm", "run", "dev"]

※ 連線伺服器:

raw-image
ssh 34.81.84.66
  • 連線成功:
raw-image
  • 切換管理員權限:
sudo -i
raw-image

※ 在ubuntu主機上安裝docker:

raw-image
raw-image
  • 從網路上下載腳本:
curl -fsSL https://get.docker.com -o get-docker.sh
  • 確認腳本:get-docker.sh:這是一個 Shell 腳本 ,.sh用來安裝docker。
 ls
raw-image
  • 運行腳本:
sudo sh get-docker.sh
raw-image
  • 確認docker版本:
docker -v
raw-image
  • 登入docker:
docker login
  • pull鏡像:
docker pull carola1408/websocket:latest	 	 	 	 	 
  • 啟動連線:
 docker run -p 8080:8080 -d carola1408/websocket
raw-image

※ 解決防火牆設定問題:更改端口設定進入虛擬私有雲網路

  • 原因:新建立的虛擬主機,因為有防火牆的設定導致只有80和43端口才可以使用,8080端口並不在允許端口裡面,所以不能使用。
  • 解決方式:進入虛擬私有雲網路。
raw-image
  • 進入防火牆:設定防火牆規則
raw-image
  • 建立防火牆規則:
raw-image
  • 允許所有人:
raw-image
  • 允許端口:設定8080
raw-image
  • 連線成功:
raw-image
























留言
avatar-img
留言分享你的想法!
avatar-img
奧莉薇走在成為後端工程師之路上
20會員
145內容數
全端網頁開發專業知識分享
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
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
獲取Image docker pull 查看Image docker images 可以查看REPOSITORY、TAG、IMAGE ID、CREATED與SIZE。 創建Image docker build [OPTIONS] PATH | URL | - 上傳Imag
Thumbnail
獲取Image docker pull 查看Image docker images 可以查看REPOSITORY、TAG、IMAGE ID、CREATED與SIZE。 創建Image docker build [OPTIONS] PATH | URL | - 上傳Imag
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
前言 大家好上次我們教了如何下載 Docker Image 使用,今天我們要教如何產出自己的 Image,這次會使用一個 Dockerfile 範例,自行打包 Docker Image,初步練習使用 Docker 指令 下載 Dockerfile 教學檔案 在這裡我已經幫忙寫好一個 Docke
Thumbnail
前言 大家好上次我們教了如何下載 Docker Image 使用,今天我們要教如何產出自己的 Image,這次會使用一個 Dockerfile 範例,自行打包 Docker Image,初步練習使用 Docker 指令 下載 Dockerfile 教學檔案 在這裡我已經幫忙寫好一個 Docke
Thumbnail
當你安裝完docker,並且設定好所有相關程序後。你正要使用docker去進行操作,讓專案可以在容器哩,方便平台移轉、備份、共用等等等等等;如果你遇到CUDA docker runtime 的問題時,這篇正適合你閱讀。 開始之前,如果你要參考怎麼安裝docker,設定docker環境,請參考:
Thumbnail
當你安裝完docker,並且設定好所有相關程序後。你正要使用docker去進行操作,讓專案可以在容器哩,方便平台移轉、備份、共用等等等等等;如果你遇到CUDA docker runtime 的問題時,這篇正適合你閱讀。 開始之前,如果你要參考怎麼安裝docker,設定docker環境,請參考:
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 這
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News