Docker

ช่วงหลังเราได้ยินชื่ออย่าง Docker, Container, Kubernetes, Orchestration กันบ่อยขึ้นมาก โดย Blognone เองก็เคยนำเสนอข่าวในหัวข้อเหล่านี้อยู่บ่อยครั้ง แต่ก็ยังมีความสับสนในเรื่องนี้อยู่มาก เพราะเป็นแนวคิดที่ยังค่อนข้างใหม่และมีความแตกต่างจากระบบเซิร์ฟเวอร์แบบเดิมๆ สูง

บทความชุดนี้จึงมีเป้าหมายเพื่ออธิบายและทำความเข้าใจกับแนวคิดเหล่านี้ ใครที่รู้เรื่องนี้ดีอยู่แล้วสามารถข้ามไปได้เลยครับ

ภาพโดย Chanaka จาก Pexels

Virtualization มีข้อจำกัด

คำว่า "คอนเทนเนอร์" (container) เป็นเทคนิคการจัดการแพ็กเกจซอฟต์แวร์ประเภทหนึ่ง ที่มีความสัมพันธ์กับเทคนิค virtualization ที่อยู่ในโลกองค์กรมานาน ดังนั้นการอธิบายว่าคอนเทนเนอร์คืออะไร จึงมักถูกเปรียบเทียบว่าแตกต่างกับ virtualization อย่างไร

เทคนิค virtualization คือการสร้างคอมพิวเตอร์เสมือน (virtual machine หรือ VM) ที่มีทั้งซีพียู แรม สตอเรจ ระบบปฏิบัติการ ฯลฯ ขึ้นมารันบนคอมพิวเตอร์จริงๆ อีกทีหนึ่ง โดยตัวระบบปฏิบัติการของคอมพิวเตอร์เสมือน (Guest OS) จะไม่รู้ว่าตัวเองรันอยู่บน VM แต่เข้าใจว่ารันอยู่บนฮาร์ดแวร์คอมพิวเตอร์จริงๆ

วิธีการนี้ทำให้เกิดการแยกส่วน (isolation) ระหว่าง VM แต่ละตัวอย่างสมบูรณ์ สามารถรันระบบปฏิบัติการที่แตกต่างกันระหว่าง Guest OS กับ Host OS ได้ แต่ข้อเสียคือใช้ทรัพยากรซ้ำซ้อน ทำงานช้า เปลืองพื้นที่เก็บ OS และซอฟต์แวร์ต่างๆ ที่มักจะใช้เหมือนกันใน VM ทุกตัว

ภาพประกอบจาก Docker

Container สร้างมาเพื่อแก้ไขข้อจำกัดของ Virtualization

คอนเทนเนอร์จึงถูกสร้างขึ้นมาเพื่อแก้ปัญหาข้างต้น โดยมีฮาร์ดแวร์และ OS เพียงชุดเดียวกัน ลดความซ้ำซ้อนของการใช้ทรัพยากรลง ส่วนตัวแอพพลิเคชันและซอฟต์แวร์ซึ่งเป็นจุดที่แตกต่างกันไปก็จะมี "container" (เทียบได้กับ VM) มาครอบเพื่อแบ่งส่วนทรัพยากรไว้ไม่ให้ยุ่งกัน

จุดเด่นของคอนเทนเนอร์จึงเป็นเรื่องการใช้ทรัพยากรที่น้อยกว่า virtualization มาก อิมเมจของคอนเทนเนอร์อาจมีขนาดเพียงกี่ไม่กี่สิบ MB ในขณะที่อิมเมจของ VM ต้องใช้พื้นที่ระดับหลาย GB นอกจากนี้ ระยะเวลาที่ใช้บูต, พลังซีพียูและปริมาณแรมที่ต้องใช้ ก็ลดลงตามไปด้วย ส่งผลให้เซิร์ฟเวอร์หนึ่งเครื่องสามารถยัดคอนเทนเนอร์จำนวนมากกว่าการรัน VM ที่ให้ผลแบบเดียวกันถึง 2-3 เท่าตัว

บางครั้ง คอนเทนเนอร์ถูกเรียกชื่อในทางเทคนิคว่า Operating-system-level virtualization หรือการสร้าง VM ที่ระดับ OS โดยเราไม่ต้องสร้างเครื่องคอมพิวเตอร์เสมือนขึ้นมาทั้งตัว

ข้อเสียของคอนเทนเนอร์ก็ย่อมเป็นความยืดหยุ่นที่น้อยกว่า virtualization แบบดั้งเดิม โดยเฉพาะไม่สามารถใช้ OS ที่แตกต่างกันระหว่าง Guest และ Host ได้ (เพราะจุดเด่นของคอนเทนเนอร์คือการแชร์ OS ก็อปปี้เดียวกัน)

ภาพจาก Docker

ประวัติย่อของ Container

แนวคิดของคอนเทนเนอร์ไม่ใช่เรื่องใหม่ ในโลกของยูนิกซ์เกิดแนวคิดนี้ขึ้นมาตั้งแต่ปี 2000 จากแนวคิด jails ของ FreeBSD จากนั้นในปี 2004 ระบบปฏิบัติการ Solaris ของบริษัท Sun Microsystems ก็มีฟีเจอร์แบบเดียวกันโดยใช้ชื่อว่า Zones (หรือ Solaris Containers) ฝั่งลินุกซ์เองก็นำไอเดียนี้มาสืบสานต่อในโครงการอย่าง OpenVZ หรือ LXC (Linux Containers)

แต่คอนเทนเนอร์กลายมาเป็นเรื่องแพร่หลายในวงกว้างจาก Docker ที่เริ่มต้นในปี 2013 ซึ่งช่วงแรกยังอิงอยู่บนโครงการยุคก่อนหน้าอย่าง LXC หรือ libvirt แต่ภายหลัง Docker ก็พัฒนาส่วนต่างๆ ขึ้นมาเอง (libcontainer) จนสมบูรณ์พร้อมใช้งาน ทำให้แนวคิดคอนเทนเนอร์ "จุดติด" และได้รับการยอมรับในวงการอย่างรวดเร็ว มีตัวอย่างการใช้งานจากบริษัทใหญ่ๆ อย่างกูเกิลที่พัฒนาฟีเจอร์ของ Google Compute Engine ให้รองรับอย่างรวดเร็ว

ถึงแม้ Docker จะถูกสร้างขึ้นมาเพื่อลินุกซ์ แต่ความนิยมของมันทำให้ระบบปฏิบัติการฝั่งวินโดวส์ ทำให้ไมโครซอฟท์เข้ามาร่วมวงตั้งแต่ปี 2014 และสำเร็จลุล่วงใน Windows Server 2016

ความสำเร็จของ Docker ทำให้เกิดคู่แข่งขึ้นบ้าง เช่น Rocket หรือ rkt ของบริษัท CoreOS (ปัจจุบันถูก Red Hat ซื้อไปแล้ว) ทำให้โลกคอนเทนเนอร์แยกออกเป็นสองส่วน แต่ภายหลังก็หาทางออกได้ ด้วยการออกมาตรฐานกลางภายใต้การดูแลของ Open Container Initiative (OCI) (ภายหลังยังพัฒนาต่อมาเป็นโครงการ containerd และ runc ซึ่งจะไม่กล่าวถึงในที่นี้)

ภาพจาก Docker

ตัวอย่างการใช้งาน Container

รูปแบบการนำคอนเทนเนอร์ไปใช้งานมีหลากหลาย แต่ที่พบบ่อยคือการนำแอพพลิเคชันองค์กรในแบบเดิมๆ (ซึ่งมักเป็นแอพที่เขียนด้วยเทคโนโลยียุคก่อนอย่าง Java, .NET หรือ PHP) มาใส่ไว้ในคอนเทนเนอร์ เพื่อมารันบนโครงสร้างพื้นฐานยุคใหม่ที่เป็นคลาวด์ แทนที่การใช้เซิร์ฟเวอร์แบบดั้งเดิมที่เริ่มล้าสมัย ช่วยให้การย้ายขึ้นคลาวด์ราบรื่นกว่าเดิม

นอกจากนี้ เทคโนโลยีคอนเทนเนอร์ยังช่วยแก้ปัญหาเรื่อง system dependency ระหว่างแอพแต่ละเวอร์ชัน แต่ละสถานะ (เช่น dev/test/production) เพราะทุกอย่างที่จำเป็นถูกรวมมาในอิมเมจให้หมดแล้ว มันจึงมีประโยชน์ในแง่กระบวนการเปลี่ยนโค้ดที่เขียน ไปสู่การดีพลอยใช้งานจริงบนเซิร์ฟเวอร์ปลายทาง หรือที่เราเรียกกันว่า CI/CD อีกด้วย

การใช้งานคอนเทนเนอร์อีกแบบหนึ่งที่พบบ่อยในช่วงหลัง คือการแยกแอพพลิเคชันยุคเดิมที่เขียนมาเป็นก้อนใหญ่ๆ (monolithic) ให้กลายเป็นไมโครเซอร์วิส (microservice) ที่มีขนาดเล็กลง จัดการได้สะดวกขึ้น สามารถสเกลเซอร์วิสบางตัวหากต้องการรับโหลดมากขึ้น

การนำคอนเทนเนอร์ของแอพพลิเคชันที่แยกเป็นไมโครเซอร์วิส ไปรันบนโครงสร้างพื้นฐานยุคคลาวด์ที่สเกลตัวเองได้ง่ายขึ้น จึงมีความซับซ้อนสูงตามไปด้วย และกลายเป็นหน้าที่ของซอฟต์แวร์ที่เรียกว่า orchestration (เหมือนวาทยากรนำวงออเคสตร้า) อย่าง Kubernetes หรือ Apache Mesos ที่จะกล่าวถึงในบทความตอนต่อไป

ข้อมูลอ้างอิงจาก

Hiring! บริษัทที่น่าสนใจ

CP AXTRA Public Company Limited - Lotus's company cover
CP AXTRA Public Company Limited - Lotus's
CP AXTRA Lotus's is revolutionizing the retail industry as a Retail Tech company.
Token X company cover
Token X
Blockchain, ICO, Tokenization, Digital Assets, and Financial Service
Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
United Information Highway Co., Ltd. company cover
United Information Highway Co., Ltd.
UIH is Thailand’s leading Digital Infrastructure and Solution Provider for Business
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
CDG GROUP company cover
CDG GROUP
Provider of IT solutions to public, state, and private sectors in Thailand for over 56 years
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
Gofive company cover
Gofive
“We create world-class software experience”
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
LTMH TECH company cover
LTMH TECH
LTMH TECH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand

ผมสงสัยคำนี้ครับ
"ข้อเสียของคอนเทนเนอร์ก็ย่อมเป็นความยืดหยุ่นที่น้อยกว่า virtualization แบบดั้งเดิม โดยเฉพาะไม่สามารถใช้ OS ที่แตกต่างกันระหว่าง Guest และ Host ได้ (เพราะจุดเด่นของคอนเทนเนอร์คือการแชร์ OS ก็อปปี้เดียวกัน)"

ปัจจุบันผมก็ run redhat container บน windows ได้น่ะครับ ขอ clarify ครับ

มันต้องมีตัวช่วยนิดหน่อยครับ หลักๆ คือบนวินโดวส์ต้องมีเคอร์เนลลินุกซ์ด้วย

Running Docker Linux containers on Windows requires a minimal Linux kernel and userland to host the container processes. This is exactly what the LinuxKit toolkit was designed for: creating secure, lean and portable Linux subsystems that can provide Linux container functionality as a component of a container platform.

Source

ถ้าเป็นของ Mac มันจะรัน VM แล้วค่อยรัน docker บนนั้นอีกรอบครับ (สังเกตว่าจะ refer ไปที่ port ของ host machine ตรงๆ ไม่ได้ ต้องผ่าน url พิเศษ​)
เข้าใจว่าของ Windows ก็จะใช้เทคนิคเดียวกันครับ

เทคนิคเดียวกันหมดครับ ไม่ว่าจะอีกกี่ OS ก็ตาม เพราะข้อจำกัดหลักของ Container คือต้องทำงานบน Linux Kernel เท่านั้น ดังนั้นทางเดียวที่จะรันบน Host อื่นได้คือต้องเอา Linux มาแทรกกลาง และปัจจุบันนอกจากการรัน VM แล้วก็ไม่มีวิธีอื่นครับ

สร้าง Apache2 Container เชื่อมต่อกับ MySQL 5.5 Container
วันดีคืนดีอยากเปลี่ยนเป็น MySQL 8.0 ก็สามารถ new MySQL 8.0 ขึ้นมาอีกชิ้นนึงได้เลย จากนั้นก็ setting พร้อมกับ config Apache2 Container เดิมมาที่ MySQL 8.0 ได้ง่าย

สามารถ config Apache2 + PHP5.x ไว้แจกให้เพื่อนไปใช้ เพื่อให้สภาพแวดล้อมในการพัฒนาที่เหมือนกันแน่นอนได้ (ลดปัญหา ฉันใช้ xampp php5, เธอใช้ Appserv php7 แล้วรันฟังก์ชันเดียวกันทำไมทำงานไม่ได้ ประมาณนี้

ส่วนการติดตั้ง บน Windows ก็ลง Docker แล้วก็พิมพ์ command ตาม docs ตัวอย่าง แปปเดียวก็น่าจะใช้งานได้

การแบ่งสรรทรัพยากร ส่วนสนับสนุนที่ใช้งานร่วมกันได้อย่างพวกไลบรารี ไฟล์บางตัวที่เหมือนกันทุกอย่างให้กับแอปพลิเคชัน ไม่ต้องสร้างเครื่องจำลองใหม่ที่ทำงานซ้ำซ้อน เชื่องช้า และกินพื้นที่มาก ในขณะที่ Container เกือบจะรันใกล้ชิดกับตัว OS (Container แค่ควบคุมทรัพยากรให้กับแอปพลิเคชันที่รัน)

ผมมองว่า Container คือการรักษา Runtime Environment ของตัวโปรแกรมเราให้มีลักษณะเดิมไม่เปลี่ยน แม้ว่าจะไปรันอยู่บนเครื่องของ Developer, Server ที่รัน Linux Distro ไหนก็แล้วแต่, หรือแม้กระทั่งเครื่องของ QA เครื่องที่รัน Test และอื่น ๆ โดยที่ยังรันโปรแกรมอยู่บน OS ของระบบนั้น แทนที่จะต้อง Ship ตัว OS ไปด้วย

Runtime Environment ก็เป็นได้ตั้งแต่ Script Interpreter (Nodejs, PHP, และอื่น ๆ) Runtime (Java, .Net, Go), 3rd party library (C/C++) รวมถึงไฟล์คอนฟิกต่าง ๆ แม้แต่เน็ตเวิร์คพอร์ท ตัวโปรแกรมเราก็จะยังเห็นเป็นพอร์ตที่เราตั้งไว้

คือตัวโปรแกรมเราจะเห็น Resource ทั้งหมดเท่าที่จำเป็น และเท่าที่เราระบุไว้ อะไรที่มากกว่านั้นก็จะไม่เห็น และจะเห็นในรูปแบบเดียวกันหมด ไม่ว่าจะไปรันที่ไหน เป็นเสมือนโลกส่วนตัวของโปรแกรมนั้น

ซึ่งพอทุกอย่างมันอยู่ในสภาพปิดทั้งหมด ก็ทำให้เรา deploy ตัว Container ไปที่ไหนก็ได้ เพราะตัว container ไม่รับรู้ว่าโลกภายนอกเป็นอย่างไร มันจะทำงานกับสิ่งที่เราระบุไว้

อย่างเราก็ไม่ต้องมาคิดว่า เอ๊ะ คอนฟิกไฟล์อยู่ใน /var หรืออยู่ใน /etc/config เราระบุไปเลยว่าอยู่ใน /etc/config ซึ่งเราก็สร้างไฟล์นี้ใน location นี้ภายใน image file ตัวโปรแกรมเราก็จะไปอ่านจากตรงนี้ โดยที่ไฟล์นี้จะไม่มีอยู่จริงในเครื่อง host ที่มันทำงานอยู่

ความแตกต่างระหว่าง Container กับ VM ก็คือ VM มันต้องมี OS และต้อง Allocate Resource จำนวนนึงให้มันอย่างเด็ดขาด อย่าง VM จะระบุไปเลยว่า ขอ RAM 2GB นะ หรือขอ Disk 50GB ในกรณีของ Container เนี่ยก็จะเหมือนรันโปรแกรมอยู่ในเครื่อง Host ตามปรกติ

มองเห็นภาพแล้ว แต่ส่วนมากที่เห็นคุยๆกันก็ใช้งานในกลุ่มพัฒนาซะส่วนมาก

มันออกแบบมาโดยนักพัฒนาเพื่อนักพัฒนาครับ ลดปัญหาในการเซ็ต environment ในการพัฒนา

คนในวงการอื่นๆ โดนทั่วไปแล้วไม่มีเหตุผลอะไรจะต้องมาสัมผัสกับความซับซ้อนที่เพิ่มขึ้นนี้อ่ะครับ

โดยมากในระดับ end user ก็ได้ใช้งานจากแอพที่รันอยู่บนระบบ container โดยไม่รู้ตัวเยอะครับ

อย่างว่าอ่ะครับ เหมือนบอกว่า welding machine ก็ใช้ในกลุ่มช่างซะส่วนมาก

มันใช้งานจริงได้เยอะครับ ผมเข้าใจว่า service หลายๆ อย่าง สไตล์ serverless อย่าง lambda ของ amazon ก็รันบน docker นะครับ
แล้วพวก ci/cd service ของ bitbucket มันก็รันบน docker เหมือนกัน
เพราะ ตัวมัน start เร็วกว่า vm เยอะ เลยสามารถ scale ได้ง่าย ไม่ต้องรอ vm boot

เพราะ Docker เกิดมาเพื่อ Microservice ตั้งแต่ต้นครับ และกลุ่มที่จะคุยเรื่องการทำ microservice มันก็มีไม่กี่สายงานหรอกครับ หลักๆคือ DevOps

เอาจริง ๆ Docker นี่ ทำให้ภาระ SCM ลดลงนะ นึกสภาพการดูแล Microservice โดยไม่ใช้ VM หรือ Container เลยนี่ SCM จะเป็นกลุ่มที่รับภาระหนักกว่าเพื่อน

ลำพัง Developer น่าจะอยากเขียนโค๊ดมากกว่า และก็มีข้ออ้างเวลามันพังว่า "ก็มันรันบนเครื่องผมได้นี่นา" อยู่แล้ว ถ้ามันพังก็เป็นภาระของ SCM ที่จะต้องหาก่อนว่าโปรแกรมพังจากอะไร (และมักจะหาไม่เจอ ฮา)

    container จริง ๆ ก็คือ process ปรกติตามธรรมดาไม่อะไรพิเศษไปกว่า process ปรกติครับ (โดยลองใช้ docker run -d nginx เสร็จแล้วลอง docker ps และ ps ax เทียบกันก็จะเห็น process ngixn ปรากฎขึ้นมา) เพียงแต่อาศัยความสามารถของ os kernel ในการจำกัดไม่ให้ process ใช้งานได้เพียง 2 ส่วนคือ  1. การแยกส่วน I/O ต่าง ๆ พวก file system, network resource และอื่น ๆ ไม่ให้ติดต่อกับ real resource  โดยตรง แต่ให้ติดต่อกับ function พิเศษที่จะ redirect os call ไปหา virtual resource ที่เตรียมไว้ครับ จึงทำให้เสมือนกับว่า container ทำงานโดยที่ไม่เกี่ยวข้องกับระบบจริง ๆ 2. จำกัดการใช้งาน resource ให้ตามที่กำหนดไว้ตั้งแต่ตอนเริ่ม process ทำให้ process ตัวนี้ไม่สามารถจะ consume resource ได้เกินกว่าที่กำหนดไว้ 
    ฉะนั้นเอาจริง ๆ แล้ว container ก็คือ process ที่ถูกจำกัดการเรียก os call ไว้แค่นั้นเอง นอกนั้นก็ยังเป็น process ตามปรกติ ซึ่งจะไม่เหมือนกับ VM คือพวกนั้นจะแยก process ต่างหากสำหรับ VM และเมื่อมีการสร้าง process จะก็ถูกจำกัดให้อยู่ภายใต้ VM ซึ่งพวกนี้นั้นจะต้องอาศัยความสามารถของ processor เป็นหลักครับ ให้สามารถสร้าง os เสมือนให้ทำงานได้ถ้า processor ไม่ support ก็จะใช้ VM ไม่ได้ ส่วน container นั้นต้อง อาศัย kernel ของ OS เป็นหลัก (ซึ่งจุดนี้เองทำให้ container มี dependency ติดกับ os) ถ้าไม่ support ก็ใช้ได้ไม่
    ซึ่ง ณ ปัจจุบัน os kernel ที่ support function พวกนี้คือ linux ครับ ส่วน kernel ของ windows นั้น เพิ่งจะ support ที่ windows server 2016 (แต่ก็ไม่ใช่ว่าเราจะสามารถ shared container นั้นระหว่าง linux กับ windows ได้น่ะครับ) ดังนั้นการที่จะ run container บน windows หรือ macos ได้จึงต้องอาศัยตัวช่วยคือ สร้าง linux vm สักตัวหนึ่งขึ้นมา เพื่อให้ทำงานแทนในการสร้าง container ขึ้นมา 

ซึ่ง docker ตอนเริ่มต้นก็อาศัย virtualbox ในการสร้าง linux vm บนทั้ง windows และ macos โดยใช้ tool พวก docker tool box แต่ปัจจุบัน docker ใช้ HyperV บน windows และ HyperKit บน macos

Apple
public://topics-images/apple_webp.png
SCB10X
public://topics-images/347823389_774095087711602_515970870797767330_n_webp.png
Windows 11
public://topics-images/hero-bloom-logo.jpg
Huawei
public://topics-images/huawei_standard_logo.svg_.png
Google Keep
public://topics-images/google_keep_2020_logo.svg_.png
Instagram
public://topics-images/instagram_logo_2022.svg_.png
SCB
public://topics-images/9crhwyxv_400x400.jpg
Microsoft
public://topics-images/microsoft_logo.svg_.png
Basecamp
public://topics-images/bwpepdi0_400x400.jpg
FTC
public://topics-images/seal_of_the_united_states_federal_trade_commission.svg_.png
Pinterest
public://topics-images/pinterest.png
Palantir
public://topics-images/-nzsuc6w_400x400.png
AIS Business
public://topics-images/logo-business-2021-1.png
PostgreSQL
public://topics-images/images.png
JetBrains
public://topics-images/icx8y2ta_400x400.png
Krungthai
public://topics-images/aam1jxs6_400x400.jpg
Palworld
public://topics-images/mccyhcqf_400x400.jpg
Bill Gates
public://topics-images/bill_gates-september_2024.jpg
VMware
public://topics-images/1nj4i1gp_400x400.jpg
Take-Two Interactive
public://topics-images/0khle7nh_400x400.jpg
OpenAI
public://topics-images/ztsar0jw_400x400.jpg
Thailand
public://topics-images/flag_of_thailand.svg_.png
NVIDIA
public://topics-images/srvczsfq_400x400.jpg
ServiceNow
public://topics-images/ytnrfphe_400x400.png
Klarna
public://topics-images/urcllpjp_400x400.png
Google Play
public://topics-images/play.png
Drupal
public://topics-images/drupal.png
Virtua Fighter
public://topics-images/virtua_figther_2024_logo.png
Paradox Interactive
public://topics-images/paradox_interactive_logo.svg_.png
Europa Universalis
public://topics-images/europa-icon.png
Nintendo Switch 2
public://topics-images/mainvisual.png
Cloudflare
public://topics-images/cloudflare_logo.svg_.png
Samsung
public://topics-images/samsung.png
Google
public://topics-images/google_2015_logo.svg_.png
Uber
public://topics-images/uber.png
Microsoft 365
public://topics-images/m365.png
USA
public://topics-images/flag_of_the_united_states.svg_.png
GM
public://topics-images/0pe0po-z_400x400.jpg
Perplexity
public://topics-images/perplex.jpg
Xperia
public://topics-images/xperia.png
iOS 18
public://topics-images/ios-18-num-96x96_2x.png
True
public://topics-images/true_logo.png
SoftBank
public://topics-images/softbank.jpg
Pac-Man
public://topics-images/pacman.png
Harry Potter
public://topics-images/harry.png
Marvel
public://topics-images/marvel.png
Skydance
public://topics-images/skydance.png
SEA
public://topics-images/sealogo.png
Find My Device
public://topics-images/find.png
Gemini
public://topics-images/google_gemini_logo.svg__1.png
Accessibility
public://topics-images/accessibility-128x128_2x.png
Material Design
public://topics-images/m3-favicon-apple-touch.png
Android 16
public://topics-images/android16.png
Android
public://topics-images/android_0.png
Firefox
public://topics-images/firefox_logo-2019.svg_.png
Google Messages
public://topics-images/messages.png
Notepad
public://topics-images/notepad.png
Singapore
public://topics-images/flag_of_singapore.svg_.png
Airbnb
public://topics-images/airbnb.png
PS5
public://topics-images/ps5.png
Krafton
public://topics-images/krafton.png
Doom
public://topics-images/doom-game-s_logo.svg_.png
AMD
public://topics-images/amd_logo.svg_.png
GTA
public://topics-images/gta_0.png
DoorDash
public://topics-images/doordash.png
YouTube
public://topics-images/yt.png
YouTube Music
public://topics-images/yt-music.png
Facebook
public://topics-images/fb.png
iQiyi
public://topics-images/iqiyi_0.png
Viu
public://topics-images/viu.png
Amazon Prime Video
public://topics-images/prime-vid.png
Spotify
public://topics-images/spotify.jpg
Apple TV
public://topics-images/apple-tv.png
HBO Max
public://topics-images/max.png
Threads
public://topics-images/threads.png
Alexa
public://topics-images/alexa.png
Kindle App
public://topics-images/kindle.png
Shopee
public://topics-images/shopee.png
Waze
public://topics-images/waze.png
Bilibili
public://topics-images/bili.png
Google Maps
public://topics-images/maps.png
Apple Music
public://topics-images/apple-music.png
Claude
public://topics-images/claude.png
TikTok
public://topics-images/tiktok.png
Xbox
public://topics-images/xbox.png
Tesla
public://topics-images/tesla.png
Chrome
public://topics-images/chrome.png
Google Calendar
public://topics-images/gcal.png
Google Home
public://topics-images/ghome.png
Google Meet
public://topics-images/meet.png
NotebookLM
public://topics-images/notebooklm.png
Reddit
public://topics-images/reddit.png
Assassin’s Creed
public://topics-images/ac.png
Mark Zuckerberg
public://topics-images/zuck.jpg
Meta
public://topics-images/meta.png
Meta AI
public://topics-images/meta-ai.png
Epic Games
public://topics-images/epic_games_logo.svg_.png
Unreal
public://topics-images/unreal_engine_logo-new_typeface-svg.png
Fortnite
public://topics-images/fortnite.png
DeepMind
public://topics-images/deepmind.png
Databricks
public://topics-images/databricks.png
Netflix
public://topics-images/netflix-logo.png
Microsoft Azure
public://topics-images/azure.png
Microsoft Copilot
public://topics-images/microsoft_copilot_icon.svg_.png
Bing
public://topics-images/bing.png
EA
public://topics-images/ea.png
Intel
public://topics-images/intel.png
Amazon
public://topics-images/amazon.png
AWS
public://topics-images/aws.png
Zoom
public://topics-images/zoom.png
Dropbox
public://topics-images/dropbox_0.png
Roblox
public://topics-images/roblox.png
Dell Technologies
public://topics-images/dell-tech.png
Nothing
public://topics-images/nothing.svg_.png
Microsoft Teams
public://topics-images/teams.png
Mojang
public://topics-images/mojang.png
Minecraft
public://topics-images/minecraft.png
Redis
public://topics-images/redis_logo.svg_.png
Ubisoft
public://topics-images/ubisoft_logo.svg_.png
Elden Ring
public://topics-images/elden.png
Brave
public://topics-images/brave.png
Opera
public://topics-images/opera.png
Vivaldi
public://topics-images/vivaldi.png
Microsoft Edge
public://topics-images/edge.png
Duolingo
public://topics-images/duolingo.png
LinkedIn
public://topics-images/linkedin.png
Canva
public://topics-images/canva.png
Realme
public://topics-images/realme.png
NASA
public://topics-images/nasa-logo.png
Booking.com
public://topics-images/booking.png
Agoda
public://topics-images/agoda.png
Bolt
public://topics-images/bolt.png
Grab
public://topics-images/grab.png
Temu
public://topics-images/temnu.png
LINE
public://topics-images/line.png
Facebook Messenger
public://topics-images/messenger.png
WhatsApp
public://topics-images/whatsapp.png
Telegram
public://topics-images/telegram.png
Signal
public://topics-images/signal.png
X.com
public://topics-images/x.png
Grok
public://topics-images/grok.png
xAI
public://topics-images/xai.png
CapCut
public://topics-images/capcut.png
Edits
public://topics-images/edit.png
Google One
public://topics-images/gone.png
Tinder
public://topics-images/tinger.png
Whoscall
public://topics-images/whoscall.png
OneDrive
public://topics-images/onedrive.png
Lightroom
public://topics-images/lr.png
Meitu
public://topics-images/meitu.png
Outlook
public://topics-images/outlook.png
Excel
public://topics-images/excel.png
PowerPoint
public://topics-images/ppt.png
Microsoft Word
public://topics-images/word.png
Phone Link
public://topics-images/phone-link.png
OneNote
public://topics-images/onenote.png
Windows App
public://topics-images/windows-app.png
Notion
public://topics-images/notion.png
Google Drive
public://topics-images/drive.png
YouTube Kids
public://topics-images/yt-kids.png
Gboard
public://topics-images/gboard.png
DeepSeek
public://topics-images/deepseek_logo.svg_.png
Prince of Persia
public://topics-images/prince-persia.png
Sony
public://topics-images/nq0nd2c0_400x400.jpg
Tencent
public://topics-images/z4xi4oyc_400x400.jpg
Cisco
public://topics-images/jmyca1yn_400x400.jpg
Alibaba
public://topics-images/4axflwia_400x400.jpg
Alibaba Cloud
public://topics-images/qm43orjx_400x400_cloud.png
Coinbase
public://topics-images/consumer_wordmark.png
CarPlay
public://topics-images/carplay.png
Rust
public://topics-images/rust-logo-blk.png
Red Hat
public://topics-images/redhat.png
Anthropic
public://topics-images/anthropic.png
Xcode
public://topics-images/xcode.png
Tim Cook
public://topics-images/tim-cook.jpg
Donald Trump
public://topics-images/trump.jpg
Microsoft Surface
public://topics-images/surface.jpg
Copilot+ PC
public://topics-images/copilotpc.png
Stellar Blade
public://topics-images/stellar-blade.jpg
Snapdragon
public://topics-images/snapdragon_chip.png
Qualcomm
public://topics-images/qualcomm-logo.svg_.png
CoreWeave
public://topics-images/coreweave.png
Ford
public://topics-images/ford.png
Xiaomi
public://topics-images/xiaomi.png
Google Cloud
public://topics-images/google_cloud_logo.svg_.png
PlayStation Network
public://topics-images/psn.png
PlayStation Plus
public://topics-images/ps-plus.png
Windsurf
public://topics-images/windsurf.png
Square Enix
public://topics-images/square-enix.png
MIT
public://topics-images/x7hyjl3t_400x400.jpg
Zoox
public://topics-images/zoox.jpg
Evernote
public://topics-images/1neatidg_400x400.jpg
Magic the Gathering
public://topics-images/magic.png
Call of Duty
public://topics-images/cod.png