อัปเดตล่าสุด: กุมภาพันธ์ 2026

Docker Scout - Security Analysis แบบ Real-time

สแกนช่องโหว่ Docker Images ด้วยเครื่องมืออัตโนมัติที่มีประสิทธิภาพสูง

คู่มือ comprehensive ในการใช้ Docker Scout สำหรับการวิเคราะห์ความปลอดภัยของ container images แบบ real-time พร้อม SBOM และ Provenance

Docker
Security
DevSecOps

1. บทนำ

ในยุคดิจิทัลที่ containerization ได้กลายเป็นส่วนสำคัญของ modern architecture การรักษาความปลอดภัย container images จึงเป็นสิ่งที่หลีกเลี่ยงไม่ได้ Docker Scout เป็นเครื่องมือที่ Docker Inc. พัฒนาขึ้นมา พัฒนาขึ้นมา สำหรับการวิเคราะห์ความปลอดภัยของ container images โดยพร้อมกันด้วยคุณสมบัติที่ครอบคลุมที่สุดในตลาดปัจจุบัน

Docker Scout ไม่เพียงแต่สแกนหา Common Vulnerabilities and Exposures (CVE) อย่างเดียว แต่ยังให้ Software Bill of Materials (SBOM) และ Container Provenance Data ซึ่งช่วยให้ผู้ใช้สามารถติดตามต้นกำเนิดของ container images และประกอบการตัดสินใจด้านความปลอดภัยได้อย่างแม่นยำ

บทความนี้จะพาคุณไปรู้จักกับ Docker Scout อย่างลึกซึ้ง ตั้งแต่การติดตั้ง การใช้งานพื้นฐาน ไปจนถึงการรวมเข้ากับ CI/CD pipeline และการประยุกต์ใช้งานในบริบทของประเทศไทย

2. คุณสมบัติเด่นของ Docker Scout

CVE Scanning

สแกนหาช่องโหว่ใน container images อย่างละเอียด ครอบคลุมทั้ง OS packages และ application dependencies พร้อมให้ข้อมูลรุนแรงของแต่ละ CVE แบบ real-time

Critical High Medium Low

SBOM (Software Bill of Materials)

สร้างรายงานแสดงส่วนประกอบทั้งหมดของ container แบบ detailed ตามมาตรฐาน CycloneDX หรือ SPDX ช่วยให้ติดตาม dependencies และ license compliance ได้ง่าย

CycloneDX Format

Provenance

ตรวจสอบต้นกำเนิดของ container images อย่างแม่นยำ ตั้งแต่ source code ผ่าน build process จนถึง deploy environment ช่วยป้องกัน supply chain attacks

Build Verification

Recommendations

ให้คำแนะนำการแก้ไขช่องโหว่แบบเฉพาะเจาะจง พร้อมให้ reference ไปยัง Dockerfile ที่แนะนำ ทำให้ทีมพัฒนาสามารถนำไปปรับปรุงได้ทันที

Actionable Fixes

Architecture Overview

Developer Docker Scout Docker Image Container Docker Scout Engine Analyzing & Scanning CVE Database NVD, RedHat, etc. SBOM Data CycloneDX, SPDX Provenance Build Info Report JSON, HTML

3. การติดตั้งและตั้งค่าเริ่มต้น

3.1 ข้อกำหนดเบื้องต้น

  • Docker Engine เวอร์ชัน 20.10 ขึ้นไป
  • Docker Desktop เวอร์ชัน 4.15 ขึ้นไป (สำหรับ Window/Mac)
  • Docker Hub Account บัญชีฟรีหรือ Pro plan
  • Docker CLI ติดตั้งแล้วบนระบบของคุณ

3.2 ขั้นตอนการติดตั้ง

Docker Scout ถูกผนวกรวมเข้ากับ Docker CLI แล้วตั้งแต่เวอร์ชัน 20.10 ดังนั้นคุณไม่จำเป็นต้องติดตั้งแยกต่างหาก

terminal.sh
# ตรวจสอบ Docker CLI พร้อมใช้งาน
$ docker --version
Docker version 24.0.5, build ced0996

# ตรวจสอบ Docker Scout plugin
$ docker scout --version
Docker Scout version v1.7.0+docker1

# เข้าสู่ระบบ Docker Hub (จำเป็นสำหรับฟีเจอร์บางอย่าง)
$ docker login
# ป้อน Docker Hub username และ password

หลังจาก login แล้ว คุณสามารถใช้ Docker Scout ได้ทันที

terminal.sh
# ดูคำสั่งที่มีทั้งหมด
$ docker scout --help

# ดูคำสั่งย่อยที่มี
$ docker scout cves --help
$ docker scout sbom --help
$ docker scout provenance --help
$ docker scout recommendations --help

3.3 การตั้งค่า Environment Variables (Optional)

สำหรับผู้ที่ต้องการตั้งค่าล่วงหน้าเพื่อความสะดวกในการใช้งาน:

terminal.sh
# ตั้งค่า Docker Hub username (สำหรับผู้ที่ใช้ Docker Hub)
export DH_USER="your-dockerhub-username"

# ตั้งค่า environment สำหรับ CI/CD
export SCOUT_ENV="production"
export SCOUT_ORGANIZATION="your-organization"

4. วิธีใช้งาน Docker Scout (Usage Examples)

4.1 สแกนช่องโหว่ (CVE Scanning)

คำสั่งพื้นฐานในการสแกนช่องโหว่ใน container image ที่คุณสร้างหรือ pull มาแล้ว

terminal.sh
# สแกน image ที่มีอยู่ใน local (ชื่อ image:tag)
$ docker scout cves nginx:1.25

# สแกน image จาก Docker Hub
$ docker scout cves redis:7-alpine

# สแกน image ที่ build แล้วพร้อม tag ใหม่
$ docker build -t myapp:1.0 .
$ docker scout cves myapp:1.0

# สแกน image จาก registry อื่น
$ docker pull gcr.io/my-project/myapp:latest
$ docker scout cves gcr.io/my-project/myapp:latest

ผลลัพธ์ตัวอย่าง:

2
Critical
8
High
15
Medium
28
Low

4.2 สร้าง SBOM (Software Bill of Materials)

คำสั่งในการสร้างรายงาน SBOM สำหรับ container image:

terminal.sh
# สร้าง SBOM ในรูปแบบ JSON (CycloneDX)
$ docker scout sbom myapp:1.0 --format json > sbom.json

# สร้าง SBOM ในรูปแบบ SPDX (JSON)
$ docker scout sbom myapp:1.0 --format spdx-json > sbom.spdx.json

# สร้าง SBOM และแสดงเป็น text summary
$ docker scout sbom myapp:1.0

# สร้าง SBOM แบบ interactive (view ใน terminal)
$ docker scout sbom myapp:1.0 -i

โครงสร้าง SBOM:

{
  "bomFormat" : "CycloneDX",
  "specVersion" : "1.4",
  "metadata" : {
    "component" : {
      "name" : "myapp",
      "version" : "1.0"
    }
  },
  "components" : [
    {
      "name" : "openssl",
      "version" : "1.1.1w"
    },
    {
      "name" : "curl",
      "version" : "7.88.1"
    }
  ]
}

4.3 ตรวจสอบ Provenance

ตรวจสอบต้นกำเนิดของ container image สำหรับการยืนยันความน่าเชื่อถือ:

terminal.sh
# ตรวจสอบ provenance ของ image
$ docker scout provenance myapp:1.0

# ตรวจสอบ provenance และแสดงรายละเอียด
$ docker scout provenance myapp:1.0 --details

# ตรวจสอบ provenance พร้อม verification
$ docker scout provenance myapp:1.0 --verify

4.4 รับคำแนะนำในการแก้ไข (Recommendations)

รับคำแนะนำการแก้ไขช่องโหว่แบบเฉพาะเจาะจง:

terminal.sh
# รับคำแนะนำการแก้ไข
$ docker scout recommendations myapp:1.0

# รับคำแนะนำและแสดงเป็น HTML report
$ docker scout recommendations myapp:1.0 --format html > recommendations.html

# ดู recommendations แบบ interactive
$ docker scout recommendations myapp:1.0 -i

4.5 การเปรียบเทียบเวอร์ชัน (Version Comparison)

เปรียบเทียบช่องโหว่ระหว่างเวอร์ชันต่างๆ เพื่อดูว่าการอัปเดตช่วยลดช่องโหว่ได้มากน้อยเพียงใด:

terminal.sh
# เปรียบเทียบ between two versions
$ docker scout cves myapp:1.0 --compare myapp:1.1

# ดูช่องโหว่ที่เพิ่มขึ้นในเวอร์ชันใหม่
$ docker scout cves myapp:1.1 --since myapp:1.0

# ดูการเปลี่ยนแปลงของ SBOM
$ docker scout sbom myapp:1.1 --compare myapp:1.0

5. การรวมเข้ากับ CI/CD Pipeline

5.1 GitHub Actions Integration

ตัวอย่าง GitHub Actions workflow ที่ใช้ Docker Scout:

.github/workflows/docker-scout.yml
name: Docker Scout Security Scan

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  security-scan:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Build Docker image
        uses: docker/build-push-action@v5
        with:
          context: .
          push: false
          tags: myapp:${{ github.sha }}

      - name: Run Docker Scout
        uses: docker/scout-action@v1
        with:
          command: cves
          image: myapp:${{ github.sha }}
          format: sarif
          output: docker-scout-results.sarif

      - name: Upload SARIF file
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: docker-scout-results.sarif

      - name: Fail build if critical vulnerabilities found
        run: |
          if docker scout cves myapp:${{ github.sha }} --fail-on=critical 2>&1 | grep -q "critical"; then
            echo "Critical vulnerabilities detected!"
            exit 1
          fi

5.2 GitLab CI Integration

ตัวอย่าง GitLab CI configuration:

.gitlab-ci.yml
stages:
  - build
  - security

variables:
  DOCKER image: myregistry/myapp
  DOCKER Tag: $CI_COMMIT_SHA

build:
  stage: build
  image: docker:24.0.5
  services:
    - docker:24.0.5-dind
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $DOCKER image:$DOCKER Tag .
    - docker push $DOCKER image:$DOCKER Tag

security-scan:
  stage: security
  image: docker:24.0.5
  services:
    - docker:24.0.5-dind
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker pull $DOCKER image:$DOCKER Tag
    - docker scout cves $DOCKER image:$DOCKER Tag --fail-on=critical
    - docker scout sbom $DOCKER image:$DOCKER Tag --format json > sbom.json
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      when: always
    - when: manual

5.3 Jenkins Integration

ตัวอย่าง Jenkins pipeline script:

Jenkinsfile
pipeline {
  agent any
  stages {
    stage("Build") {
      steps {
        withDockerContainer(image: "docker:24.0.5") {
          sh """
            docker build -t myapp:${BUILD_NUMBER} .
          """
        }
      }
    }
    
    stage("Security Scan") {
      steps {
        withDockerContainer(image: "docker:24.0.5") {
          sh """
            docker pull myapp:${BUILD_NUMBER}
            docker scout cves myapp:${BUILD_NUMBER} --fail-on=critical
            docker scout sbom myapp:${BUILD_NUMBER} --format json > sbom.json
            docker scout recommendations myapp:${BUILD_NUMBER} --format html > report.html
          """
        }
      }
    }
    
    stage("Security Gate") {
      steps {
        script {
          def result = sh(script: 'docker scout cves myapp:${BUILD_NUMBER} --json', returnStdout: true)
          def json = readJSON text: result
          
          if (json.summary.critical > 0 || json.summary.high > 2) {
            error "Security gate failed: Too many vulnerabilities"
          }
        }
      }
    }
  }
}

5.4 Bitbucket Pipelines Integration

ตัวอย่าง Bitbucket Pipelines configuration:

bitbucket-pipelines.yml
image: docker:24.0.5

pipelines:
  default:
    - step:
        name: Build and Push Docker Image
        services:
          - docker
        script:
          - docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD
          - docker build -t myapp:$BITBUCKET_COMMIT .
          - docker push myapp:$BITBUCKET_COMMIT
    
    - step:
        name: Security Scan with Docker Scout
        services:
          - docker
        script:
          - docker pull myapp:$BITBUCKET_COMMIT
          - docker scout cves myapp:$BITBUCKET_COMMIT --fail-on=critical
          - docker scout sbom myapp:$BITBUCKET_COMMIT --format json > sbom.json
          - docker scout recommendations myapp:$BITBUCKET_COMMIT > recommendations.txt
    
    - step:
        name: Security Gate
        script:
          - docker pull myapp:$BITBUCKET_COMMIT
          - |
            if docker scout cves myapp:$BITBUCKET_COMMIT --json | grep -q '"critical": [1-9]'; then
              echo "CRITICAL vulnerabilities found!"
              exit 1
            fi

definitions:
  services:
    docker:
      memory: 3072

6. บริบทไทยและตัวอย่างการใช้งานในประเทศไทย

6.1 ความสำคัญสำหรับองค์กรไทย

ในบริบทของประเทศไทย การรักษาความปลอดภัยของ container images มีความสำคัญอย่างยิ่ง โดยเฉพาะสำหรับองค์กรที่ให้บริการด้านการเงิน การแพทย์ และรัฐบาล ซึ่งต้องปฏิบัติตามมาตรฐานความปลอดภัยที่เข้มงวด

การเงินและธนาคาร

ตรวจสอบช่องโหว่ใน container ที่ใช้ในระบบธนาคารออนไลน์และระบบชำระเงิน อิเล็กทรอนิกส์

การแพทย์และสุขภาพ

รักษาความปลอดภัยของข้อมูลผู้ป่วยในระบบ e-Health และระบบจัดการคลินิก

รัฐบาลและภาคสาธารณะ

ปฏิบัติตามมาตรฐาน ISO 27001 และมาตรฐานด้านcybersecurity ของสำนักงานพระพุทธศาสนาแห่งชาติ

Logistical และอีคอมเมิร์ซ

คุ้มครองข้อมูลลูกค้าและธุรกรรมในระบบ logistics และ e-commerce platform

6.2 ตัวอย่างการใช้งานจริงในองค์กรไทย

บริษัท FinTech ชื่อดัง

สถาบันการเงินดิจิทัลระดับประเทศ

ปัญหาก่อนใช้ Docker Scout: มีช่องโหว่ critical ใน container ของระบบชำระเงินที่ถูกكتشفหลัง deploy โดยใช้เวลา 3 วันในการแก้ไขและต้องหยุดระบบชั่วคราว
แนวทางแก้ไข: นำ Docker Scout เข้ามาใช้ใน CI/CD pipeline และตั้งกฎว่า build ที่มี critical vulnerability จะไม่สามารถ deploy ได้
ผลลัพธ์: ลดเวลาในการค้นหาและแก้ไขช่องโหว่จาก 3 วันเหลือ 2 ชั่วโมงและสามารถป้องกันการ deploy image ที่มีช่องโหว่ได้ทันที

โรงพยาบาลเอกชนใหญ่

ระบบ e-Health และ HIS

ความท้าทาย: การตรวจสอบ compliance กับมาตรฐานความปลอดภัยของข้อมูลผู้ป่วย (PDPA) ที่เป็นความลับทางการแพทย์
การใช้งาน Docker Scout: ใช้ Docker Scout ในการสร้าง SBOM สำหรับ container ที่เกี่ยวข้องกับระบบ HIS และ EHR เพื่อแสดงให้เห็นว่ามี software components อะไรบ้าง และมีช่องโหว่ใดที่อาจส่งผลต่อความปลอดภัยของข้อมูล
ผลที่ได้: ได้รับการยืนยันว่าระบบมีความปลอดภัยตามมาตรฐาน ISO 27001 และสามารถผ่านการ audit ได้โดยไม่มีข้อขัดแย้ง

6.3 การแปลงหน่วยและค่าพื้นฐานที่ควรทราบ

สำหรับผู้ที่ยังไม่คุ้นเคยกับ Docker Scout นี่คือคำอธิบายของคำศัพท์ที่ใช้บ่อย:

CVE (Common Vulnerabilities and Exposures)

ระบบรหัสประจำช่องโหว่ความปลอดภัยที่เป็นที่ยอมรับในระดับสากล

CVSS (Common Vulnerability Scoring System)

ระบบการให้คะแนนความรุนแรงของช่องโหว่ (0-10)

SBOM (Software Bill of Materials)

รายการส่วนประกอบทั้งหมดของซอฟต์แวร์ (คล้าย slip ของอาหาร)

SLSA (Supply Chain Levels for Software Artifacts)

ระดับความปลอดภัยของ supply chain สำหรับซอฟต์แวร์

Provenance

ข้อมูลต้นทางและประวัติการสร้าง container image

Docker Hub

Registry ของ Docker สำหรับเก็บและแชร์ container images

7. Best Practices ในการใช้งาน Docker Scout

1

ใช้ใน CI/CD Pipeline

รวม Docker Scout เข้ากับ pipeline ทุกครั้งที่มีการ build หรือ deploy image เพื่อป้องกันไม่ให้ deploy image ที่มีช่องโหว่

2

ตั้ง Security Gate

กำหนด rule ว่าไม่ให้ deploy image ที่มีช่องโหว่ระดับ critical และจำกัดจำนวน high vulnerability

3

ใช้ SBOM สำหรับ Inventory

ใช้ SBOM เพื่อจัดการ inventory ของ software packages และติดตาม license compliance

4

ตรวจสอบ Provenance อย่างสม่ำเสมอ

ตรวจสอบ provenance ของ third-party images และ container images ที่มาจาก source ภายนอก

5

อัปเดต Docker Scout อย่างสม่ำเสมอ

อัปเดต Docker Scout ให้เป็นเวอร์ชันล่าสุดเพื่อให้ได้ database ของ CVE ล่าสุดและฟีเจอร์ใหม่ๆ

6

ใช้ Base Image ที่ปลอดภัย

เริ่มต้นด้วย base image ที่ได้รับการตรวจสอบแล้ว เช่น Docker Official Images หรือ images จากผู้ผลิตที่น่าเชื่อถือ

Pro Tip: การอ่านผลลัพธ์ของ Docker Scout

เมื่อคุณได้รับผลลัพธ์จากการสแกน อย่าเพียงแค่มองดูจำนวนช่องโหว่ แต่ให้พิจารณา:

  • CVE Score (CVSS): ดูคะแนนความรุนแรง ตั้งแต่ 0-10 ช่องโหว่ที่มีคะแนนสูงกว่า 7.0 ถือว่า High
  • PWNED: หากมีคำนี้หมายความว่าช่องโหว่นี้มีชุดการโจมตี (exploit) ที่ใช้ได้จริงแล้ว
  • Fix Available: ดูว่ามีการอัปเดต patch หรือไม่ ถ้ามีควรอัปเดตทันที
  • Base Image: ตรวจสอบว่าช่องโหว่มาจาก base image หรือ application layer

8. เปรียบเทียบ: Docker Scout vs Trivy

หัวข้อ Docker Scout Trivy
พัฒนาโดย Docker Inc. Aqua Security
ประเภท SaaS (Cloud-native) Open Source / Commercial
การติดตั้ง รวมกับ Docker CLI (ง่าย) ต้องติดตั้งแยก (ซับซ้อนกว่า)
CVE Database Docker Vulnerability Reporting (อัปเดตเร็ว) Multi-source (NVD, RedHat, etc.)
SBOM Generation Built-in Built-in
Provenance Built-in ไม่มี (ต้องใช้ tool อื่น)
Integration Docker native (ง่ายที่สุด) Third-party tools (มาก variety)
ราคา Free / Pro Plan ($4-8 ต่อ user/เดือน) Free (Open Source) / Commercial ($20+/user/เดือน)
Recommended Use Case

Docker Scout Advantage

  • ผนวกรวมกับ Docker CLI ได้ดีที่สุด
  • มี Provenance ตรวจสอบต้นทาง image
  • มี interface ที่ใช้งานง่าย
  • Database อัปเดตเร็วจาก Docker Inc.
  • มีRecommendations แบบเฉพาะเจาะจง

Trivy Advantage

  • Free และ Open Source (ไม่เสียค่าใช้จ่าย)
  • ครอบคลุมหลาย platform (Kubernetes, Cloud, etc.)
  • ปรับแต่งได้มาก (Custom rules, config)
  • มี community ที่แข็งแรง
  • รองรับหลาย source ของ CVE

9. แก้ไขปัญหาที่พบบ่อย (Troubleshooting & FAQ)

ไม่สามารถใช้ docker scout ได้ หรือหา command ไม่เจอ

ปัญหา: เมื่อพิมพ์ docker scout แล้วได้ error:

docker: 'scout' is not a docker command.

วิธีแก้:

  • ตรวจสอบเวอร์ชัน Docker CLI ของคุณ: docker --version ควรเป็น 20.10 ขึ้นไป
  • ถ้าเวอร์ชันเก่า ให้อัปเดต Docker Desktop หรือ Docker CLI
  • สำหรับ Linux: sudo apt-get update && sudo apt-get install docker-ce-cli

Error: "authentication required"

ปัญหา: เมื่อใช้คำสั่ง docker scout ได้รับ error ว่าต้อง authentication

วิธีแก้:

terminal.sh
# เข้าสู่ระบบ Docker Hub
$ docker login

# หรือถ้าใช้ Docker Hub Pro/Team
$ docker login --username your-username

ผลลัพธ์ไม่มีข้อมูลหรือว่างเปล่า

ปัญหา: เมื่อสแกน image แล้วไม่เจอข้อมูลใดๆ

สาเหตุที่เป็นไปได้:

  • Image อาจไม่มี package ใดๆ (เช่น image เปล่าหรือ scratch)
  • Image อาจเป็น multi-stage build ที่ไม่ได้ include package manager
  • Docker Scout ไม่สามารถ read image ได้

วิธีแก้:

terminal.sh
# ตรวจสอบว่า image มี package หรือไม่
$ docker run --rm -it your-image ls /usr/bin

# หรือลองสแกน image ที่มี package ชัดเจน
$ docker scout cves alpine:latest

ช่องโหว่ที่แสดงมีจำนวนมากเกินไป!

คำแนะนำ: อย่าเพียงแค่มองดูจำนวนช่องโหว่ ให้ดู:

1. Critical & High: แก้ไขทันที (ควรไม่มี)

2. Medium: วางแผนแก้ไขใน sprint ถัดไป

3. Low: อาจปล่อยไว้ชั่วคราว ถ้าไม่มีผลกระทบใหญ่

terminal.sh
# ดูเฉพาะ critical ซึ่งควรแก้ไขทันที
$ docker scout cves your-image --severity=critical

# ดูเฉพาะ high ขึ้นไป
$ docker scout cves your-image --severity=high

# ดูเฉพาะ medium ขึ้นไป
$ docker scout cves your-image --severity=medium

ตัวอย่าง Dockerfile ที่ปลอดภัย (Best Practice)

ตัวอย่าง Dockerfile ที่ลดช่องโหว่ได้:

Dockerfile
# ใช้ Base Image ที่ได้รับการตรวจสอบแล้ว
FROM python:3.11-slim

# ไม่ใช้ root
RUN useradd -m appuser
USER appuser

# ตั้งค่า working directory
WORKDIR /app

# Copy only needed files
COPY --chown=appuser requirements.txt .
COPY --chown=appuser app.py .

# Install dependencies
RUN pip install --no-cache-dir -r requirements.txt

# ปล่อย port
EXPOSE 8080

# Command
CMD ["python", "app.py"]

* Docker Scout จะช่วยตรวจสอบว่า Dockerfile นี้มีปัญหาด้านความปลอดภัยหรือไม่เมื่อ build image แล้ว