สำหรับตอนนี้เรื่องของ Cloud Native มาแรงมาก ๆ ทำให้การใช้ Container ก็เริ่มจะกลายจะเป็นเรื่องปกติของพวกเราเหล่าเดฟและชาวอินฟ่ากันไปแล้ว แต่การจัดการ Container นั้นก็ไม่ใช่ว่าจะเป็นเรื่องยาก เพราะในตอนนี้ก็มีเครื่องมือที่ใช้ในการจัดการ Container ให้เป็นเรื่องง่ายมีให้เลือกใช้มากมาย
ซึ่งวันนี้แอดจะพามารู้จักกับเครื่องมือจัดการ Container เด็ด ๆ ตัวเต็ง ๆ ที่น่าจะเคยได้ยินชื่อกันมาบ้างนั่นก็คือ Docker และ Podman สองตัวนี้ถูกพูดถึงและมีการใช้งานที่แพร่หลายกันอยู่แล้ว แต่สำหรับใครที่เคยใช้ตัวใดตัวหนึ่งมาก่อนอยากรู้ว่าความแตกต่างในการใช้งานสองตัวนี้ มันแตกต่างกันมั้ย ใช้งานยาก ง่ายแค่ไหน เดี๋ยวเรามาดูไปพร้อมกันในบทความนี้กันเลย !
Docker และ Podman คืออะไร?
Docker คืออะไร?
Docker คือเทคโนโลยีในการจัดการ container ที่ค่อนข้างจะมีการใช้งานมากที่สุด โดยคนส่วนใหญ่ หากคิดถึง container ก็จะนึกถึง Docker เป็นอันดับต้นๆ เนื่องจากมีฟีเจอร์ค่อนข้างครอบคลุม ทำให้การจัดการ container เป็นเรื่องง่าย ตั้งแต่แพ็คแอปให้เป็น image ไปจนถึง Lifecycle ทั้งหมดของ container ได้
Podman คืออะไร?
Podman คือเครื่องมือจัดการ container แบบ open-source ที่ทำงานบน Linux ได้โดยตรง แต่ปัจจุบันก็มีตัวติดตั้งสำหรับ Windows มาให้ใช้งานแล้วในเวอร์ชันที่เป็น 4.x ซึ่ง Podman ออกแบบมาเพื่อพัฒนา สร้าง และรัน container ตามมาตรฐานของ Open Container Initiative (OCI) โดยหลักๆ แล้วถือเป็นอีกทางเลือกของ Docker มีความคล้ายคลึงกันและบางส่วนยังทำงานร่วมกันได้อีกด้วย
โดยจะมาเปรียบเทียบ Step การใช้งานตั้งแต่ต้น
ขั้นตอนการติดตั้ง Docker Desktop
ไปที่เว็บไซต์ Docker (https://www.docker.com/products/docker-desktop/) คลิกปุ่ม “Download Docker Desktop” เลือกเวอร์ชันที่ตรงกับระบบปฏิบัติการของเรา
เมื่อติดตั้งเสร็จเรียบร้อยแล้ว เราก็จะสามารถทำการเปิดโปรแกรม Docker Desktop ขึ้นมา
หลังจากนั้นเราสามารถทำการตรวจสอบการทำงานของ Docker CLI ได้โดยการใช้คำสั่ง
docker run hello-world เพื่อรัน image สำหรับทดสอบการทำงานของ docker
ขั้นตอนการติดตั้ง Podman
ไปที่เว็บไซต์ podman (https://podman.io/docs/installation) จะมีคู่มือในการติดตั้ง Podman ใน OS ต่าง ๆ ในสามารถใช้คำสั่งตามคู่มือได้เลย
เช่น brew install podman ใน macOS หรือ sudo apt-get -y install podman ใน Linux บางตัว หากเป็นบน Windows สามารถดาวน์โหลดตัวติดตั้งได้ที่ลิงก์นี้ https://github.com/containers/podman/releases
หลังจากที่เราได้ทำการ Download และติดตั้งเสร็จเรียบร้อยแล้วให้ทำการเปิด Terminal ขึ้นมาแล้วใช้คำสั่งว่า podman machine init
โดย Podman Machine เป็นตัวจัดการเครื่องเสมือน (Virtual Machine – VM) ที่ทำหน้าที่สร้างเครื่อง Linux ขนาดเล็ก เพื่อให้เราสามารถรัน containers ได้
โดยคำสั่ง podman machine init เป็นการเริ่มต้นสร้างและตั้งค่า (initialize) VM ของ Podman
สิ่งที่เกิดขึ้น:
- มันจะดาวน์โหลด VM image ที่เหมาะสม
- สร้าง File System สำหรับ VM
- ตั้งค่าการเชื่อมต่อ Network
- สร้าง SSH Keys เพื่อใช้เข้าถึง VM
ต่อมาใช้คำสั่ง podman machine start เพื่อสตาร์ท VM ของ Podman เพื่อให้พร้อมใช้งาน
สิ่งที่เกิดขึ้น:
- มันจะ Boot ระบบปฏิบัติการที่อยู่ภายใน VM
- Config ให้เราสามารถเชื่อมต่อเข้าไปจัดการ containers จากเครื่อง host ได้
หากต้องการใช้ Podman Desktop ที่เป็น GUI แบบ Docker Desktop ก็สามารถทำการดาวน์โหลด ได้ที่ https://podman-desktop.io/ จะได้โปรแกรมที่หน้าตาเหมือน Docker Desktop เลย
หากต้องการทดสอบการทำงานของ Podman CLI เราก็สามารถใช้คำสั่ง podman run hello-world ได้เหมือนกัน
สาธิตการใช้งานกับแอปพลิเคชันตัวอย่าง
โปรเจกต์ NodeJS Express
สร้าง Node.JS Express Application:
mkdir my-app
cd my-app
npm init -y
npm install express
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello from my Express app in a container!');
});
app.listen(port, () => {
console.log(`Server listening on port ${port}`);
});
สร้าง Dockerfile
วิธี build image จาก Dockerfile โดยใช้ Docker
- ไปที่ directory ที่มี Dockerfile
- รันคำสั่ง docker build
- ระบุชื่อ image: docker build -t <ชื่อ image> .
วิธี build image จาก Dockerfile โดยใช้ Podman
- ไปที่ directory ที่มี Dockerfile
- รันคำสั่ง podman build
- ระบุชื่อ image: podman build -t <ชื่อ image> .
วิธีรัน Container โดยใช้ Docker
- รันคำสั่ง docker run
- docker run <ชื่อ image>
- เราสามารถแมป port โดยใช้ -p ได้: docker run -p <port host>:<port container> <ชื่อ image>
วิธีรัน Container โดยใช้ Podman
- รันคำสั่ง podman run
- podman run <ชื่อ image>
- เราสามารถแมป port โดยใช้ -p ได้: podman run -p <port host>:<port container> <ชื่อ image>
ตรวจสอบว่า Container ที่เราสั่งรันมันทำงานจริงหรือป่าว?
เปิดเบราว์เซอร์แล้วเข้า http://localhost:3000 คุณควรจะเห็นข้อความ อันนี้เป็นของที่รันผ่าน Docker
เปิดเบราว์เซอร์แล้วเข้า http://localhost:3001 คุณควรจะเห็นข้อความ อันนี้เป็นของที่รันผ่าน Podman
ตรวจสอบ Container ที่กำลังรันอยู่ผ่านโปรแกรมที่เป็น GUI
บน Docker Desktop
บน Podman Desktop
หมายเหตุจะเห็นได้ว่า Container ที่ถูกรันใน Docker จะไม่มาแสดงใน Podman และ Container ใน Podman ก็เช่นกัน
ตรวจสอบ Container ที่กำลังรันอยู่ผ่าน CLI
Docker ใช้คำสั่ง: docker ps หรือ docker container ls
Podman ใช้คำสั่ง: podman ps หรือ podman container ls
หยุด Container
Docker ใช้คำสั่ง: docker stop<ชื่อ Container หรือ Id ของ Container>
ตัวเลือก:
- docker stop <ชื่อ Container หรือ Id ของ Container> หยุดแบบนุ่มนวล
- docker kill <ชื่อ Container หรือ Id ของ Container> บังคับหยุด
Podman ใช้คำสั่ง: podman stop<ชื่อ Container หรือ Id ของ Container>
ตัวเลือก:
- podman stop <ชื่อ Container หรือ Id ของ Container> หยุดแบบนุ่มนวล
- podman kill <ชื่อ Container หรือ Id ของ Container> บังคับหยุด
รายการ Container ทั้งหมดรวมถึงที่หยุดรันไปแล้ว
Docker ใช้คำสั่ง: docker ps -a หรือ docker container ls -a
Podman ใช้คำสั่ง: podman ps -a หรือ podman container ls -a
ลบ Container
Docker ใช้คำสั่ง docker rm <ชื่อ Container หรือ Id ของ Container>
Podman ใช้คำสั่ง podman rm <ชื่อ Container หรือ Id ของ Container>
เรียกดู image ที่มีอยู่ทั้งหมด
Docker ใช้คำสั่ง docker images
Podman ใช้คำสั่ง podman images
ลบ Image ที่ต้องการ
Docker ใช้คำสั่ง docker rmi <ชื่อ Container หรือ Id ของ Container>
Podman ใช้คำสั่ง podman rmi <ชื่อ Container หรือ Id ของ Container>
จากตัวอย่างการใช้งานจะเห็นได้ว่า Docker และ Podman เป็นเครื่องมือที่ใช้สำหรับจัดการคอนเทนเนอร์ ที่มีความคล้ายคลึงกันมาก แม้กระทั่งคำสั่งต่าง ๆ แต่ข้อแตกต่างที่สำคัญจะอยู่ที่
การเรียกใช้งาน
- Docker: ต้องใช้ daemon แยกต่างหาก
Podman: ไม่ต้องใช้ daemon
แต่มีหมายเหตุนิดหน่อย
- Podman เป็นเครื่องมือใหม่กว่า Docker ยังอยู่ในช่วงพัฒนา คู่มืออาจจะน้อยกว่า
- Docker เป็นเครื่องมือที่ได้รับความนิยม มีผู้ใช้มากกว่า เนื้อหาต่าง ๆ ก็จะเยอะกว่า
สรุปได้ว่าสำหรับใครที่คุ้นชินกับ Docker อยู่แล้ว สามารถโยกไปใช้ Podman หรือ สลับมาไปมาในการใช้ Docker ได้โดยแทบไม่ต้องปรับตัว แต่ถ้าใครยังไม่เคยคุ้นชิน ผมแนะนำทางเลือกดี ๆ กับคอร์สเรียน Docker & Container Technology จากทาง BorntoDev ที่จะทำให้เราสามารถใช้งาน Docker ในการ สร้าง, จัดการ, และประยุกต์ใช้งาน Container ได้อย่างมั่นใจ
สนใจอ่านรายละเอียดเพิ่มเติมได้ที่
https://school.borntodev.com/course/docker-container-technology