Upload
Download free for 30 days
Login
Submit search
18 ฝ่ามือพิชิต docker
7 likes
3,506 views
Bhuridech Sudsee
หนังสือเกี่ยวกับ Docker ที่เขียนยังไม่เสร็จ Docker ก็เปลี่ยนใส้ในไปหลายอย่างจนผมตามไม่ทัน
Software
Read more
1 of 22
Download now
Downloaded 135 times
1
2
3
Most read
4
Most read
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Most read
19
20
21
22
More Related Content
PPTX
DevSecOps in the Cloud from the Lens of a Well-Architected Framework.pptx
Turja Narayan Chaudhuri
PDF
Monitoring Oracle Database Instances with Zabbix
Gerger
PDF
Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Web Services Japan
PDF
Jenkins를 활용한 Openshift CI/CD 구성
rockplace
PPTX
Comprehensive Terraform Training
Yevgeniy Brikman
PDF
Creating AWS infrastructure using Terraform
Knoldus Inc.
PDF
MariaDB Xpand 고객사례 안내.pdf
ssusercbaa33
PDF
Container, Container, Container -유재석 (AWS 솔루션즈 아키텍트)
Amazon Web Services Korea
DevSecOps in the Cloud from the Lens of a Well-Architected Framework.pptx
Turja Narayan Chaudhuri
Monitoring Oracle Database Instances with Zabbix
Gerger
Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Web Services Japan
Jenkins를 활용한 Openshift CI/CD 구성
rockplace
Comprehensive Terraform Training
Yevgeniy Brikman
Creating AWS infrastructure using Terraform
Knoldus Inc.
MariaDB Xpand 고객사례 안내.pdf
ssusercbaa33
Container, Container, Container -유재석 (AWS 솔루션즈 아키텍트)
Amazon Web Services Korea
What's hot
(20)
PDF
SBOM, Is It 42?
Bill Bensing
PPTX
Hadoop Operations - Best Practices from the Field
DataWorks Summit
PDF
Yahoo! JAPANのOracle構成-2017年版
Yahoo!デベロッパーネットワーク
PPTX
Oracle常駐接続プーリング(DRCP)を導入した話
Kentaro Kitagawa
PDF
DevOps or DevSecOps
Michelangelo van Dam
PPTX
Terraform
Harish Kumar
PPTX
事例で学ぶApache Cassandra
Yuki Morishita
PDF
AWS Black Belt Online Seminar Amazon Aurora
Amazon Web Services Japan
PPTX
Cloud computing and migration strategies to cloud
Sourabh Saxena
PDF
Best Practices of Infrastructure as Code with Terraform
DevOps.com
PPTX
Docker 101 : Introduction to Docker and Containers
Yajushi Srivastava
PPTX
Final terraform
Gourav Varma
PDF
Terraform
Marcelo Serpa
PPTX
Terraform
Pathum Fernando ☁
PPT
Amazon S3 and EC2
george.james
PDF
Amazon Athena 初心者向けハンズオン
Amazon Web Services Japan
PDF
Docker 101: Introduction to Docker
Docker, Inc.
PPTX
Infrastructure-as-Code (IaC) Using Terraform (Advanced Edition)
Adin Ermie
PDF
Practical DevSecOps Course - Part 1
Mohammed A. Imran
PDF
Jenkins vs GitLab CI
CEE-SEC(R)
SBOM, Is It 42?
Bill Bensing
Hadoop Operations - Best Practices from the Field
DataWorks Summit
Yahoo! JAPANのOracle構成-2017年版
Yahoo!デベロッパーネットワーク
Oracle常駐接続プーリング(DRCP)を導入した話
Kentaro Kitagawa
DevOps or DevSecOps
Michelangelo van Dam
Terraform
Harish Kumar
事例で学ぶApache Cassandra
Yuki Morishita
AWS Black Belt Online Seminar Amazon Aurora
Amazon Web Services Japan
Cloud computing and migration strategies to cloud
Sourabh Saxena
Best Practices of Infrastructure as Code with Terraform
DevOps.com
Docker 101 : Introduction to Docker and Containers
Yajushi Srivastava
Final terraform
Gourav Varma
Terraform
Marcelo Serpa
Terraform
Pathum Fernando ☁
Amazon S3 and EC2
george.james
Amazon Athena 初心者向けハンズオン
Amazon Web Services Japan
Docker 101: Introduction to Docker
Docker, Inc.
Infrastructure-as-Code (IaC) Using Terraform (Advanced Edition)
Adin Ermie
Practical DevSecOps Course - Part 1
Mohammed A. Imran
Jenkins vs GitLab CI
CEE-SEC(R)
Ad
More from Bhuridech Sudsee
(20)
PDF
Kafka for developer
Bhuridech Sudsee
PDF
Xss and sql injection
Bhuridech Sudsee
PPTX
Introduction to Quantum Computing
Bhuridech Sudsee
PDF
$ Spark start
Bhuridech Sudsee
PDF
เสี่ยวเอ้อสอน Spark
Bhuridech Sudsee
PDF
Jpa sa-60
Bhuridech Sudsee
PDF
Cloud computing
Bhuridech Sudsee
PDF
หนังสือภาษาไทย Spark Internal
Bhuridech Sudsee
PDF
VBoxManage tutorial
Bhuridech Sudsee
PDF
Git ฉบับอนุบาล 2
Bhuridech Sudsee
PDF
sample plot 3D form depth map using OpenCV
Bhuridech Sudsee
PDF
illustrator & design workshop
Bhuridech Sudsee
PDF
The bounded buffer
Bhuridech Sudsee
PDF
operating system
Bhuridech Sudsee
PDF
Producer and Consumer problem
Bhuridech Sudsee
PDF
OPD System with ZK Grails
Bhuridech Sudsee
PDF
Market management with ZK Grails
Bhuridech Sudsee
PDF
Websocket & HTML5
Bhuridech Sudsee
PDF
Networking section present
Bhuridech Sudsee
PDF
Breast Cancer data mining KDD
Bhuridech Sudsee
Kafka for developer
Bhuridech Sudsee
Xss and sql injection
Bhuridech Sudsee
Introduction to Quantum Computing
Bhuridech Sudsee
$ Spark start
Bhuridech Sudsee
เสี่ยวเอ้อสอน Spark
Bhuridech Sudsee
Jpa sa-60
Bhuridech Sudsee
Cloud computing
Bhuridech Sudsee
หนังสือภาษาไทย Spark Internal
Bhuridech Sudsee
VBoxManage tutorial
Bhuridech Sudsee
Git ฉบับอนุบาล 2
Bhuridech Sudsee
sample plot 3D form depth map using OpenCV
Bhuridech Sudsee
illustrator & design workshop
Bhuridech Sudsee
The bounded buffer
Bhuridech Sudsee
operating system
Bhuridech Sudsee
Producer and Consumer problem
Bhuridech Sudsee
OPD System with ZK Grails
Bhuridech Sudsee
Market management with ZK Grails
Bhuridech Sudsee
Websocket & HTML5
Bhuridech Sudsee
Networking section present
Bhuridech Sudsee
Breast Cancer data mining KDD
Bhuridech Sudsee
Ad
18 ฝ่ามือพิชิต docker
1.
...ขาพเจาเฝารอวันที่ความรูของขาพเจาพรอมสรรพ วันนั้นไมเคยเดินทางมาถึงเลย ตอเมื่อขาพเจาหยุดที่จะรอ วันนั้นก็มาถึง ขาพเจารูซึ้งวาวันนั้นไมมีทางมาถึงตราบที่ยังตามหา แทจริงแลวมีแตวันนี้เทานั้นเอง…
2.
“Dockerหนะหรอ? กอนจะกลาวถึง Docker
นั้นตองคุยไปถึงเรื่อง Container เสียกอนวามีความเกี่ยวของกันยังไง” ปรมาจารยอูเกวยกลาวพลางคํ้าไมเทา “Container บางทีเราก็เรียกมันวา OS-Level Virtualization เพราะวามันใฃ Kernel รวมกับตัวระบบปฏิบัติการหลักของเรา มีมานานมากแลวถาจะนับ Chroot เปน OS-Level Virtualization แลวละก็ มันก็มีมาตั้งแต ค.ศ. 1982 พูนแหละ แตถาเปน Container รุนใหมๆ ก็มีมาราวสิบปมานี่แหละ ไอพวก OpenVZ, Solaris Zone หรือพวก LInux Container (LXC) แมวามันจะไมปลอดภัยเทากับตัว Hypervisor แตมันก็มีขอดีคือลดพื้นที่โจมตีเพราะมันไมตองมีพวก Guest OS เรื่องซีเคียวนี่เถียงกันไดอีกนาน” “แลว Kernel มันคืออะไรหละทานอาจารย” อาโปกลาวถาม ขณะที่ปรมาจารยอูเกวยหันหลังอยู “Kernel คือโปรแกรมที่ทําหนาที่เปนแกนกลางของระบบปฏิบัติการของเรา สวนนี้คือหัวใจในการติดตอกันระหวางฃิ้นสวนภายใน OS โดยปกติแลวโปรแกรมเราจะไมไดสามารถคุยกับ RAM หรือ Harddisk หรืออุปกรณคอมพตาง ๆ ไดตรง แตจะคุยผาน Kernel ปองกันโปรแกรมกาก ๆ ที่พวกเจาสรางจะเขาไปทําใหระบบไฟฟามันซอตหนะซิ” “แลว Chroot หละทานอาจารย” “Chroot เปนการขังโปรแกรมใหมองเห็นไดเรกทอรี่ (ที่เรียกจนติดปากวาโฟลเดอรนั่นแหละ) ที่กําหนดใหเปนเปนรูทไดเรกทอรี่ของโปรแกรททําใหมันวิ่งไปที่ไดเรกทอรี่อื่นไมได เพราะในระบบ Unix รูทไดเรกทอรี่มันอยูสูงสุดแลวไงหละ” “เอาเทานี้กอนเดี๋ยวธาตุไฟเขาแทรก” ปรมาจารยอูเกวยกลาว พลางเลาตอ “Docker เปนทั้งชื่อซอฟตแวรและก็ชื่อบริษัทดวย แตกอน Solomon Hykes เปนเจาของ dotCloud บริษัททําเกี่ยวกับเรื่อง PaaS ทําไปทํามาทาทางจะไปไมรอดเพราะไมทําเงินใหนักลงทุนสักเทาไหร แต Solomon ก็ไดทําโปรเจกโอเพนซอสภายใน dotCloud ไปดวยชื่อวา Docker เปดซอสเปน Apache 2.0 นักพัฒนายุคแรกๆก็พวก Andrea Luzzardi, Francois-Xavier Bourlet แลวก็ Jeff Lindsay สามคนแรกเปนวิศวกรของ dotCloud สวน Jeff เปนนักพัฒนาภายนอก ทําไปทํามาโปรเจกนี้ชักรุง ประกอบกับธุรกิจหลักของ dotCloud ไมคอยดี เลยเปลี่ยนชื่อบริษัทเปน Docker แลวให dotCloud เปนหนวยธุรกิจของ Docker แทน ภายหลัง dotCloud ก็ถูกขายให CloudControl โดยไมเปดเผยเงื่อนไข ประมาณวาไปอยูกับคนที่เขาดูแลเธอไดดีกวาฉันจะดีกวา แตไมมีพนักงาน Docker ยายไปอยูกับ CloudControl เลย เมื่อตนป ค.ศ. 2016 dotCloud ก็ตองปดตัวลงเพราะบริการไปไมรอด บอกแลวตลาดนี้มันเถื่อน ไมแนจริงอยูไมได” “เทคโนโลยี Container ที่มีมานานนมแลวก็จริงแตมันใชงานยาก Docker เอามาทําใหมันสามารถไดงาย ๆ และจุดยืนของ Docker จะชวยโฟลวการทํางานของ DevOps ซึ่งเปนวัฒนธรรมการทํางานที่ Developer กับ Operation ประสานงานกันไดอยางดี ยาย App จากเครื่องไปอีกเครื่องได ไมมีดรามามันเวิรคบนเครื่องตู!
3.
ซะมากกวาเพราะทุกวันนี้เถียงกันหลือเกินวา VM หรือ
Docker ดีกวา มันดีกันคนละอยาง ปดโถว! เอาหละไหนๆ ก็พูดกันถึงเรื่อง VM ปะทะ Docker แลวก็ตองอธิบายสักหนอย” พูดพลางวาดรูปบนพื้น “อาโป เจาเห็นรูปนี่ไหม ทางซายเปนชั้นของ VM จะตองมี Hipervisor หรือ Virtual Machine Manager (VMM) เปนตัวกลางในการคุยกัน อยาเพิ่งเถียงเรื่องประเภทของ VM ที่แบงยอยไดหลากหลาย เอาเปนวา VM ทั่วๆไปที่เราใชอยูมีลักษณะแบบนี้ จะมีตัวกลางในการคุยคือ Hipervisor นี่แหละ แลวก็ยังตองมี Guest OS ซึ่งมันทําใหชา ในขณะที่ Docker ทางขวาเขาเจานั้นไมจําเปนตองใช Guest OS ไมตองมี Hypervisor แตมี Docker Engine แทน งานวิจัยของ IBM บอกวา Container มันมีโอเวอรเฮดของการเริ่มตนใชอยูที่ < 1 วินาที แต VM ใชราว 11 วินาที อันที่จริง Docker มีนใชเวลาเริ่มราว ๆ 200-300 มิลลิวินาทีเอง งานวิจัยใหม ๆ ตนป ค.ศ. 2016 บอกวาสามารถใชเทคนิคให Container เร็วกวา VM 91 เทา เร็วโพดโพ เร็วจนตองรองขอชีวิต กลไกที่ทําใหมันเร็วไดขนาดนี้ก็เนื่องมาจากที่ไดอธิบายไป มันใชวิธีการวิ่งผาน Kernel ของระบบปฏิบัติการหลักที่เราใชอยู เปนเหตุผลวาทําไมมันใช Windows ขางใน Container บน Linux ไมได เพราะ Windows กับ Linux มันใช Kernel คนละตัวกันไง ชัดหรือยังวาตางมีแนวทางเปนของตัวเอง จะให Container ไปตีตลาด VM คงจะไมงายซะทีเดียว” “แลวกระบวนการขางใน Docker Engine ทํางานยังไงหละทานอาจารย” อาโปยิงคําถามตอ
4.
“กอนอื่นคงตองเลาคราวๆ ใหเจาฟงกอนเรื่องของชิ้นสวนหรือองคประกอบของที่เรียกวา Docker ซะกอนวามีอะไรที่จําเปนตองรูบาง ● Docker Machine
เปนตัวที่ใช Provision หรือเตรียมเครื่องปลายทางให ถาเรามีเครื่องคอมเปลา ๆ หรือที่เรียกวา Bare Metal มันจะสรางคียแลวเอาคียไปเพิ่มที่เครื่องปลายทาง จากนั้นจัดการลงโนนนี่ใหเสร็จสรรพ หรือถาเราใชอินฟราของพวก Amazon, DigitalOcean เราก็จะเอาคียมาใส จากนั้นที่เหลือมันก็จะจัดการลง Image อะไรให สะดวกสบาย ถามวาไมใช Machine ไดไหม กตอบวาได แตถามีเครื่องเปนรอยเครื่องนี่ลําบากแนนอน โดยเฉพาะตอนสรางคีย แลว Join Swarm Cluster นะ บอกไดคําเดียววานรกแตกจะ ● Docker Swarm ตัวนี้เอาไวใชคุยกับ Docker หลายๆ ตัววางายๆ มันก็คือตัวที่เอาไวจัดการคลัสเตอรของ Docker นั่นเอง ขอดีคือมันสามารถคุยกับ Docker หลายตัวในโหมดซีเคียวได สั่งที่เดียวสามารถกําหนดใหมันเอา Container ไปวางที่ DigitalOcean หรือ Amazon ก็ได สบั้ยมาก Docker Compose เอาไวมัด Container หลายๆ ตัวเขาไวดวยกันไง เวลารันมันจะไดรันขึ้นมาเปนชุดๆ เชนเว็บเซิฟเวอรกับฐานขอมูล มันก็จะมาเปนชุดๆ กันเราก็จะเขียนไฟลในรูปแบบ YML (อานวายาเมล) รายละเอียดเดี๋ยวคอยวากัน ● Docker Engine พระเอกของเราที่จะไดคุยรายละเอียดกันตอไป แตตอนนี้เอาคราวๆ มันคือตัวรันงานจริงๆ เปนตัวจัดการ Container สวนนี้คือหัวใจของ Docker เลยแหละ ถาไมมีพสวนนี้พับคอมเก็บแลวไปปลูกเมลอนไดเลย ● Docker Registry สวนนี้เอาไวเก็บ Image ของ Docker เดี๋ยวเลาใหฟง วัยรุนอยาเพิ่งใจรอน“
5.
“โอเค ตอนนี้เราก็รูถึงองคประกอบของ Docker
บางสวนที่จําเปน แลวก็มีการพูดถึงบอย ๆ ไปแลว ทีนี้เรามาเจาะลึกรายละเอียดเริ่มที่ Docker Engine พระเอกของเรากันกอนเลย Docker รีลีสครั้งแรก 13 มีนา 2013 (มันมีโจกอยูวา HR บองตื้นของบริษัทไหนจําไมไดระบุวาผูสมัครตองมีประสบการณใช Docker ไมนอยกวา 3 ป ทั้งๆ ที่ตอนนั้น Docker อายุ 2 ป เอง) เวลาพูดถึง Docker ก็จะหมายถึง Docker Engine นี่แหละ ตัว Engine ใชคุณสมบัติของ Linux Kernel เชน CGroups, Namespaces และ Union Mounting (เชนพวก AUFS) ทําใหมันสามารถเปน OS-Level Virtualization ได และแยก Container ที่ทํางานอยูบนเครื่องเดียวกันออกจากกันไดอยางสวยงาม ระบบจะมอง Engine ทั้งตัวเปนแคโปรเซสของระบบ Container จะเปนโปรเซสยอยของ Engine อีกทีถา Docker Engine หรือแมมันตาย Container ตัวลูกนี่ก็เดดซะมอเรตามไปดวย เวอรชั่นแรก ๆ Engine ใช LXC แตรุน 0.9 มาก็เปลี่ยนไปใชคาเริ่มตนเปน libcontainer ที่เขียนขึ้นมาเองจากภาษา Go” “แลวพวก CGroups, เนมสเต็ก นี่คืออะไรหรอครับทานอาจารย” “ Namespace ตะหากเฟย เอาหละ ในเมื่อเจาไมเขาจะก็จะเลาใหฟง ● CGroups หรือ Control Group เปนตัวที่ใชแยกและจํากัดการเขาถึงทรัพยากรของเครื่องคอมพิวเตอรที่ใช Linux เชนพวก Disk I/O, RAM, CPU, Network จํากัดการใชงานไดเชน ใช CPU ไดไมเกินเทาไหร ใช RAM ไมไมเกินเทาไหร ใชสูงสุดแคทรัพยากรที่ตัวเองไดรับจัดสรรเทานั้น พัฒนาโดยวิศวกรจาก Google แลวรวมโคดเขามาใน Linux Kernel Mainline ในรุน 2.6.24 (Linux Kernel มีคนแกใหเปนรุนยอยจนนับไมถวยแตตัวหลักที่ Linus Torvald คนสราง Linux เปนคน Maintain เราเรียกวา Mainline) ● Namespaces ใชแบงทรัพยากรของ Linux ออกการกัน การทํางานจะคลายกับ Chroot ระบบจะเห็นสภาพแวดลอมเฉพาะของ Container ตัวเอง ไมสามารถไปใชทรัพยาการของ Container อื่นได โดยจัดวางอยูในลักษณะของไดเรกทอรี่ยอย ๆ เปนลําดับ Namespaces นี่เองที่ทําให Container มี IP, Hostname หรืออุปกรณเครื่อขายเปนของตัวเอง ● Union Mount เปนการเมาทไฟลที่เดียว แตเห็นไฟลจากหลายที่ งงปะ? คือใน Linux เราสามารถสรางรูหนอนจากไดเรกทอรี่หนึ่งหรือไดวรหนึ่ง ๆ ไปอีกที่หนึ่งได แตมันดันเปนแบบชี้ไดทีละที่ สมมุติ /mnt ของเรามีไฟล A อยู ทีนี้เราเมาท Disk0 ที่มีไฟล B ไปที่ /mnt ถาเราเปดดูจะเห็นแคไฟล B ตัว Union Mount เลยเขามาแกปญหาสวนนี้ ซึ่งมันจะทําใหเห็นทั้งไฟล A และ B ในเมาทพอยตเดียวกัน” “เดี๋ยวกอนยังไมหมด สิ่งที่ควรรูอีกอยางก็คือ Docker ใชกลไกที่เรียกวา Copy-on-Write (COW) ที่อยูใน File System เชน BTRFS หลักการทํางานของมันก็คือมันจะ Copy ตัวที่มันจะ Write เอา งงรับประทานอีก วากันงาย ๆ สมมุติวามี App 2 ตัวชื่อ App-1 กับ App-2 ใชงานไฟลเดียวกัน ชื่อไฟล A ก็แลวกัน ระบบไฟลปกติเชน Ext4 ถา App-1 แกไฟล A ใหเปน A’ แลวความบรรลัยจักเกิดแก App-2 ที่เรียกใชงานไฟลเดียวกัน แตไฟลเจากรรมดันถูกแกไขไปแลว แตถาระบบเปนแบบ COW แลวหละก็ไฟลที่
6.
App-1 แกจะไมกระทบกับ App-2
มันจะมองเปนคนละไฟลกันแลว แนวคิดนี้ชวยให Docker ลดการใชพื้นที่ไปไดเยอะเลยเพราะมันเก็บเฉพาะสวนที่เพิ่มขึ้นมาเอาไวแกไฟลนิดเดียวก็ไมตองเก็บทั้ง HDD” “อนาคตของ Docker ไปไดสวย และคิดวานาจะไปไดสวยเรื่อยตอนนี้นอกจาก Linux แลวยังมี Windows เขามาแจมดวย อยากจะรูเหลือเกินวาอะไรดลใจ Satya Nadella CEO ของ Microsoft ใหยอมแก Kernel ของ Windows ใหซับพอรต Docker ยิ่งชวงหลัง ๆ Microsoft ดู เอาจริงเอาจังกับ Linux มาก ๆ แถมยังยอมใส Bash Shell เขามาเอาใจ System Admin ที่ใช Linux อีก เขามีแผนอะไรกันแนนะ” “วันนีเลิกคลาสได เราจะเจอกันวันพรุงนี้ เมื่อวันพรุงนี้มาถึงเจาจะตองพรอมแลว” ปรมาจารยอูเกวยหันหลังแลวหายตัวไป วันคืนลวงไป ๆ บัดนี้เราทําอะไรอยู - พระพุทธเจา - “อาโป ตึ่งไดลาวว ลือสายแลวนะ เดี๋ยวไปเรียนไมทัน” “ครับเตี่ยยยย” กระบวนทาที่ 1 : เปดโลกยุทธจักร “เอาหละวันนี้เจาจะไดเรียนรูโลกของ Docker และวิชายุทธเบื้องตนกันใหพอสมควร Docker นั้นมีคียเวิรดที่นาสนใจอยูหลายตัว ● Docker Image เปนลักษณะตนแบบของ Container ซึ่งมันประกอบไปดวย OS แลวก็ App ที่ติดตั้งเพิ่มไปเปนชั้นๆเหมือนขนมชั้นเลย ที่มันทําเปนชั้น ๆ แบบนี้ไดก็เพราะมีคุณสมบัติของ COW นี่แหละที่สนับสนุน มันจะเก็บ Layer ตอซอนกันขึ้นไปเรื่อย ๆ ไดตามขอมูลหรือโปรแกรมที่เพิ่มขึ้นมา รูปขวามือเปน Image ชื่อ Mem_Nginx จะเห็นวามันมีชั้นหลายอันเรียงกันเปนขนมชั้น ชั้นที่ตํ่าที่สุดคือ Ubuntu 16.10 ซึ่งเปนระบบปฏิบัติการ Image ที่ไมมีแมแบบนี้เราเรียกมันวา Base Image จากนั้นก็มีการติดตั้ง Nginx ตามดวย Memcache ในลําดับถัดมา สมมุติอีกวาถาเรามี Image ตัวที่ 2 ชื่อ MApache แตใช Ubuntu 16.10 ซึ่งเปน Base Image รวมกันแบบนี้ Layer ของ Ubuntu 16.10 ก็จะสามารถใชรวมกันไดไมตองเปลืองเนื้อที่เก็บ 2 เทา แตมันชี้มา Layer เดียวกันไดเลย (ตามคํานิยามในเว็บ
7.
https://docs.docker.com Base Image
คือ Image ที่ไมมี Parent แตในเอกสารหลาย ๆ ตัวก็ใชคําวา Base Image สําหรับ Image ที่คิดวาเปนฐานของงานตัวเองเลย เชน ตัวอยางขางบนถาเราสนใจการติดตั้ง Web Server ก็สามารถเรียกตัว Image ของ Ubuntu เปน Base Image ไดเชนเดียวกัน ถึงแมวา Ubuntu จะมีหลาย Layer ก็ตาม บางเจาปรับกลไกพวก Init system ที่ใชกับ Docker ไมเหมาะแลวคอยทํา Base Image ดังนั้นไมตองซีเรียสเรื่องการเรียกมาก) ● Docker Container คลายกับ Container ที่เอาไวขนสงสิ่งของทางเครื่องบินหรือทางเรือ แต Docker ใฃกับการขนสงชิ้นสวนซอฟตแวร การขนสงสินคาไมสนใจวาของใน Container เปนอะไรขอแคมันอยูในนั้นได บริษัทสงสินคารับรองวาจะสงไดอยางมีมาตรฐาน Docker ก็ขนสงซอฟตแวรใน Container โดยไมสนใจ เหมือนกันวามันเปนซอฟตแวรอะไร แตรับประกันวามันจะทํางานไดอยางมีมาตรฐานเดียวกัน ในทุก ๆ ที่ ทําใหมันสามารถรันที่ไหนก็ไดและใหผลลัพธเหมือนเดิม ตัว Docker Container ใช Image เปนตัวตั้งตนเพื่อสราง Container ขยายความอีกหนอย Container คือ โปรเซสของ Image ที่สามารถมีหลายโปรเซสหรือ Container ทํางานโดยตั้งตนจาก Image เดียวกันได ถา Container ไหนมีการแกไขคอยใช COW เพิ่ม Layer ขนมชั้นไปเรื่อยๆ เห็นไหมหละวาคอนเซ็บ COW ถูกเอามาใชแลว Conatainer ● Docker Engine อยางที่เคยบอกไปวาตัว Engine นี้คือพระเอกของเรา ซึ่งภายในตัว Engine เองก็แบงออกเปน 2 สวน คือ Docker Server บางที่เราก็เรียกมันวา Daemon ตัวนี้เปนตัวทํางานใหเราจริง ๆ ระบบการทํางานจะอยูสวนนี้ อีกสวนคือ Docker Client เปนตัวเรียกสั่งงานผาน RESTful API ชื่อเทห ๆ คือ Docker Remote API ไปที่ตัว Daemon จากนั้น Daemon จะเปนตัวจัดการ Container ให ขอควรระวังคือเวอรชัน API ใน Server กับ Client ควรจะเปนเวอรชันตรงกันจะดีที่สุด มีหลายกรณีที่เวอรชันตางกันแลวทํางานไมได แตไมตองเปนกังวลถาติดตั้งพรอมกันปกติก็ไดรุนเดียวกันมาอยูแลว ทาพิศดารแบบนั้นเกงแลวคอยใช“ “ถาเครื่องเรามีโปแกรมครบทุกอยาง แลวเราสามารถทํา Base Image ของเราเองไดไหมทานอาจารย” “ไดซิลองถามอากูดูวา ทํายังไงนะ เอาเปนวาตอนนี้เจาพรอมที่จะใชงาน Docker กอนแลวก็แลวกัน ตามธรรมเนียมเราจะเริ่มที่การติดตั้งกันเลย (ใครเกงแลวก็ขาม ๆ ไปได) Windows
8.
1) ไปที่เว็บไซต https://www.docker.com/products/docker-toolbox 2)
กด Download ฝงที่มีโลโก Windows 3) ขั้นตอนติดตั้งก็ไมยาก เหมือนที่เราคุนเคยกันดี Next ๆ Yes ๆ OK ๆ
9.
10.
4) หลังจากติดตั้งเสร็จแลวเราจะได icon
มาสองตัว เราจะเลือกใช Terminal เพราะมันจะรับคําสั่งทาง Command Line Interface (CLI) (สวนตัว Kitematic เปนแบบ GUI คลิ๊ก ๆ สั่งงานไดเหมือนกัน) Mac OS X คลาย ๆ กับของ Windows เลยครับ แตเปนการติดตั้งจาก Source นอก App Store ของ Apple ดังนั้นถาเกิดกดจะติดตั้งแลวติดตั้งไมได ใหเขาไปเปลี่ยนโหมดตัวปองกันการติดตั้งกอน ใหมันรองรับ Indentified Developers ไปที่ System Preferences > Security & Privacy > แลวเลือกตัวกลางตามภาพ 1) ไปที่เว็บไซต https://www.docker.com/products/docker-toolbox 2) เลือกโหลดฝง Mac
11.
กด Keep (บอกละเอียดไปปาวเนี่ย) 3)
Next ๆ Yes ๆ OK ๆ
12.
Ubuntu (และ Debian
ก็คลายกัน) ตัวอยางสั่งจาก Shell Super User ของ Root พอทุกสถาบัน (ถาอยากสั่งให User ของเราไปอยูในกลุม Docker ที่ Docker แอบสรางไวใหเพื่อใชสั่งรัน Docker ได ก็สั่ง $ sudo usermod -aG docker your-user ซึ่งก็ใชสิทธิ์ Super User อยูดีแตใชแคครั้งแรกไงหละ) 1) เปด Terminal แลวสั่ง $ sudo su 2) สั่ง # curl -sSL https://get.docker.com/ | sh (เครื่องหมาย $ ไมตองพิมพนะ เอาไวบอกระดับของ Shell วาเปน Shell ระดับ User ธรรมดา สวน # บอกวาเปนระดับ Super User เขียนเอาไวเผื่อมีคนงง มันเคยมีไง)
13.
3) สั่ง #
docker version ดู ถามันขึ้นทั้ง Client กับ Server แบบนี้เปนอันเรียบรอย พิเศษหนอยสําหรับใครที่อยูในกลุม Private Beta ของ Docker ก็สามารถโหลด Docker for Mac หรือ Docker for Windows มาใชได (คาดวาอีกสักพักกวาผูใชทั่วไปจะไดใช) ตัว Docker Toolbox ที่บอกวิธีติดตั้งไปแลวนั้นจะใช Linux Disto ที่ชื่อ boot2docker บน VirtualBox ทั้งใน Mac และ Windows แตตัว Docker ที่เปน Private Beta จะใช Alpine Linux บน xhyve ใน Mac หรือบน Hyper-V ใน Windows ซึ่งเปน Hypervisor ที่เปน Native ของแตละ OS หลักการของ Toolbox จะใช Machine Provision ไปที่ VirtualBox จากนั้นเรียก API ไปสั่งงาน (โดยใช Environment) สวน Docker for Mac/Win ไมตองใช Machine แตจะใชผาน API ไปเรียกใช Hypervisor เลย (ไมตองตั้ง Environment มันจะใชคาเริ่มตนคือ /var/tmp/docker.sock ซึ่งเปนไฟลที่ระบบปฏิบัติการตระกูล UNIX ใชติดตอกันระหวางโปรเซสลักษณะคลาย TCP/IP สวนตัว Docker for Win จะคุยผาน Named Pipe) ใครที่สนใจก็สามารถเขาไปโหลดไดที่ https://docs.docker.com/docker-for-mac/ สําหรับ Mac หรือ https://docs.docker.com/docker-for-windows/ สําหรับ Windows การทํางานหลัก ๆ ก็ยังเหมือนเดิม” ----------------------------------------------------------ขอควรรู-------------------------------------------------------------- ตัวอยางการใชงานตอจากนี้ไปจะใช Docker Toolbox ที่ติดตั้งใน Mac OS X เปนหลัก
14.
และการใชงานคําสั่งจะไมไดลงรายละเอียดการตั้งคายิบยอย แตทานสามารถหาเอกสารอานเพิ่มหรือสั่ง $ docker --help เพื่อดูการตั้งคา
หรือ $ docker คําสั่งยอย --help เพื่อดูการใชงานได ---------------------------------------------------------------------------------------------------------------------------------- “เอาหละทีนี้เรามาเริ่มใชงานกันเลย เปด Docker Quickstart Terminal ขึ้นมา จากนั้นตัว App จะสั่ง Machine ให Provision โดยใช Driver ของ VirtualBox ขึ้นมา Provision ให ซึ่งกระบวนการคราว ๆ ก็มี 1) เริ่มกระบวนการสรางเครื่อง (ปกติชื่อวา default) 2) กอปไฟล boot2docker.img ซึ่งเปน Linux Disto พิเศษที่ Docker ทํามาเขาไปขางใน VM” 3) สรางตัว VM ใน VirtualBox 4) สรางคีย SSH เอาไวใชเครื่องแบบไมตองใสรหัสผาน มันจะเอาคียไปถอดรหัสกันเอง 5) สตารท VM จากนั้นเอาคียไปวางใหถูกที่ถูกทาง ซึ่งกระบวนการที่วาจะทําแครอบแรกที่ Provision เทานั้น ใชเวลาพอสมควรแตถาเห็นวาฬเหมือนในรูปก็เปนอันใชได (รอบตอไปก็เปดแลวโซโลไดเลย)
15.
ลองเช็ค Environment ดู DOCKER_HOST
จะเห็นวามันเซ็ตชี้ไปที่ IP : 192.168.99.100 ซึ่งเปน IP ของ VM ที่ลง boot2docker ใชพอรต 2376 ซึ่งเปนซีเคียวพอรตของ Docker Engine (ถาใชพอรต 2375 แสดงวาไมใชโหมดซีเคียวเดอ) DOCKER_MACHINE_NAME ชื่อโฮสของ VM ชื่อ default (โฮสกับ VM ใชชื่อเดียวกัน) DOCKER_TLS_VERIFY ใชโหมดซีเคียว DOCKER_CERT_PATH ที่เก็บใบรับรอง (ตอนที่ Machine มันสรางคีย SSH จะไดใบรับรองออกมาดวย)” “แลว Driver ที่ใชใน Machine นี่คืออะไรหรอทานอาจารย” อาโปถามขึ้นหลังจากที่เงียบฟงอยูนาน “ใน Machine นั้น Driver คือตัวที่บอกวามันจะมีกลไกการ Provision อยางไร แตละ Driver ก็มีความแตกตางกันออกไป เชน DigitalOcean Driver ของมันก็จะบอกวามันตองไปจะเรียก API
16.
ไปที่ไหนเพื่อสรางเครื่องใน DigitalOcean ถาจะระบุที่ตั้งของโหนดที่จะเปดตองทําอยางไร,
Amazon EC2 ก็คลายกันนะ, สวนพวกที่เปน VM หนะหรอ อืมม~ม ถาเปน VirtualBox มันก็จะมีมีบอกวารันคอมมานยังไง กําหนดพารามิเตอรยังไง ถาจะเอา RAM เทาไหร ประมาณนี้ เดี๋ยวมีเวลาจะเลาใหฟงนะ” “แตตอนนี้เจาลอง Whalesay ซึ่งเปนเบสิกของ Docker คลายๆ Hello, world ของการเขียนโปรแกรมกอน สั่ง $ docker run docker/whalesay cowsay "Hi,I'm user" เมื่อเราสั่งคําสั่งไปแลว Docker Engine จะไปดึง (Pull) Image ซึ่งเปนขนมชั้น (จะเห็นวามันโหลดมาเปน Layer ๆ จาก Registry ซึ่ง Registry เองก็มี 2 สวนคือ Public คือ https://hub.docker.com สวนนี้เอาไวเก็บ Official Image หรือ Image ที่ผูใชเปดสาธารณะ อีกสวนคือ Private เปน Registry ที่เอาไวเก็บ Image ใน Datacenter ของผูใชเอง หรือจะใช https://hub.docker.com ก็ไดเหมือนกัน แตถาจะเก็บเกิน 1 Private Image ตองจายเงิน สวนนี้จะเห็นเฉพาะผูไดรับอนุญาต เมื่อดึง Image ลงมาไดครบทุก Layer ระบบก็จะหา Digest เพื่อรับประกันวาขอมูลที่ดึงมาครบถวน sha256 เปนชื่อ Algorithms ที่ใชหา Digest จากนั้น Docker ก็จะสั่งให Container ทํางานโดยผานพารามิเตอร cowsay "Hi,I'm user" ไปให cowsay เปนชื่อโปรแกรมปกติเปนวัวพูด แตใน Image นี้แกใหเปนวาฬพูด "Hi,I'm user" เปนพารามิเตอรของ cowsay อีกทีบอกวาใหวาฬพูดวา "Hi,I'm user" ถาเห็นวาฬพูดคํานั้นออกมาก็เปนอันใชได”
17.
ปรมาจารยอูเกวยกลาวพรอมเสียงไอ คอก แคก
“กระบวนทาที่ 1 คงตองหยุดไวเทานี้เสียกอน” เชื้อเพลิง ออกซิเจน และความรอนเปนเหตุใหเกิดไฟ ขาพเจาและแมใคร ๆ มิอาจสั่งใหไฟนั้นกอติดได การอาน การฟง และคิดวิเคราะหเปนเหตุของความรู ขาพเจาและแมใคร ๆ มิอาจสั่งใหความรูนั้นกอเกิดได ทั้งไฟและความรูเกิดจากเหตุของมัน ไมไดเกิดจากพระเจาอยากใหเปน - เซอร จอหน ดราวนตัน - กระบวนทาที่ 2 : ครอบครอง Dockerfile แดดวันนี้รอนเกินที่จะจิบกาแฟหรือเลนกอกองทราย เด็ก ๆ ในสํานักนี้ลวนมีหนาที่แตกตางกันไป บางเปนเบ บางเปนใบ บางเปนพี่ บางเปนนอง ทุกคนมุงหวังจะฝกวรยุทธเพื่อเอาไวชวยเหลือบานเมืองตน แตไมใชทุกคนที่ประสบความสําเร็จแตทุกคนก็ไดวิชาติดเนื้อติดตัวกันไปพอไดใชรักษาชีวิตเปนครั้งคราว “อาโป เก็บของวันนี้ขาจะพาเจาเขาเมือง” ปรมาจารยอูเกวยกลาวพลางหันไปซุปซิปกับปรมาจารยชิฟู “ไดเลยครับทานอาจารย” อาโปรับคําพลันเก็บของลงยามสะพายหลัง เวลาบายแก ๆ ของวัน แมจะไมเหมาะนักกับการเดินทางแตก็เปนเวลาที่ถูกกําหนดไวจากอูเกวย แสดงวามันตองเปนธุรสําคัญแน ๆ ถึงตองเดินทางกันในเวลานี้ “วันนี้ขาจะสอนเจาเรื่อง Dockerfile” อูเกวยเอยขึ้นหลังจากที่เราเดินทางออกจากสํานักไดสัก 15 ลี้แลว อาโปสงกระบอกไมใผบรรจุนํ้าใหอูเกวยที่นั่งพักไดดื่ม หลังจากดื่มนํ้าสองอึกใหญ ๆ ไปแลวอาโปก็หยิบมาดื่มบาง พรอม ๆ กับตั้งใจฟง “การจะสราง Docker Image มานั้นสามารถไดจาก 2 ทาง ทางแรกคือสรางโดยการคอมมิท Container จากคําสั่ง $ docker commit วิธีนี้ประมาจารยหลายทานไมชอบพอนักเพราะทานเห็นวา Track ดูรายการคําสั่งอะไรบางก็ลําบาก ไมมีชั้นมีตอน ตางจากการสรางจากสั่ง $ docker build จาก Dockerfile
18.
ที่เปนขั้นตอน แกงาย สามารถเก็บไวใน
Version Control เชนพวก Git ไดดีกวาการเก็บไบนารี่ของ Docker Image ทั้งกอน บางทานก็วาใชมันทั้งคูนั่นแหละ” “เอา เดี๋ยวทําทั้งสองวิธีใหดูกอนแลวเราคอยมาลงลึกกับ Dockerfile ● Docker Commit จะใชกรณีที่มี Container อยูแลว แลวตองการทําให Container นั้นกลายเปนพื้นฐานใหกับ Container ตัวอื่นหรือจิวางาย ๆ ก็คือ Image ใหตัวอื่นเอาไปใชนั้นเอง เอาหละสมมุติวามี Image ของ Busybox (Linux Distro ไซสเล็กขนาดไมกี่เม็ก) ที่ดึงลงมาจาก Docker Hub อยู (Image มีชั้น 8ddc19f16526 อยูชั้นเดียวแบบนี้ Base Image ตัวจริงเสียงจริงแนนอน) สั่งใหรัน ดูสถานะหนอยวารันไดยัง เขาไปใช Shell ของ Container ลองสรางไฟลขึ้นมาสักไฟลหนึ่ง แลวลิสตดู จากนั้นก็ออกจาก Shell จากนั้นจะ Commit ใหเปน Image ตัวใหม ลองลิสต Images ดูวาได Image ออกมาจริง ๆ ไหม ก็จะเห็นวามี Image ตามชื่อที่ใหเรากําหนดโผลขึ้นมา
19.
● Docker Build จะสั่งคําสั่งนี้ไดเราก็ตองมี Dockerfile
ซะกอน วิธีการที่ทําใหดูนี้จะเอาไฟลยัดเขาไปในตัว Image ดวย เอาหละเมื่อไฟลพรอมแลวก็จะสั่ง Build ถาสังเกตมันจะมีรายการคําสั่งที่อยูใน Dockerfile โชวขึ้นมาเปน Step ๆ และระหวางทางมันก็จะมีการสราง Intermediate Container ขึ้นมาแลวก็ลบทิ้งไป เนื่องจากบางคําสั่งตองการทํางานใน Container เชนพวก RUN apt-get update อะไรทํานองนั้นไง โอเค เสร็จแลวลองลิสตดูวามี Image ชื่อ busybox_hello โผลมาหรือเปลา (ใชเครื่องหมาย Dash - ในนี้ไมไดนะ) สั่ง Run Container ดูวามันจะทํางานตาม Script ที่เราเขียนไวหรือเปลา เอาหละเก็บเราจะเดินทางตอกันแลว ไวจะเลารายละเอียดใหฟงตอนที่เรากําลังเดินทางกันดีกวา เดียวจะสายเกินไป” ปรมาจารยอูเกวยเก็บขาวของเดินนําหนาออกไป …. เดินทางออกมาไดสักพักอูเกวยก็พูดขึ้นเพื่อทําลายความเงียบ “Dockerfile เจาก็ไดรูวิธีทําไปแลว ทีนี้จะไดมาลงรายละเอียดกันซะที เอาเปนวาเริ่มเรียนรูคําสั่งที่ใชใน Dockerfile กันกอน คําสั่ง คําอธิบาย
20.
FROM เปนคําสั่งที่ใชบอกถึง Image
ตั้งตนที่จะเอามาใชงานดวยลักษณะการของ Docker Image คือจะมี Image ฐานของมันซึ่งจะเปน Image ตัวไหนก็ไดแลวก็มีลักษณะขนมชั้นที่เพิ่มไปเรื่อย ๆ อยางถาอยากได Ubuntu 14.04 แลวจะสั่งติดตั้ง Nginx ฐานของเราก็คือ Ubuntu 14.04 แลวเราก็จะใชคําสั่งติดตั้ง Nginx ทีหลัง เนอ~อ แลวก็ FROM นี่จะเปนคําสั่งเริ่มตนของทุก Dockerfile (ไมตองทอง ไมออกสอบ) วิธีใช FROM [ชื่อ Image ไหนก็ได] ตัวอยาง FROM Ubuntu:14.04 คําแนะนํา ควรใชกับ Image ที่มีขนาดเล็ก หากตองการ Full Distribution ที่มีของทุกอยางใหครบควรใช Image ของ Debian นะจะ ๆ MAINTAINER คําสั่งนี้เอาไวบอกวาใครเปนคนสราง Image นี้ขึ้นมา เวลาดาจะไดดาถูกตัว (วึ่งเวลาจะทําอะไรเกรียน ๆ เราก็จะใสชื่อเพื่อนลงไป) วิธีใช MAINTAINER [ชื่อคนสราง] “ใส Email ดวยก็ได” ตัวอยาง MAINTAINER AorJoa “
[email protected]
” คําแนะนํา การกําหนดคานี้จะไมมีผลกับกระบวนการ Build Image (ยกเวนใสชื่อ เจี๊ยบ เลียบดวน ลงไป เครื่องทานอาจจะพังได และทางเราปฏิเสธความรับผิดชอบในทุกกรณี) RUN ใชสําหรับทํางานคําสั่งกับ Container อะ อยาเพิ่งงงนะ จําไดไมเรื่อง Intermediate Container หนะมันก็คือ Container ที่ถูกสรางขึ้นมาระหวางการ Build แลวมันก็ลบทิ้งไง อธิบายละเอียดอีกหนอยก็คือคําสั่ง Docker Build มันไปสั่งใหสราง Container ขึ้นมาใชจาก Image ที่กําหนดไวในคําสั่ง FROM แลวเอาคําสั่งที่อยูใน RUN ไปรันใน Contianer นั้น เมื่อรันเสร็จมันก็จะ Commit เก็บไวใชในคําสั่งตอ ๆ ไปของ Dockerfile วิธีใช RUN คําสั่ง <======== แบบ shell RUN [คําสั่ง] <======== แบบ exec ตัวอยาง RUN apt-get install -y nginx
21.
คําแนะนํา หลีกเลี่ยงคําสั่งที่ตองมีการโตตอบกับผูใชงาน ถาจะใช apt-get
install ให update กอนนะ และถามีหลายบรรทัดใหใชเครื่องหมาย คั่น เชน RUN apt-get update && apt-get install -y nginx CMD อาการของคําสั่งนี้จะคลายกับ RUN แตวาการทํางานคําสั่งนี้จะเกิดขึ้นตอนที่สั่งให Container เริ่มทํางาน สวนคําสั่ง RUN จะทํางานตอนที่สราง Image อยางถาสั่ง CMD echo "I'm handsome." อยางนี้ หลังจาก Container เริ่มทํางานไมวาจะเริ่มจากคําสั่ง Run หรือ Start ก็ตาม แตเนื่องจากจุดประสงคของการสรางคําสั่งนี้มาเขาสรางมาเพื่อเปน คําสั่งเริ่มตน นั่นหมายความวามันสามารถถูก Override หรือทับคําสั่งดวยการใชคําสั่งในระดับอื่น เชน กรณีที่กําหนดใหใช echo “TEST” ใน Dockerfile แตถามีการ Override คําสั่งก็จะเปลี่ยนไปตามคําสั่งที่ Override คือเปลี่ยนเปน echo “Override” แทน วิธีใช CMD “คําสั่ง” “Parameter1” “Parameter2” <==== แบบ shell CMD [“Parameter1”,“Parameter2”] <==== แบบ Default Parameter CMD [“คําสั่ง”,“Parameter1”,“Parameter2”] <=== แบบ exec *แนะนํา ตัวอยาง CMD [“/usr/bin/curl”,”www.google.com”] คําแนะนํา (1) ถามีคําสั่ง CMD หลายอันมันจะทําแคอันสุดทาย (2) มีขอแตกตางระหวางเครื่องหมาย ‘ กับ “ ขอแนะนําใหใช “ (3) ควรจะใช Full Path กับคําสั่งเชน /usr/bin/curl (4) ตัวคําสั่งที่ Override มีความสําคัญกวา ดังนั้นถามีการ Override มันจะทําเฉพาะ Override ENTRYPOINT
22.
Download