Docker ขั้นพื้นฐาน
หลังจากตอนที่แล้วสอนการลง Docker ไปแล้ว ตอนนี้มาเริ่มใช้งานกันดีกว่า ส่วนใครอยากทราบว่า Docker คืออะไร อันนี้สามารถตามอ่านได้จาก Net ทั่วไป เช่น ของคุณ Rachata Tongpagdee จริงๆเขาสอน Basic ทั้งหมดในนั้นแล้วด้วย ฮ๋าๆๆๆๆ สำหรับผมถ้าพูดง่ายๆมันคือการจำลองเครื่อง server ขึ้นมาให้เราใช้งาน โดยเครื่อง server นั้นเราสามารถกำหนด spec ให้มันได้ว่ามี program อะไร run อยู่ ทำงานอะไรได้บ้าง จริงๆมันก็คล้ายๆ VM นะ แต่อันนี้เบากว่าและเหมือนจะใช้งานง่ายกว่าด้วย
เริ่มใช้งานเบื้องต้น
docker ps
docker ps : เป็นคำสั่งแสดง Container (มองว่าเป็นเครื่องจำลองก็ได้ครับ) ที่เรา Run ไว้ในขณะนี้
1 | docker ps |
ลองพิมพ์คำสั่งที่ command line, shell, terminal หรืออะไรที่ท่านอยากเรียก ซึ่งเมื่อ Run เสร็จจะได้ผลลัพธ์ดังภาพ หรืออาจไม่เหมือนถ้าท่าน Run docker container ไว้แล้ว หรือ ท่านไม่ได้ Start service docker (ลองสั่ง service docker start) อันนี้อยากให้ลองกดดูก่อนเพื่อจะได้รู้ว่า docker service มัน run อยู่รึเปล่า
docker run
docker run : เป็นคำสั่งสร้าง Container (มองว่าเป็นเครื่องจำลอง) ขึ้นมา
ลองใช้คำสั่งด้านล่างแล้วจากนั้นลองใช้คำสั่ง docker ps เพื่อดูว่ามี Container run ขึ้นมาอีก
1 | docker run -d --name server_1 httpd |
จากการ Run docker ps เราจะเห็นข้อมูลที่เพิ่มขึ้นมาครับ โดยแต่ละ Column จะอธิบายเกี่ยวกับ Container ที่ Run อยู่ดังต่อไปนี้
- CONTAINER ID
มันคือเลขที่ใช้อ้างอิงถึง Container ตัวนี้ เลขนี้มันจะ gen มาให้ ซึ่งการันตีว่าไม่ซ้ำ
- IMAGE
เป็นตัวบอกว่า Container นี้สร้างมาจากต้นแบบอะไร จากตัวอย่างคือสร้างจากต้นแบบที่ชื่อ httpd (apache นั่นเอง)
- COMMAND
บอกว่าตัว Container นี้ Run อยู่ด้วยคำสั่งอะไร
- CREATED
บอกว่าตัว Container นี้ถูกสร้างมาแล้วนานเท่าไหร่
- STATUS
บอกว่าตัว Container นั้นมีสถานะอะไรอยู่ในปัจจุบัน
- PORTS
บอกว่าตัว Container มี Port อะไรให้เราสามารถเข้าไปใช้งานได้บ้าง
- NAMES
บอกว่าตัว Container นี้มีชื่อว่าอะไร ใช้ไว้อ้างอิงแบบเดียวกันกับ Container ID แต่อันนี้ใช้อ้างอิงง่ายกว่า เพราะมันอ่านออก
สร้างมันขึ้นมาอีก
จากนั้นลองสร้าง container ขึ้นมาอีกตามคำสั่งต่อไปนี้
- docker run -d –name server_1 httpd
คำสั่งนี้จะ Error ครับ พร้อมบอกว่าชื่อ server_1 มีคนใช้ไปแล้ว
- docker run -d –name server_2 httpd
อันนี้สร้างขึ้นมาได้
ลองใช้ docker ps ดูอีกรอบคราวนี้จะเห็น container สร้างขึ้นมาสองตัวแล้ว
Stop , Start, Remove
เมื่อสร้าง Container มันคล้ายๆเครื่องจำลองดังนั้นมันก็ต้อง ปิด เปิด หรือ ทำลายได้เช่นกัน โดยคำสั่งจะมีประมาณนี้
- docker stop : เป็นคำสั่งในการหยุดทำงาน Container แค่หยุดนะครับไม่ใช่ทำลาย โดยลองสั่งคำสั่งต่อไปนี้
1 | docker stop server_1 |
มันทำการสั่งเสร็จเราใช้ docker ps อีกครั้งจะเห็นว่า container 1 เราหายไป แต่ไม่ต้องตกใจมันหายไปเพราะ docker ps จะแสดงเฉพาะ Container ที่ทำงานอยู่ ถ้าอยากเห็นหมดต้องสั่ง
1 | docker ps -a |
- docker start : เป็นคำสั่งที่สั่งให้ Container เริ่มทำงาน คำสั่งจะคล้ายๆกับ docker stop
1 | docker start server_1 |
พอสั่งแล้วกด docker ps -a ดูอีกรอบจะเห็นว่า Container : server_1 เริ่มทำงานแล้ว
- docker rm : เป็นคำสั่งทำลาย Container
1 | docker rm server_1 |
พอสั่งแล้วมันจะ Error ครับ เพราะ Container : server_1 มันยัง Run อยู่ครับ ให้ลองสั่ง
1 | docker stop server_1 |
อ่านมาตั้งนานไม่เห็นได้ลองใช้งานเลย สร้างขึ้นมาทำไม
จริงๆตอนเราสร้าง Container ขึ้นมาคือมันใช้งานได้แล้วล่ะครับ สภาพมันจะเป็นตามภาพ
แต่ที่เราใช้ไม่ได้เพราะเราไม่รู้ว่าเครื่องมันอยู่ตรงไหนครับ (IP Adress) คือเรารู้ที่อยู่เครื่อง Machine ที่เราลงอยู่ครับแต่เราไม่รู้ว่า Container อยู่ตรงไหน ซึ่งจริงๆเรารู้ครับแต่จากการที่เราอยู่นอกวงที่ติดต่อได้ อยู่ Net คนละวง ด้วยความยุ่งยากประมาณนี้ Docker เลยช่วยเราโดยการใช้วิธี Bind port ให้ครับ
มายกตัวอย่างกันตอนนี้ผมสร้าง Container ขึ้นมาตัวนึงชื่อ my_http_server โดยใช้คำสั่ง
1 | docker run -d --name my_server httpd |
จากการ Run เราจะได้สถานการณ์ประมาณนี้
หลายคนคงบอกว่าเฮ้ยรู้ได้ไงว่า Container เปิด Port 80 สามารถดูได้หลายที่ครับ ที่แรกคือ สั่ง docker ps ครับ หรือเปิด Manual ของ Image ที่เราเอามาใช้ครับ เช่นของผมจะไปอ่านว่าเขาเปิด Port ไหนที่ Link นี้ หรือ มันเป็นเรื่องที่โดยทั่วไปในวงการเช่น httpd เขาก็เปิด 80 อยู่แล้ว อันนี้อาจโหดร้ายกับน้องใหม่ แต่เขาคิดว่ามันธรรมดามากๆจนไม่เขียน แต่ทุกวงการมีเรื่องอย่างนี้หมดครับ อย่าไปใส่ใจมันมาก พออยู่ในวงการไปสักพักจะค่อยๆรู้เอง อย่างวงการไอดอลเขามีขาย “เซกิ” ฟังครั้งแรกนี่งงเลยดิ ฮ่าๆๆๆ
คราวนี้จากภาพเราจะเห็นว่าเรารู้แต่ IP เครื่องที่ลง Docker แต่เราอยากติดต่อเครื่อง Container ที่อยู่ภายในเครื่องนั้นตัว Docker ก็แบบให้เราสามารถทำได้ง่ายๆโดยใช้วิธี Bind port โดยใช้คำสั่ง
1 | # กรุณาลบ Container my_server ทิ้งก่อนแล้วค่อยสั่ง |
โดยสถานการณ์จากการ run คำสั่งด้านบนจะเป็นดังภาพ คือเครื่อง Machine ทำการ ผูก Port 80 เข้าหากัน
เมื่อเรา Run แล้วลองเข้า Browser แล้วใส่ ip ของเครื่องหลักครับ (กรณีของผมเครื่องหลักอยู่ที่ 192.168.56.101) เราจะได้ผลลัพธ์ดังภาพ
เพื่อความเข้าใจที่มากขึ้นลองทำการ Bind port เครื่องหลักที่ไม่ใช่ 80 ดูกัน
1 | # กรุณาลบ Container my_server ทิ้งก่อนแล้วค่อยสั่ง |
แล้วลองเข้า Browswer แล้วกรอก ip ตามด้วย : port จากตัวอย่างของผมจะเป็น 192.168.56.101:8080
สรุป
ในตอนนี้ผมได้แนะนำวิธีการใช้ docker แบบเบื้องต้นมากๆ ตั้งแต่ Create , Start , Stop, Remove แล้วก็ Bind port ให้สามารถใช้งาน container ผ่านทางเครื่องหลักได้ ในตอนต่อๆไปจะค่อยๆสอนใช้ Docker ไปเรื่อยๆ โดยแนะนำตามที่ผมค่อยๆเรียนรู้และนำไปใช้งานกับงาน สำหรับคนผ่านมาอ่านตอนนี้ผมเปิด Page Facebook แล้วนะครับ ใครเล่น Facebook แล้วอยากได้แจ้งเตือนตอน Update blog ไปกดติดตามกันได้ครับ
เพลงประกอบการเขียน Blog
เพลงเพราะๆของพี่แอน ธิติมา คือฟังเพลงพี่เขามาตั้งแต่เด็กๆ เสียงพี่เขานี่ดึงอารมณ์เพลงได้สุดยอดมากจริงๆ เพลงใสๆหวานๆนี่จะฟินโคตรๆ แต่เพลงเศร้านี่ฟังแล้วดำดิ่งกันสุดๆ