How to ใช้งาน Docker Container
จัดการกับ Docker Image ให้สร้างออกมาเป็น Docker Container แล้วใช้งาน
จากสองบทความที่แล้ว เราได้เรียนรู้กันว่า Docker นั้นคืออะไร
และจะเขียน Docker File เพื่อสร้าง Docker Image อย่างไร
ในบทความนี้เราจะมาเรียนรู้การใช้งาน Docker Image เพื่อสร้างเป็น Docker Container จากนั้นก็เริ่มใช้งานเจ้า Docker Container กัน
จัดการกับ Docker Image
เรามาเริ่มกันที่การใช้งานคำสั่งเพื่อจัดการกับ Docker Image หรือเพื่อเตรียมเจ้า Docker Image ที่เราจะเอามาใช้งานเป็น Docker Container
เราสามารถตรวจสอบ Image ที่มีในเครื่องของเรา (Local Image) ด้วยคำสั่ง
docker images
หรือ
docker image ls
แล้วถ้าอยากได้ Image ID แบบเต็มๆ ไม่ตัดไม่ย่อ (no truncate) ก็
docker image ls --no-trunc
ถ้าเรายังไม่มี image สามารถ โหลดมาใช้จาก Docker Hub ได้ด้วยการ pull
docker image pull {ชื่อImage:ชื่อTag}
ex. docker image pull ubuntu:14.04
หรือ
docker pull {ชื่อImage:ชื่อTag}
ex. docker pull ubuntu:14.04
เมื่อโหลด image มาผิด หรือไม่ต้องการแล้ว ก็ลบได้โดยสั่ง
docker image rm {ชื่อImagesหรือImageID}
ex. docker image rm wrongImage
หรือ
docker rmi {ชื่อImagesหรือImageID}
ex. docker rmi wrongImage
ใช้งาน Docker มาหลายงาน หลายตัวแล้ว ลืมไปแล้วว่าอันไหนไม่ใช้แล้วบ้าง อยากลบตัวที่ไม่ใช้ออกทั้งหมดก็
docker system prune
*** คำสั่งนี้จะลบทั้ง image, container, volumn, network ที่ไม่ได้ใช้งานอยู่ ***
หรือจะลบออกให้หมดๆเลย ค่อยโหลดที่จะได้ใช้จริงๆมาอีกทีหลัง
docker rmi $(docker images -a -q)
เมื่อเราได้ Docker Image ที่ต้องการ จากการจัดการด้วยคำสั่งพื้นฐานต่างๆข้างต้นแล้วเราจำนำมาใช้งานเป็น Docker Container ต่อกันเลย
ใช้งาน Docker Container
เมื่อมี image ที่ต้องการแล้วต่อมาเราจะสร้าง container ขึ้นมาโดยใช้คำสั่ง
docker run {ชื่อImage}
เราอาจกำหนด [options] เพิ่มเติมในการใช้งานได้ในรูปแบบที่ประมาณนี้
docker run [options] {ชื่อImage}
ซึ่ง options ที่ใช้กันบ่อยๆ หลักๆก็จะมี
--name {ชื่อ}
ตั้งชื่อให้กับ container เพื่อให้เราเรียกใช้คำสั่งต่างๆกับตัว container ได้ด้วยชื่อที่ตั้งนี้
ex. docker run --name myContainer myImage-p {เลข port ที่จะใช้}:{เลข port พื้นฐานของ container}
ตั้งค่าเลข port ที่ต้องการเพื่อใช้งาน
ex. docker run --port 8081:80 myImage-d
กำหนดให้ container ทำงานที่เบื้องหลัง หรือแบบ background
ex. docker run -d myImage-v /{path ของเครื่องเรา}:/{path ของ container}
คือการสร้าง volume ตาม path ที่เรากำหนด เพื่อแชร์ไฟล์ระหว่างตัว container กับเครื่องเราให้สามารถเรียกใช้ไฟล์ร่วมกันได้ (ใน container กับในเครื่องเราจะได้ไฟล์เหมือนกัน)
ex. docker run -v /myLocal:/myContainer myImage
จะใช้หลาย options เลยก็ได้ เช่น
docker run --name cName -p 1234:80 -v /myWork:/work/app -d coolImage
บางครั้งเราอาจเจอการใช้เลข port ซ้ำ ซึ่งสามารถเช็ค port ที่ใช้ทำงานแล้วได้โดย
docker ps
เพื่อแสดง container ที่ทำงานอยู่
เราจะสามารถเห็นรายละเอียดต่างๆ รวมไปถึง port ที่ใช้รัน container ตัวอื่นๆอยู่
เราสามารถเพิ่ม option “-a” (all) ได้เพื่อดู container ที่ไม่ได้ทำงานอยู่ด้วย
docker ps -a
เพื่อแสดง container ทั้งหมดรวมทั้งที่ไม่ได้ทำงานอยู่ด้วย
แล้วถ้าเรามี Docker Container อยู่แล้ว เราจะใช้งานมันได้โดยสั่ง
docker start {ชื่อ หรือ ID container}
เพื่อให้ container ที่กำหนดเริ่มทำงาน
*** ไม่ใช่การสร้าง container จาก image ***ex1. docker start myContainer
ex2. docker start 123456a78912
อยากหยุดการทำงานของ container ที่ไม่ได้ใช้งานก็ทำได้ด้วย
docker stop {ชื่อ หรือ ID container}
เพื่อให้ container ที่กำหนดหยุดทำงานex1. docker stop myContainer
ex2. docker stop 123456a78912
ยังมีคำสั่งในการใช้งาน container ที่น่าสนใจอื่นๆอยู่อีก สามารถเข้าชมได้ที่ https://docs.docker.com/engine/reference/commandline
แบ่งปัน Docker Image
เราสามารถเก็บ image ดีๆ หรือแบ่งปันแบบหล่อๆสวยๆไว้ที่ Docker Hub ให้ได้ใช้งานกันเราก็ทำได้
ก่อนอื่นเราต้อง login เข้าบัญชี docker ของเราก่อนด้วยคำสั่ง
docker login
จากนั้นมันก็จะให้เรากรอก username กับ password ตามระเบียบ
แต่ถ้าอยากประหยัดขั้นตอนก็รวดพิมพ์ด้วย options ตามนี้ได้เลย
docker login -u {ชื่อ user ของเรา} -p {รหัสผ่านของเรา}
ex. docker login -u iamuser -p 1234567890
จากนั้นเราจะทำการ push ขึ้นโดยสั่ง
docker push {ชื่อ user ของเรา}/{ชื่อ image}
ex. docker push iamuser/my-soCool-image
นอกจากนี้เรายังสามารถ push เอา imageใหม่ที่สร้างขึ้นจาก container ที่เราแก้ไขปรับปรุงบางอย่างไป ขึ้นที่ registry ของทาง Docker Hub เราจะใช้ container id ซึ่งดูได้จากการใช้งานคำสั่ง “docker ps” ที่กล่าวไปแล้วในหัวข้อก่อนหน้า เราจะทำการ commit ตัว image นี้โดยการสั่ง
docker commit {container_id} {ชื่อ repo}/{ชื่อ image}:{ชื่อ tag}
ex. docker commit c1d258f19e0a iamuser/newImage:version02
ตอนนี้เราได้เรียนรู้ใช้งาน Docker Container ด้วยคำสั่งพื้นฐานที่นิยมกันแล้ว
แต่ !!
เราอาจรู้สึกว่า จะใช้งาน Docker Container ตัวหนึ่ง ต้องพิมพ์คำสั่งเยอะแยะเต็มไปหมด ยุ่งยากซะเหลือเกิน แล้วถ้าจะใช้งานทีละหลาย container ล่ะ
ในบทความถัดไปเราจะมาแนะนำเครื่องมือที่มีชื่อว่า docker-compose ที่จะทำให้การใช้ทำงาน และจัดการกับหลายๆ Docker Container นั้นเป็นเรื่องง่าย