2025年2月21日 星期五

[Docker]Docker Compose 如何安裝?需要有 Docker Desktop 嗎?

Docker Compose 安裝方式

Docker Compose 是一個獨立的工具,用來編排和管理多個 Docker 容器。

不一定需要 Docker Desktop,但 Docker Compose 需要 Docker Engine 來運行容器。


1️⃣ Docker Compose 是否已安裝?

在終端機或命令提示字元中執行:

docker-compose version

或者(新版 Docker Compose 使用 docker compose 指令):

docker compose version

如果已安裝,會顯示類似:

Docker Compose version v2.20.2

如果 沒有安裝,請參考以下安裝方式。


2️⃣ 安裝 Docker Compose

🔹 方法 1:使用 Docker Desktop(推薦 Windows/macOS)

如果你安裝了 Docker Desktop(Windows/macOS),它已經內建了 Docker Compose,你可以直接使用:

docker compose version

👉 下載 Docker Desktop官方下載頁面


🔹 方法 2:獨立安裝 Docker Compose(二進位檔案)

如果你不想安裝 Docker Desktop,或使用的是 Linux 伺服器,可以手動安裝 Docker Compose。

📌 安裝步驟(適用 Linux / Mac)

1️⃣ 下載最新版本

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2️⃣ 設定執行權限

sudo chmod +x /usr/local/bin/docker-compose

3️⃣ 確認安裝成功

docker-compose version

🔹 方法 3:使用 pip 安裝(適用 Python 環境)

如果你有 Python 環境,也可以透過 pip 安裝:

pip install docker-compose

然後確認:

docker-compose version

3️⃣ 使用 Docker Compose

如果安裝成功,你可以用以下指令測試:

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

建立 docker-compose.yml

version: '3.8'
services: hello-world: image: hello-world

啟動:

docker-compose up

應該會看到 Hello from Docker!,表示 Docker Compose 運作正常!

Docker 與Docker Compose 有什麼不同

 Docker 和 Docker Compose 主要的區別在於它們的用途和操作方式:

比較項目DockerDocker Compose
用途管理單個容器管理多個容器(編排)
使用方式docker run 指令啟動容器docker-compose.yml 設定並啟動多個容器
適用場景簡單應用、單一服務微服務架構、複雜應用
依賴管理需要手動處理容器依賴自動管理容器間的關聯
配置方式透過 CLI 參數指定透過 YAML 檔案配置


什麼是 Docker?

Docker 是一個用來管理容器的工具,可以讓你在不同環境中執行相同的應用程式。

示例:使用 Docker 啟動單個 MySQL 容器

docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:latest

這個指令會:

  1. 從 Docker Hub 拉取 mysql:latest 映像檔。
  2. 建立一個名為 mysql 的容器。
  3. 設定 MYSQL_ROOT_PASSWORD 環境變數。
  4. 將主機的 3306 端口映射到容器的 3306。

但如果你有多個容器,例如 MySQL + PHP + Redis,你需要手動啟動並連接它們,這就變得很麻煩。



什麼是 Docker Compose?

Docker Compose 是一個編排工具,讓你能夠使用 docker-compose.yml 檔案來管理多個容器。

示例:使用 Docker Compose 啟動 MySQL + PHPMyAdmin

  1. 建立 docker-compose.yml

    version: '3.8'
    services: mysql: image: mysql:latest restart: always environment: MYSQL_ROOT_PASSWORD: root ports: - "3306:3306" phpmyadmin: image: phpmyadmin/phpmyadmin restart: always ports: - "8080:80" environment: PMA_HOST: mysql
  2. 啟動所有服務

    docker-compose up -d
    • 這會同時啟動 mysql 和 phpmyadmin,並自動設定它們的連線關係。
  3. 檢查運行中的容器

    docker-compose ps
  4. 停止並刪除所有容器

    docker-compose down


何時使用 Docker? 何時使用 Docker Compose?

✅ 使用 Docker 當你

  • 只需要單個容器,例如一個 Nginx 或 MySQL。
  • 想要快速測試某個映像檔。

✅ 使用 Docker Compose 當你

  • 需要多個容器,例如 Web 應用 + 資料庫 + Redis
  • 想要自動管理依賴關係,例如 Kafka + Zookeeper
  • 想要更容易維護與分享專案,只需提供 docker-compose.yml


總結

場景推薦使用
只需啟動一個容器(如 MySQL)Docker
需要多個容器(如 Web + DB + Cache)Docker Compose
想要手動控制每個容器Docker
想要自動化啟動整個應用Docker Compose

簡單來說:Docker 是基礎,Docker Compose 是幫助你一次管理多個 Docker 容器的工具!

2025年2月19日 星期三

[wsdapi]允許 Windows 設備自動發現和通信,如 網絡印表機、掃描儀、IoT 設備等

WSDAPI(Web Services on Devices API)簡介

WSDAPI(Web Services on Devices API)  微軟(Microsoft) 開發的一套 API,主要用於 設備發現與通訊,基於 WS-Discovery(Web Services Dynamic Discovery) 協議。它允許 Windows 設備自動發現和通信,如 網絡印表機、掃描儀、IoT 設備等


WSDAPI 的應用場景

  1. Windows 設備自動發現

    • 用於發現局域網內的設備(如印表機、掃描儀、NAS、智慧家居設備)。
    • 取代傳統的 NetBIOS、UPnP、Bonjour,實現更現代化的設備探索。
  2. 網絡印表機(Network Printer)

    • 許多 Windows 10/11 自動安裝的網絡印表機 使用 WSD 來進行連接,而不是傳統的 TCP/IP 連接。
  3. 物聯網(IoT)設備

    • 某些 IoT 設備使用 WSDAPI 來提供動態的設備發現與管理。
  4. 遠端設備管理

    • IT 管理員 可以使用 WSDAPI 來監控和管理網絡中的設備。


WSDAPI 在 Kali Linux 中的相關性

在 Kali Linux 或其他滲透測試環境中,WSDAPI 可能會成為安全分析或滲透測試的目標,因為:

  1. WSD 可能洩露內部網絡信息(如 IP、主機名、設備類型)。
  2. 某些設備的 WSD 端口(TCP/5357 和 UDP/3702)可能存在安全漏洞
  3. WSD 可以被用於內部網絡中的橫向移動(Lateral Movement),幫助攻擊者發現更多內部設備。


如何在 Kali Linux 中偵測 WSDAPI 設備?

你可以使用 Nmap 來掃描 WSD 服務:

nmap -sU -p 3702 --script=wsdd-discover <target-ip>

這將嘗試發現 啟用了 WSDAPI 的設備

如果你想要針對 TCP/5357(WSD Web 服務) 進行掃描:

nmap -p 5357 --script=http-title <target-ip>


WSDAPI 可能存在的問題

  1. 安全風險:某些老舊設備的 WSD 服務可能存在 未經驗證的訪問漏洞,允許攻擊者收集設備信息或執行遠程攻擊。
  2. 網絡故障:某些企業環境中,WSD 可能會導致印表機或掃描儀無法正常工作,因為某些設備可能不完全兼容 WSD。
  3. 防火牆限制:如果 WSD 端口(TCP 5357、UDP 3702)被阻擋,則設備發現功能可能會失效。


2025年2月8日 星期六

Linux 中安裝 Visual Studio Code

在 AlmaLinux 中安裝 Visual Studio Code 的步驟如下:


1. 更新系統

在開始之前,確保系統是最新的。

sudo dnf update -y

2. 添加 Microsoft 存儲庫

Visual Studio Code 是由 Microsoft 提供的,因此需要先添加其官方存儲庫。

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'

3. 安裝 Visual Studio Code

更新存儲庫並安裝 VS Code。

sudo dnf check-update
sudo dnf install code -y

4. 驗證安裝

安裝完成後,可以檢查 VS Code 是否安裝成功。

code --version

5. 啟動 Visual Studio Code

你可以在命令行中啟動 VS Code:

code

或者,從桌面環境的應用程式菜單中找到 Visual Studio Code 並點擊啟動。


可選:安裝常用工具

  1. Git(進行版本控制):
    sudo dnf install git -y
  2. Node.js(用於開發 JavaScript 應用):
    sudo dnf install nodejs -y
  3. Python(用於 Python 開發):
    sudo dnf install python3 -y

6. 安裝 VS Code 擴展

在 VS Code 啟動後,可以安裝一些有用的擴展(如 Python、C++、Docker 等)。

  • 打開 VS Code,按下 Ctrl+Shift+X 打開擴展菜單。
  • 搜索並安裝所需的擴展。

故障排除

  1. 如果無法啟動 VS Code,檢查是否缺少依賴項:

    sudo dnf install libXScrnSaver -y
  2. 確保網絡連接正常,並且系統有權限訪問 Microsoft 的存儲庫。



docker 容器的啟用

Error response from daemon: container 8f95a778f4cc9687267077fafe956b0a0a6e0aa4c689952e50883d4b222659c0 is not running

錯誤信息表示,你試圖對一個容器執行操作時,該容器目前未處於運行狀態。具體原因可能有以下幾種:


問題原因

  1. 容器未啟動

    • 你試圖執行如 docker exec 等需要容器正在運行的命令,但該容器已停止。
  2. 容器已經退出

    • 容器的進程結束了(例如運行的應用程序崩潰、腳本執行完成等)。
  3. 容器 ID 或名稱錯誤

    • 提供的容器 ID 或名稱不正確,導致 Docker 找不到正在運行的容器。

解決方法

1. 查看容器狀態

運行以下命令查看容器的運行狀態:

docker ps -a
  • docker ps:僅顯示正在運行的容器。
  • docker ps -a:顯示所有容器(包括停止的容器)。

檢查容器 8f95a778f4cc 是否已停止或未找到。


2. 啟動容器

如果容器已停止,可通過以下命令啟動容器:

docker start 8f95a778f4cc

啟動後再次嘗試執行命令,例如:

docker exec -it 8f95a778f4cc bash

3. 檢查容器日誌

如果容器意外停止,查看日誌以排查問題:

docker logs 8f95a778f4cc

根據日誌信息調整配置或重啟容器。


4. 重建容器

如果容器因某些配置問題無法正常運行,可以刪除並重新創建容器:

docker rm 8f95a778f4cc
docker run [OPTIONS] IMAGE [COMMAND]

5. 容器 ID 或名稱確認

確保輸入的容器 ID 或名稱正確,可以使用以下命令查詢:

docker ps -a --filter "name=部分容器名稱"

這將過濾出名稱中包含特定關鍵字的容器。


建議流程

  1. 執行 docker ps -a 檢查容器狀態。
  2. 如果容器未運行,使用 docker start 啟動。
  3. 如果容器崩潰或報錯,查看日誌進行調整。
  4. 如果需要操作停止的容器文件系統,可以使用:
    docker start 8f95a778f4cc
    docker exec -it 8f95a778f4cc bash
    或者用:
    docker run -it --rm IMAGE_NAME bash
    創建一個新容器。

[Docker]Docker Compose 如何安裝?需要有 Docker Desktop 嗎?

Docker Compose 安裝方式 Docker Compose 是一個 獨立的工具 ,用來編排和管理多個 Docker 容器。 你 不一定需要 Docker Desktop ,但 Docker Compose 需要 Docker Engine 來運行容器。 1️⃣ Dock...