เริ่มใช้ Docker บน VM กัน
ตอนแรกว่าจะไม่เขียนเรื่องนี้เพราะมี Tools มากมายไม่ว่าจะเป็น Docker for windows อันนี้ Window ต้องเป็น Lincense Pro หรือ Enterprise ถึงจะใช้ได้ หรือ Docker tools boxs ก็ดีสร้าง vm ขึ้นมาหลายตัวได้ ทำ cluster ก็ได้ ว่าง่ายๆมันคือ docker machine นั่นแหละ ซึ่งเป็น 2 ทางเลือกที่โอเคเลย
แต่จากการลองทำงานที่ทำงานหลายคนลง Docker for windows ไม่ได้เพราะไม่มี License Pro หรือ Enterprise ส่วน Docker toolsbox ก็มีปัญหาเรื่อง Binding volume ซึ่งมันมีวิธีการ Binding volume ตาม Link นี้ ซึ่งทำไปทำมามันดูวุ่นๆเลยเอาวะ ลงแบบโบราณไปเลยดีกว่า ลง VM แล้วใช้งานมันบน VM นั่นแหละ ให้ Docker มันอยู่ใน VM เวลาใช้ Command อะไรก็เหมือน Linux ไปเลย (command ในที่นี้หมายถึง command เวลาใช้งานเครื่อง Server)
Install Program กัน
Install VirtualBox
Download program virtual box เลือกตัว Platform แล้วกด Download ลงมาเลย
สร้างเครื่อง Guest
คือ Virtualbox มันเป็น Program ให้เราสร้าง Virtaul machine ขึ้นมาเป็นเครื่อง Guest (เครื่องที่สร้างเป็น VM จะเรียว่าว่า Guest ) ส่วนเครื่องที่เราใช้งานอยู่ในปัจจุบัน (ตอนนี้คือ Windows ) จะเรียกว่าเครื่อง Host ว่าง่ายๆ เครื่องจริงเป็น Host เครื่องปลอมเป็น Guest ส่วนวิธีสร้างเครื่อง Guest สามารถหาดูได้ตาม Youtube หรือ Blog ทั่วไปได้เลย
ส่วนใครขี้เกียจลงเอง ผมมีสร้างตัว VM แบบพร้อมใช้งานแล้ว คุณสามารถโหลดได้ที่ Link นี้ แล้วแตก zip แล้วกด Double click เข้าใช้งานตัว VM ได้เลย
โดยเครื่อง Guest ที่ผมลงจะเป็น CentOS7 (ตอนนี้มี 8 แล้วนะแต่ลงไม่เป็น ฮ่าๆๆๆๆ)
พอลงเสร็จแล้วให้ลองใช้ตัว Interface ของ VM (ตัวนี้เปรียบเสมือนกับเครื่อง Guest นั้นจริงๆที่ต่อ Keyboard กับ จอให้เราใช้งาน เราสามารถ Login เข้าใช้งานเครื่องนี้ได้โดยเครื่องนี้ไม่ได้ต่อกับ Net วงไหน ) ทำการ Login เข้าไปใช้งานเครื่องดูครับ โดย username password ตามที่คุณตั้งกันเลย ถ้าของผมจะเป็น
- user: root
- pass : root
ทำการ Setting Network
คือเครื่อง Guest ก็เหมือนเครื่องจริงๆเครื่องนึงดังนั้นมันสามารถต่อเข้า Network ได้ โดยอันนี้เราจะสร้างให้เครื่องนี้มี 2 Interface ครับ สำหรับคนที่ใช้เครื่องของผมอันนี้ผม Set ให้หมดแล้วครับ แต่ดูวิธี set ไว้ก็ดีครับ เพราะยังไงในอนาคตถ้าต้องการปรับแต่งอย่างอื่นเพิ่มเติมก็สามารถทำได้เอง
NAT อันนี้ไว้ต่อ Internet จริงๆ
Host Only อันนี้มีไว้ต่อกับเครื่องจริงของเรา มีไว้คุยกันภายใน
โดยมีวิธี Setting คือ คลิกขวาที่ตัวเครื่องแล้วเลือก Setting ตามภาพ
จากภาพเรา Set Host only ไว้ที่ interface หนึ่ง
และ interface 2 เรา set ให้เป็น NAT
Putty เข้าใช้งานเครื่อง Guest
ปกติเครื่อง Server ส่วนใหญ่เขาจะเปิดให้เรา Remote เข้าไปใช้งานโดยโหมดที่เขาให้เราเข้าไปใช้งานส่วนใหญ่จะเป็น Command line บางคนเวลา Remote เข้าไปใช้งานก็จะเรียก shell เข้าไป บางคนอยู่หน้า Command line บางคนเรียก shell บางคนเรียก cmd บางคนเรียก Terminal ซึ่งหลากหลายมาก แต่ผมเรียกปนๆไปนะ ช่างมันเถอะ ฮ่าๆๆๆๆ
ถึงตาพระเอกของ ### นี้ (มุกการจัด Header ในไฟล์ MD ) คือ Putty โดย Download ตัวใช้งานที่เป็น Client
ก็สำหรับใครที่ใช้ VM ของผมนะครับ IP Address ถ้าลงใหม่ๆเลยจะเป็น
- ip : 192.168.56.101
- user : root
- pass : root
ส่วนคนอื่นที่ลงเองหรือก็ต้องไปดูที่ IP ครับ โดยมีวิธีดูโดย Login เข้าไปในเครื่อง (โดยใช้ interface ของ Virtual box ) แล้วใช้คำสั่ง
- ip addr : จะเห็น IP ของเครื่อง ตามภาพ
จากภาพจะเห็นว่า ip ของเครื่องคือ 192.168.56.101 ครับ โดยตรงนี้หลายคนอาจสงสัยว่ารู้ได้ไงว่าใช้ net วงนี้วะ จริงเราสามารถดูได้ว่าเราจะใช้วงไหนโดยการดูที่
จะเห็นว่า HostOnly Adapter ที่ผม Set ไว้มันมีวงเป็น 192.168.56.x/24 เพราะอย่างนี้ผมเลยรู้ว่าเครื่อง VM เครื่องนี้มี ip เป็น 192.168.56.101 ส่วนของใครมี ip เป็นอะไรก็ไปดูได้ตามที่บอกครับ
โดยถ้า Putty เข้าเครื่องสำเร็จเราจะสามารถใช้งาน command line ผ่านตัว putty ได้เลย โดยถ้าใครถามว่าทำไมใช้ putty ไม่ใช้ interface ของ Virtual box ล่ะ คำตอบคือ putty มัน copy / parse ได้เลยโดยลากแล้วคลิกขวาวางได้เลย ในส่วนของ vm interface มันใช้ยากกว่า ผมเลยแนะนำให้ใช้ putty ครับ
ทำการเชื่อม Volume ระหว่างเครื่อง Host กับ Guest
ปัญหาหนึ่งในการใช้ VM (สำหรับ Developer) คือ เวลาเราแก้ Code อะไรในเครื่องจริง เราอยากให้มันถูกแก้บนเครื่อง VM ด้วย โดยวิธีแก้คือแก้บนเครื่องจริง แล้วใช้ FileZilla ไปวางทับอีกที ซึ่งวุ่นวาย ตัว VirtualBox เขาเลยทำวิธีการ ShareFolder ครับ โดยมีวิธีการทำดังนี้
Install addtion guest
สำหรับคนลงเองต้องลงส่วนเสริมเกี่ยวกับการ Share folder ก่อน สำหรับคนที่ใช้ VM ผมไม่ต้องทำ step install adition guest นี้ครับ โดยสามารถทำตาม Link นี้
ทำการ Set ShareFolder
เมื่อทำการลงเสร็จให้ปิดเครื่อง Guest แล้วมา Setting การ Share folder ระหว่างเครื่อง Guest กับ Host ดังภาพ
โดยในส่วน Folder path : เราเลือกเอาเลยครับว่าจะgเอา Folder ไหนที่เราอยากจะให้เห็นทั้งเครื่อง Host และ เครื่อง Guest ส่วน Folder name และ Mount point ตั้งชื่อตามสะดวกครับ ของผมตั้งไว้ชื่อ share_docker และเลือก option ตามภาพ กด Accept
จากนั้นเปิดเครื่อง Guest แล้วเข้าไปสร้าง Folder ในเครื่อง Guest ใน Path ที่อยาก share ของผมอยาก share ที่ Path : /root/share_docker
1 | mkdir /root/share_docker |
จากนั้นใช้คำสั่ง cat /etc/passwd เข้าไปจดเลขตามที่วงแดงไว้ โดยจากภาพเลขที่ต้องจดคือ 997
จากนั้นใช้คำสั่ง cat /etc/group เข้าไปจดเลขตามที่วงแดงไว้ โดยจากภาพเลขที่ต้องจดคือ 995
จากนั้นใช้คำสั่ง
1 | mount -t vboxsf share_folder_name -o rw,dmode=777,gid=xxx,uid=xxx /guest/path/to/share |
โดยตรงตัวแปร
- share_folder_name คือชื่อ share_folder ที่เราตั้งที่ VirtualBox
- gid ให้เอาค่าที่จดจากการอ่านไฟล์ /etc/group มาใส่
- uid ให้เอาค่าที่จดจากการอ่านไฟล์ /etc/passwd มาใส่
- /guest/path/to/share คือ path ที่จะ share ในเครื่อง guest
โดยจากตัวอย่างจะได้เป็น
1 | mount -t vboxsf share_docker -o rw,dmode=777,gid=995,uid=997 /root/share_docker |
จากนั้นทำการลองสร้างไฟล์ใน folder ที่เราทำการ mount ครับ โดยจะเห็นไฟล์ในเครื่องจริงกับ VM นั้นเหมือนกันเลย
สั่งให้ทำการ Mount ทุกครั้งที่ Login เข้าใช้งานเครื่อง
จากขั้นตอนที่แล้วเราสั่งให้ทำการ share folder (mount) ระหว่างเครื่อง host และเครื่อง guest แล้ว แต่ทุกครั้งที่ปิดเครื่อง เวลาเรา Login เข้ามาใหม่ เราต้องทำการสั่งคำสั่งนี้ทุกครั้ง ดังนั้นเพื่อให้สะดวกเราจะฝัง script นี้ให้ทำงานทุกครั้งที่เรา login โดยทำได้โดยใช้เข้าไปแก้ไขไฟล์ ~/.bashrc โดยใช้คำสั่ง
1 | echo "mount -t vboxsf share_docker -o rw,dmode=777,gid=995,uid=997 /root/share_docker" >> ~/.bashrc |
อย่าลืมเปลี่ยนพวกตัวแปรให้ตรงกับสิ่งที่คุณต้องการ จากนั้น restart เครื่องแล้วลองเช็คดูครับว่าสามารถทำงานได้ไหม
ทำการ Install docker
วิธีการ Install docker นั้นมี manual อยู่ที่ เว็บหลัก ของ docker แล้ว แต่มีอีกวิธีนึงที่ง่ายมากสามารถทำตามโดย copy วางแล้วไม่ค่อยมีปัญหาคือใช้วิธีตาม เว็บนี้
ซึ่งพอทำตามเสร็จให้สั่ง Restart เครื่อง Guest จากนั้นเข้าเครื่อง guest login เข้าไป จากนั้นสั่ง
1 | systemctl enable docker |
จากนั้นสั่ง restart อีกครั้ง
ทดสอบการใช้งาน Docker
ทดลองใช้คำสั่ง
1 | docker run --rm -p 80:80 nginx |
จากนั้นเปิด Browser ที่เครื่อง Host พิมพ์ Ip ของเครื่อง Guest โดยของผมจะเป็น 192.168.56.101 ซึ่งถ้าเปิดได้ดังภาพแสดงว่าคุณลง docker สำเร็จแล้วครับ
สรุป
สำหรับตอนนี้เป็นตอนที่สอน Install ใช้งาน docker กับ Virtualbox ซึ่งเหมาะกับใครที่ชอบเล่นท่ายาก หรืออยาก customize อะไรเอง ก็คงจะได้สมใจกันครับ ในตอนต่อๆไปผมจะคงจะมาสอนใช้ command ของ docker คร่าวๆแล้วก็การประยุกต์นำไปใช้งานครับ สำหรับตอนนี้ขอจบเท่านี้ครับ
เพลงประกอบการเขียน Blog
เพลง Cover ของน้อง Nico ฟังแล้วทำนองกับเสียงร้องของน้องเข้ากันได้ดี ไม่เคยฟังต้นฉบับเลย ฮ่าๆๆๆๆ