【科技友瘋狂】Docker 入門教學:從基礎概念到實作

關鍵字 :DockerBackEndDevOps全端工程師修煉日記nodeapp

在現代軟體開發中,如何快速部署應用程式?
傳統方法需要在每台機器上手動安裝環境,這不僅繁瑣,還容易發生「本機可運行,伺服器卻不行」的問題。

Docker 解決了這個問題,它透過容器技術,讓應用程式及其相依環境可以一次封裝,隨時隨地運行,無論是在開發機、測試環境,還是雲端伺服器,都能確保一致性。

本篇文章將帶你 從零開始學習 Docker,包含 Docker 的概念、安裝、基本指令、建立容器與映像檔,讓你快速掌握這項熱門技術!?


1. 什麼是 Docker?

Docker 是一個 容器化(Containerization)技術,可以讓應用程式及其所有的相依環境封裝成一個獨立的單元,並能夠在不同的作業系統上執行,而不會受限於底層環境。

Docker 與傳統虛擬機的差異

  傳統虛擬機(VM) Docker 容器(Container)
啟動速度 幾分鐘 幾秒內
資源消耗 需要完整作業系統,佔用大量 CPU/RAM 共享宿主機核心,輕量快速
環境一致性 每個 VM 需手動安裝環境 一次封裝,可在不同機器運行
適用場景 大型應用、需要完整 OS 微服務、快速部署

? Docker 容器比虛擬機更輕量、啟動更快,適合開發、測試、部署!


2. 安裝 Docker

Windows / macOS

  1. 下載 Docker Desktop:https://www.docker.com/products/docker-desktop
  2. 安裝後啟動 Docker Desktop,並確保 Docker 服務正在運行
  3. 測試安裝是否成功:
    docker --version
    

Linux(Ubuntu 安裝)

sudo apt update
sudo apt install docker.io -y
sudo systemctl start docker
sudo systemctl enable docker

測試是否安裝成功:

docker --version

3. Docker 基本指令

1. 下載映像檔

Docker 映像檔(Image)是預先建構好的應用環境,例如官方的 Nginx、MySQL、Node.js 等。
使用 docker pull 下載映像檔,例如下載最新版本的 Ubuntu:

docker pull ubuntu

2. 執行容器

docker run 指令用於建立並運行容器,例如執行一個 Ubuntu 容器:

docker run -it ubuntu

指令說明:

  • -it:讓容器以交互模式運行(可輸入指令)
  • ubuntu:指定映像檔名稱

3. 查看運行中的容器

docker ps

若想查看所有容器(包含已停止):

docker ps -a

4. 停止與刪除容器

停止某個容器:

docker stop <CONTAINER_ID>

刪除某個容器:

docker rm <CONTAINER_ID>

一次刪除所有容器:

docker rm $(docker ps -aq)

5. 刪除映像檔

docker rmi <IMAGE_ID>

刪除所有未使用的映像檔:

docker image prune -a

4. 建立自己的 Docker 映像檔

如果你想將自己的應用程式打包成 Docker 映像檔,可以使用 Dockerfile 來定義環境。

1. 建立專案目錄

mkdir my-docker-app && cd my-docker-app

2. 建立 app.js(Node.js 應用)

const express = require("express");
const app = express();

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

app.listen(3000, () => console.log("Server running on port 3000"));

3. 建立 package.json

{
  "name": "docker-app",
  "version": "1.0.0",
  "main": "app.js",
  "dependencies": {
    "express": "^4.17.1"
  }
}

4. 建立 Dockerfile

# 使用官方 Node.js 映像檔
FROM node:16

# 設定工作目錄
WORKDIR /app

# 複製 package.json 並安裝相依套件
COPY package.json ./
RUN npm install

# 複製應用程式程式碼
COPY . .

# 指定執行的指令
CMD ["node", "app.js"]

# 暴露 3000 連接埠
EXPOSE 3000

5. 建立 Docker 映像檔

docker build -t my-node-app .

6. 執行容器

docker run -p 3000:3000 my-node-app

現在,你可以打開瀏覽器,訪問 http://localhost:3000,看到 Hello, Docker!!?


5. 使用 Docker Compose(多容器管理)

如果你的應用需要多個服務(如 Node.js + MySQL),可以使用 docker-compose.yml 來定義整個架構。

建立 docker-compose.yml

version: "3"
services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: mydb

啟動所有容器

docker-compose up -d

這將會同時啟動 Node.js 伺服器與 MySQL!?


6. 常見 Docker 指令速查表

指令 說明
docker pull <image> 下載映像檔
docker images 查看本機映像檔
docker ps 查看執行中的容器
docker ps -a 查看所有容器
docker run -it <image> 執行容器
docker stop <container> 停止容器
docker rm <container> 刪除容器
docker build -t <name> . 建立映像檔
docker run -p 3000:3000 <image> 執行容器並映射連接埠
docker-compose up -d 啟動 docker-compose.yml 定義的所有服務

7. 結論

Docker 是現代開發不可或缺的工具,能夠讓應用程式封裝成可攜式的容器,方便部署與管理。

? 你學到了什麼?

Docker 能夠封裝應用程式及其環境,確保一致性


Dockerfile 可以自動化構建映像檔
Docker Compose 可以管理多個容器

現在,就開始用 Docker 打造你的第一個專案吧!?

? 你有使用 Docker 嗎?遇到哪些挑戰?歡迎留言討論!?

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論