2024年7月18日 星期四

Docker是什麼?使用Docker的好處與實戰實例

Docker是一個開源的容器化平台,可以用來打包、運行和分享應用程式。Docker通過容器化技術實現了應用程式的獨立性和可移植性,讓開發者和運維人員可以更加便捷地進行應用程式的開發、部署和運維。

容器技術的歷史與趨勢

過去,當我們想要在不同的環境下運行同一份程式碼,我們需要使用虛擬機技術。然而,虛擬機有一些固有的問題,比如需要的資源多、啟動慢、難以移動和複製等。容器技術則為解決這些問題提供了新的方向。

容器是一種軟體技術,可以將應用程式及其全部運行環境(包括文件系統、系統庫等)打包在一起,形成一個獨立、一致的運行單元。容器之間互相隔離,但共享同一個作業系統,每個容器都像一個輕量級的虛擬機。這種技術可以讓開發者在不同的系統和環境中,輕鬆地運行和管理他們的應用程式。

為什麼要使用Docker?

  1. 環境一致性:Docker可以將應用程式及其所有依賴項打包在一個容器中,確保了從開發到測試到生產的整個生命週期中,環境的一致性。這解決了“在我的機器上運行得好好的”這種常見問題。
  2. 輕量級和性能優越:與傳統的虛擬機相比,Docker容器不需要運行一整套操作系統,而是直接使用主機的操作系統,這使得容器變得非常輕量且啟動速度快。
  3. 應用程式隔離:每個容器都在其自己的空間中運行,並有其自己的網路和文件系統,互不干擾。這提供了額外的安全層,也使得各種應用程式可以在同一台機器上共存。
  4. 可移植性:由於容器包含了所有需要的依賴項,因此它可以在任何安裝了Docker的系統上運行,無論這個系統是物理機還是虛擬機,是在數據中心還是在雲端。
  5. 易於管理和擴展:Docker提供了豐富的工具和平台,用於管理容器、服務和集群,使應用程式的部署、擴展和運維變得簡單。

Docker的主要功能

  1. 容器創建和管理:Docker提供了創建、啟動、停止、移動和刪除容器的命令。
  2. 映像創建和分發:Docker可以從容器創建映像,並將映像分發到其他機器上。這是實現快速應用程式部署和擴展的基礎。
  3. 版本控制:Docker支持映像的版本控制。開發者可以追蹤映像的改變,並在需要的時候回滾到先前的版本。
  4. 資源隔離:Docker使用Linux的cgroups技術來隔離容器的資源,比如CPU、記憶體和網路。
  5. 資源整合:Docker可以將主機的資源如磁盤、網路和文件系統整合到容器中,使容器可以像真實的獨立系統一樣運行。

如何使用Docker?

使用Docker可以分為三個步驟:構建映像、運行容器和分享映像。首先,需要構建一個Docker映像,包括應用程式及其依賴的庫和環境等。然後,運行映像可以通過命令行、Docker Compose等方式實現。最後,可以將構建好的Docker映像分享給其他使用者,讓他們可以快速地部署和運行應用程式。

Docker 是什麼?實戰手札帶你認識 Docker

何時應該使用Docker?

Docker適用於需要開發、部署和運維應用程式的場景,尤其是在多平台、多環境、多依賴等複雜場景下。使用Docker可以提高開發效率、簡化部署流程、減少運維成本、提高應用程式的可靠性和可移植性等。

如何使用Docker

使用Docker很簡單。以下是使用Docker的基本步驟:

  1. 安裝Docker:首先,你需要安裝Docker並在電腦上運行Docker服務。安裝過程可以在Docker的官方網站上找到詳細步驟,並且也有針對不同作業系統的安裝檔案。

根據您的操作系統,選擇合適的Docker安裝方法:

Docker基本概念

  • 映像檔(Image):包含應用程式和其依賴項的打包檔案,可以從Docker Hub下載或自行創建。
  • 容器(Container):映像檔的運行實例,可以創建、啟動、停止或刪除。
  • 倉庫(Repository):存儲映像檔的地方,例如Docker Hub。

Docker實戰:創建和運行容器

我們將一步步地帶領您完成使用Docker開發、部署和運行一個簡單的JavaScript Web應用程式,這裡我們將使用Node.js和Express框架。

  1. 創建Dockerfile

首先,創建一個新的目錄並進入該目錄:

mkdir js-web-app && cd js-web-app

在此目錄中創建一個名為Dockerfile的檔案,並使用以下內容:

# 使用官方Node.js映像檔作為基礎
FROM node:14

# 設置工作目錄
WORKDIR /app

# 將應用程式所需的套件安裝到容器中
COPY package*.json ./
RUN npm install

# 複製應用程式程式碼到容器中
COPY . .

# 暴露容器的端口,供外部訪問
EXPOSE 3000

# 啟動應用程式
CMD ["npm", "start"]

3. 構建映像檔

js-web-app目錄中,創建一個簡單的JavaScript Web應用程式。首先創建package.json檔案:

{
  "name": "js-web-app",
  "version": "1.0.0",
  "description": "A simple JavaScript web app",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "^4.17.1"
  }
}

接下來,創建app.js檔案:

const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.send('Hello, Docker!');
});

app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

js-web-app目錄中運行以下命令構建Docker映像檔:

docker build -t js-web-app .
``

4. 運行容器

使用剛剛構建好的映像檔運行容器:

docker run -d -p 3000:3000 --name my-js-web-app js-web-app

這個命令將會運行一個名為my-js-web-app的容器,並將容器的3000端口映射到主機的3000端口。

5. 訪問應用程式

在瀏覽器中訪問http://localhost:3000,您應該可以看到顯示 “Hello, Docker!” 的頁面。

6. 部署至雲端

將您的應用程式部署到雲端(例如:AWS, Google Cloud, Azure等),首先需要將您的Docker映像檔推送到容器倉庫,例如Docker Hub。

  1. 使用Docker命令登錄Docker Hub(如果您還沒有Docker Hub帳戶,請先註冊一個):
docker login
  1. 為映像檔添加標籤,使用您的Docker Hub用戶名和新的倉庫名稱:
docker tag js-web-app <YOUR_DOCKER_HUB_USERNAME>/js-web-app
  1. 推送映像檔到Docker Hub:
docker push <YOUR_DOCKER_HUB_USERNAME>/js-web-app

接下來,您可以根據您選擇的雲平台,遵循相應的指南部署您的應用程式。例如,對於AWS,您可以選擇使用Amazon ECS來部署和運行您的Docker容器。

Docker的管理工具和平台

在使用Docker時,除了Docker自身提供的命令行工具外,還有許多第三方工具和平台可以幫助我們更方便地管理和使用Docker。以下是幾個常用的推薦:

  1. Docker Compose:這是Docker官方提供的一個工具,可以讓使用者用YAML檔案來定義多個容器的應用程式,並管理它們的生命週期。
  2. Docker Swarm:這是Docker的內建集群管理和編排功能,可以讓使用者管理一群Docker主機,並分發服務到這些主機上。
  3. Kubernetes:這是一個開源的容器編排平台,支援Docker和其他容器技術。它提供了高度自動化的部署、擴展和管理應用程式的功能。
  4. Portainer:這是一個開源的Docker管理工具,提供了一個用戶友好的圖形化介面,讓使用者可以方便地管理Docker容器、映像、網路等。

我們一步步地帶領您完成使用Docker開發、部署和運行一個簡單的JavaScript Web應用程式。Docker簡化了開發、部署和運行應用程式的過程,使得應用程式在不同環境中的運行更加一致。希望這個教學能夠對你有所幫助。

 

 

資料來源:https://tw.alphacamp.co/blog/docker

沒有留言: