รัน Keycloak ด้วย Docker
วิธีที่เร็วที่สุดในการรัน Keycloak บนเครื่องคือผ่าน Docker image ทางการบน quay.io มีทุกอย่างที่คุณต้องการ ไม่ต้องติดตั้ง database แยกต่างหาก คำสั่งเดียว Keycloak ก็พร้อมที่ port 8080
อธิบายคำสั่ง start-dev
หัวข้อที่มีชื่อว่า “อธิบายคำสั่ง start-dev”แต่ละส่วนของคำสั่ง docker run ทำงานดังนี้:
docker run --name keycloak— ตั้งชื่อ container เพื่อให้อ้างอิงได้ในภายหลังด้วยdocker stop keycloakหรือdocker rm keycloak-p 8080:8080— map port 8080 บน host ไปยัง port 8080 ใน container ทำให้http://localhost:8080เชื่อมต่อถึง Keycloak ได้-e KC_BOOTSTRAP_ADMIN_USERNAME=admin— กำหนด admin username เริ่มต้น environment variable นี้ใช้เฉพาะตอน boot ครั้งแรกที่ยังไม่มี admin account-e KC_BOOTSTRAP_ADMIN_PASSWORD=admin— กำหนด admin password เริ่มต้น ควรเปลี่ยนในทุก environment จริง อย่าปล่อยเป็นadminนอกจาก local devquay.io/keycloak/keycloak:latest— official Keycloak image จาก Red Hat Quay registry ควร pin version เฉพาะเจาะจง (เช่น26.0) ใน CI หรือ stagingstart-dev— เริ่ม Keycloak ใน development mode พร้อม embedded H2 in-memory database และเปิด HTTP โดยไม่ต้องใช้ TLS certificate
docker run --name keycloak -p 8080:8080 \
-e KC_BOOTSTRAP_ADMIN_USERNAME=admin \
-e KC_BOOTSTRAP_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak:latest start-devเปิด admin console
หัวข้อที่มีชื่อว่า “เปิด admin console”- รอจนกว่า log จะแสดงบรรทัด
Keycloak X.Y.Z on JVM (powered by Quarkus) started— นั่นหมายความว่า Keycloak พร้อมใช้งานแล้ว - เปิด
http://localhost:8080ใน browser - คลิก “Administration Console”
- Sign in ด้วย username
adminและ passwordadmin - ตอนนี้คุณอยู่ใน admin console ของ master realm แล้ว
admin console vs account console
หัวข้อที่มีชื่อว่า “admin console vs account console”admin console (http://localhost:8080) คือ management UI สำหรับผู้ดูแลระบบ คุณสร้าง realm, client, user, role และ identity provider ที่นี่ เฉพาะสมาชิกในทีมที่ต้องการ configure Keycloak เท่านั้นที่ควรมีสิทธิ์เข้าถึง
account console (http://localhost:8080/realms/master/account) คือ self-service portal สำหรับผู้ใช้ทั่วไป ผู้ใช้สามารถอัปเดต profile, เปลี่ยน password และจัดการ session ที่ active อยู่ได้ที่นี่ ผู้ใช้แอปพลิเคชันของคุณจะมาที่นี่ ไม่ใช่ admin console แต่ละ realm มี account console ของตัวเองที่ /realms/{realm-name}/account
หยุดและลบ container
หัวข้อที่มีชื่อว่า “หยุดและลบ container”# Stop the containerdocker stop keycloak# Remove the container (data is lost — this is dev mode)docker rm keycloakเนื่องจาก start-dev ใช้ in-memory H2 database realm, client และ user ทั้งหมดที่คุณสร้างจะหายไปเมื่อลบ container ใน module ถัดไปคุณจะได้เรียนรู้วิธี persist ข้อมูลด้วย external database
ข้อแลกเปลี่ยน
หัวข้อที่มีชื่อว่า “ข้อแลกเปลี่ยน”| ตัวเลือก | Benefit | Cost |
|---|---|---|
start-dev ใน Docker container | เริ่มใช้งานได้ในคำสั่งเดียว ไม่ต้องตั้งค่า database, เหมาะกับการทดลองและเรียนรู้ | ข้อมูลหายทุกครั้งที่ container ถูกลบ, ไม่มี TLS, ไม่เหมาะกับ workload จริงแม้แต่ staging ที่ต้องการความเสถียร |
start พร้อม external database (production mode) | ข้อมูล persist ผ่าน restart/redeploy, รองรับ TLS และ hostname ที่แน่นอน, scale ได้หลาย instance | ต้องตั้งค่า database, TLS certificate และ reverse proxy เพิ่มเติมก่อนใช้งานได้ |
ข้อผิดพลาดที่พบบ่อย
หัวข้อที่มีชื่อว่า “ข้อผิดพลาดที่พบบ่อย”- รัน
start-devแล้วลืมสลับเป็นstartก่อนขึ้น production —start-devปิด security check หลายตัวและใช้ in-memory database ถ้าหลงลืมสลับโหมด ข้อมูล production จะหายทันทีที่ container restart - ไม่เปลี่ยน
KC_BOOTSTRAP_ADMIN_USERNAME/KC_BOOTSTRAP_ADMIN_PASSWORDจากค่า default — การปล่อยadmin/adminไว้แม้ใน container ที่ expose port ออกสู่ network อื่นเป็นช่องโหว่ด้าน security ที่พบบ่อยมาก - ไม่ pin version ของ image — การใช้
quay.io/keycloak/keycloak:latestใน CI หรือ staging ทำให้ behaviour เปลี่ยนแบบไม่คาดคิดเมื่อ Red Hat release version ใหม่ ควร pin เป็น version เจาะจงเสมอ
💡 ตัวอย่างจากของจริง
ทีม platform engineering ในองค์กร — มักใช้
docker run start-devหรือdocker-composeเฉพาะบนเครื่อง local ของ developer สำหรับทดสอบ integration แล้วค่อย deploy Keycloak จริงผ่าน Helm chart บน Kubernetes พร้อม external PostgreSQLRed Hat build of Keycloak (RH-SSO) — image ที่ใช้ในบทเรียนนี้มาจาก community build; องค์กรที่ต้องการ support สัญญา SLA จะใช้ container image ของ Red Hat build of Keycloak แทน แต่คำสั่ง
start/start-devและ environment variable ทำงานเหมือนกัน