Docker File สู่การเป็น Docker Container

Tawan_Ait
4 min readAug 23, 2020

--

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

การทำ Docker Container เริ่มต้นจาก เป็น Docker File มาเป็น Docker Image และสุดท้ายถูกอัดเป็น Docker Container ในที่สุดและถูกเก็บไว้ที่ Docker Hub ที่เป็นที่เก็บของ Docker

เรียวลำดับจากขวาไปสู่ซ้าย

เริ่มต้นเลยเราจะสร้าง Project มาหนึ่งตัว เพื่อที่จะ Build เป็น Docker Containner เปิด Terminal ขึ้นมาเลยและใช้คำสั่งนี้เพื่อสร้างโฟลเดอร์ชื่อ Docker เอาไว้เก็บเฉพาะ Project ที่เกี่ยวกับ Docker และใช้คำสั่งสร้างโฟลเดอร์ชื่อ todos ด้วย

mkdir [FolderName] แล้วกด Enter 

จะได้ดังนี้

เมื่อเราเข้าไปในโฟลเดอร์ todos แล้วจะใช้คำสั่งนี้เพื่อ เปิดโฟลเดอร์ todos มันจะถูกเปิดด้วยโปรแกรม Visual Studio Code มาให้เรา

code .

จะเปิดออกมาได้แบบนี้

เปิด Terminal ขึ้นมาโดยกด command + J ด้วยคำสั่งนี้ จะสร้างไฟล์ package.json

npm init

เมื่อรันเสร็จแล้วนเราจะได้ ไฟล์ package.json มาหนึ่งไฟล์แบบนี้

และเราจะติดตั้ง Express ลงใน Project ด้วยคำสั่งนี้ (Express เป็น library ใช้เพื่อเขียน ResAPI)

npm install express  --save

จากนั้นสร้างไฟล์ index.js และเขียนโค้ดนี้ลงไป เพื่อเรียกใช้งาน port :80 เวลาเรียกใช้ที่ Browser จะเป็น localhost เป็น port default และที่หน้าเว็บจะแสดงคำว่า Hello Wold สีเขียว

บันทึกแล้วรันที่เครื่องของเราก่อน ด้วยคำสั่งนี้ และไปเปิด Browser จะเห็นดังด้านล่าง

node index.js
รันที่ Port :80 / localhost

ต่อมาเราจะทำ port: /todos เพื่อแสดง id และชื่อ เป็นแบบ json เขียนเสร็จแล้วบันทึก Stop การรันด้วยการกด Control+C และรันใหม่อีกครั้ง

ดูที่ Browser ด้วยport : localhost/todos จะได้ดังนี้

ต่อไปเราจะทำการ Filter เอามาแสดงเฉพาะเลข id ที่เรากรอกลงไป เขียนเสร็จแล้วบันทึก Stop การรันด้วยการกด Control+C และลองรันใหม่อีกครั้ง

ดูที่ Browser ด้วย localhost/todos/1 จะได้ดังนี้

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

ก่อนอื่นต้องสร้าง ไฟล์ขึ้นมาหนึ่งไฟล์ ชื่อว่า Dockerfile และเขียนโค้ดนี้ลงไป เตรียมสำหรับการ Build ติด Tage

คำสั่ง Build ติดแท็ก เพื่อให้ Docker รู้ว่ามีอยู่และสามารถนำไป Build เป็น DockerContainer

docker build -t todos:1.0.0 .

เราจะพบว่ามัน ติดปัญหาที่ บรรทัดที่ 6 ถามหา Repository field จึงต้องกลับไปแก้ไข ที่ไฟล์ package.json แล้วลอง Build ใหม่อีกรอบ

เรามาที่ไฟล์ package.json เพื่อที่จะเปิดใช้งานแบบ private ให้ใช้งานได้

แล้วสร้าง Folder มาเก็บไฟล์ index.js ที่เราสร้างไว้ เพราะตอนเราจะ Build ได้บอกว่ามีโฟลเดอร์ src อยู่ด้วย

และลอง Build ใหม่อีกรอบ ผลลัพธ์ที่ได้ เราได้ติดแท็กเรียบร้อย ต่อไปเราจะใช้คำสั่ง ของ Docker เพื่อดูว่ามี Image อะไรบ้าง ของสำคัญมาแล้ว

จากนั้นเราจะเข้าไปดูว่ามี Image Tag นี้หรือไม่ ปรากฏว่าคำสั่งที่เราสั่ง Build ได้ผลเพราะเราเห็น Tag แล้วที่ Repository ของ Docker

เมื่อได้แบบนี้เราจะ Build ให้เป็น Container ส่ะ จะได้นำไปใช้ได้

เพื่อความแน่ใจนเราจะเช็คดูอีกทีว่ามี Container todos จริงไหม ปรากฏว่ามีจ้าาาา งั้นๆๆ

ไปดูที่ Browser ทีที่ port : localhost:8080 กัน และ port อื่นๆ ด้วย

Port : localhost:8080/todos
Port : localhost:8080/todos/2

จากที่เราจะสร้าง Project และ Build ให้เป็น Docker Container ผลลัพธ์ที่ได้ก็คือ ไม่ได้หน้าไม่ต่างที่เขียนที่เครื่อง local เลย เรียกได้ว่าใกล้เคียงกันมาก อย่างกะแกะ ต่อไปเราจะทำ Service เพื่อให้เจ้า Kube ทำงานให้เราแทน เวลาที่เรามีการแก้ไข Project เอาไว้ เท่านี้ก่อน ยาวเกินแล้ว เดี๋ยวเรา งง เอง 55+

…………………….….Thank You My Teacher ^_^……………………………

!! หมายเหตุ !! คำสั่งกันลืม

คำสั่ง Build ติดแท็ก

docker build -t todos:1.0.0

คำสั่งติดตั้ง minikube

brew install minikube

คำสั่งดู Docker Image

docker image ls
docker image ls -a

คำสั่งลบ Docker Image

docker image rm 314918ddaedf

คำสั่งดู Docker Container

docker container ls
docker container ls -a
docker container ls -aq (ดูเฉพาะเลข ID และมัดรวม)

คำสั่งลบ Docker Container

docker container rm 0b816e154d1a
docker container rm $(docker container ls -aq) ลบทั้งหมดหลังจากมัดรวมกันแล้ว

คำสั่งหยุดการทำงานของ Docker Container

docker container stop 0b816e154d1a
docker container stop $(docker container ls -aq) หยุดทั้งหมดหลังจากมัดรวมกันแล้ว

คำสั่งรัน Docker Container (-p คือ Port , — name คือ การตั้งชื่อ , ชื่อ Repository , สุดท้ายเป็นชื่อ Tag)

docker run -d -p 8080:80 --name api-sit todos:1.0.0

คำสั่งเข้าไปดูรายละเอียดข้างใน Container

docker exec -it c83d586b8d95 sh (เข้าไปดูใน Container นี้)
ls (ขอดูรายละเอียด)
cd .. (การเข้าไปดู)
exit (ออกมา)

คำสั่ง apply run on kube

apply -f todo-api-sit.service.yml

--

--

No responses yet