เตาะแตะไปกับ Docker ตอนที่ 1 Containers (Build, Ship and Run)

ผมอ่าน Get Started จาก docs.docker.com แล้วคิดว่าพอเข้าใจว่า docker ใช้งานอย่างไรมากขึ้นในแง่ความหมายของ Docker – Build, Ship, and Run Any App, Anywhere ที่เป็นจุดเด่น หลังจากอ่านจบที่ผมเขียนในตอนที่ 1 นี้ ก็น่าจะเข้าใจคำว่า Container และในตอนถัดไปก็จะนั้นจะเล่าถึงความหมายของคำว่า Service และ Stack ตามลำดับ ในการทดสอบเพื่อเขียนบทความ ผมได้ติดตั้ง docker บน ubuntu server 64 bit Xenial 16.04 (LTS) และรุ่นของ Docker ที่ใช้คือ Docker version 17.06.0-ce, build 02c1d87 ซึ่ง Docker Software มี 2 ชนิด คือ Community Edition (CE) และ Enterprise Edition (EE) ให้เลือกใช้ [Installation] วิธีติดตั้ง Docker บน ubuntu นั้นจะมีคำแนะนำสำหรับรุ่น docker-ce คือเริ่มต้นจากการ SET UP THE REPOSITORY เสร็จแล้วจึง INSTALL DOCKER CE อย่างคร่าว ๆ ก็ใช้คำสั่งดังนี้ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add – sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” sudo apt-get update sudo apt-get install -y docker-ce วิธีทำให้ไม่ต้องใส่คำว่า sudo หน้าคำสั่ง Docker ทุกครั้ง ดังนี้ sudo usermod -aG docker ${USER} su – ${USER} id exit logout แล้ว login กลับเข้ามาใหม่ พิมพ์คำสั่ง id จะเห็นว่าอยู่ใน group docker ด้วยแล้ว ต่อไป Verify ว่า Docker CE ถูกติดตั้งสำเร็จโดยการรัน hello-world image docker run hello-world ตรวจสอบเวอร์ชั่น docker –version [Containers] ตอนนี้ก็ได้เวลาเตาะแตะแบบ docker เราจะเริ่มกันที่ส่วนล่างสุดของ hierarchy ของการสร้าง app 3 ส่วน นั่นคือ container Stack Services Container (เรากำลังอยู่ที่นี่) การสร้าง app เราจะทำ container ขึ้นมาจากสิ่งที่เรียกว่า Dockerfile คือไฟล์ที่เขียนข้อกำหนดว่า container จะมีสภาพแวดล้อมเป็นอะไรบ้าง โดยต้องเริ่มต้นจากสร้าง directory ว่าง ๆ บน host (จะเรียก ubuntu server ที่ติดตั้ง docker ไว้ว่า host) แล้วสร้างไฟล์ชื่อ Dockerfile ด้วยเอดิเตอร์ที่ถนัด เช่น vi หรือ nano เป็นต้น และถ้าภายในไฟล์นี้อ้างถึงไฟล์อื่น ๆ ก็สร้างไว้ให้ครบด้วยนะ ผมจะใช้ตัวอย่างจาก docs.docker.com ครับ mkdir myhello cd myhello

Read More »

วิธีสร้าง Docker Swarm

หลายคนคงจะได้ใช้งาน Docker มาแล้ว แต่อาจจะลองใช้งานบน 1 Physical Server กล่าวคือ สร้างหลายๆ container อยู่บนเครื่องคอมพิวเตอร์เครื่องเดียว >> ติดตั้ง docker 17.06.0 CE บน Ubuntu Docker Swarm เป็นเครื่องมือที่ติดมากับ Docker รุ่นตั้งแต่ 1.12 เป็นต้นมา (ปัจจุบัน ชื่อรุ่นคือ 17.06.0 CE) ก่อนอื่น มาตรวจสอบว่า เรากำลังใช้ Docker รุ่นไหนด้วยคำสั่ง docker version Docker Swarm ประกอบไปด้วย Master Node และ Worker Node โดยใน 1 Swarm สามารถมีได้ หลาย Master และ หลาย Worker ในตัวอย่างนี้ จะแสดงการเชื่อมต่อ Ubuntu 16.04 ทั้งหมด 4 เครื่อง เข้าไปใน 1 Swarm (ทุกเครื่องสามารถเชื่อมต่อถึงกันได้ และต่อ Internet ได้ และติดตั้ง Docker ไว้เรียบร้อยแล้ว) [Master Node] ใช้คำสั่งต่อไปนี้ เพื่อสร้าง Swarm Master Node บนเครื่องนี้ docker swarm init จะได้ผลดังภาพ ให้ Copy คำสั่ง ตั้งแต่ “docker swarm join –token …..” เป็นต้นไป เพื่อเอาไปสั่งให้ Work Node เข้ามา Join ใน Swarm [Worker Node] นำคำสั่งจาก Master Node ข้างต้น มาใช้ จากนั้น ทำเช่นเดียวกันนี้ กับ Worker Node ที่เหลือ (และหากในอนาคตต้องการเพิ่ม Worker Node อีก ก็เอาคำสั่งนี้ไปใช้) ตัวอย่างการนำไปใช้ (หากสนใจ ลอง git clone https://github.com/nagarindkx/elk ไปดูได้) สร้าง “Stack File” ซึ่งจะคล้ายๆกับการสร้าง Compose File แต่มีรายละเอียดต่างกันเล็กน้อย ใช้คำสั่ง ต่อไปนี้ เพื่อสร้าง Stack ของ Software ให้กระจายไปใน Worker Nodes docker stack deploy -c $(pwd)/elk.yml k1 ผลที่ได้ วิธีดูว่า ตอนนี้มี Stack อะไรอยู่บ้าง ใช้คำสั่ง docker stack ls ผลที่ได้ วิธีดูว่า ตอนนี้มีการไปสร้าง Container ไว้ที่ใดใน Docker Swarm บ้าง ด้วยคำสั่ง (สั่งการได้บน Master Node เท่านั้น) docker service ps k1 ผลที่ได้ ต่อไป อยากจะเพิ่ม Scale ให้บาง Service ใน Stack ใช้คำสั่ง docker service scale k1_elasticsearch=4 ผลที่ได้   ในตัวอย่างนี้ จะสามารถใช้งาน Kibana ซึ่งจากภาพจะเห็นได้ว่า อยู่ที่ Node “docker04” แต่เราสามารถเรียกใช้งานได้ที่ Master Node “docker01” ได้เลย เช่น

Read More »

ติดตั้ง docker 17.06.0 CE บน Ubuntu

ล่าสุด วิธีการติดตั้ง Docker รุ่น 17.06.0 CE ซึ่งรองรับ docker-compose version 3.3 ให้ติดตั้งด้วยวิธีนี้ sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” sudo apt update sudo apt-get install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add – sudo apt-get update sudo apt-get install docker-ce

Read More »

การปรับเปลี่ยนรูปแบบการแสดงผลเส้นทางระหว่างพิกัดจุดบนแผนที่ Google Map APIs ด้วย DirectionsTravelMode

          ก่อนที่เราจะไปเริ่มเนื้อหาของบทความี้ ผู้เขียนต้องขอท้าวความเดิมตอนที่แล้วของบทความก่อน ซึ่งผู้เขียนได้พูดถึงวิธีการแสดงผลเส้นทางทางระหว่างพิกัดจุดบนแผนที่ Google Map APIs ด้วย DirectionsService ในเบื้องต้นไว้ (สามารถศึกษาเพิ่มเติมได้จากบทความ : การแสดงเส้นทางระหว่างพิกัดจุดบนแผนที่ Google Map APIs ด้วย DirectionsService ในเบื้องต้น )  สำหรับในบทความนี้ผู้เขียนจึงอยากต่อยอดการทำงาน และเพิ่มลูกเล่นให้กับการแสดงผลแผนที่ด้วยการปรับเปลี่ยนการกำหนดรูปแบบการแสดงผลของเส้นทางให้ผู้เยี่ยมชมเว็บไซต์  ซึ่งเราจะให้ผู้ใช้สามารถเลือกรูปแบบในการแสดงผลได้ว่า ต้องการดูเส้นทางในรูปแบบใดตามรูปแบบ Mode ที่ผู้ใช้เลือกมา เช่น เส้นทางเดิน ทางถนน หรือขนส่งสาธารณะ เป็นต้น โดยวิธีการดังกล่าวนี้เหมาะกับเว็บไซต์ที่มีความเกี่ยวข้องกับความต้องการที่ต้องการทราบเส้นทางในแต่ละรูปแบบ เพื่อเป็นประโยชน์ในการนำไปประยุกต์ใช้กับงานของแต่ละท่านได้ค่ะ    ตัวอย่างผลลัพธ์ที่ได้จากบทความที่แล้ว  ซึ่งจากตัวอย่างโค้ดในบทความที่แล้ว การกำหนด DirectionsTravelMode เป็น DRIVIING ซึ่งในความเป็นจริงแล้วยังมีรูปแบบอื่นๆให้เลือกใช้ด้วยกันทั้งหมด 4 รูปแบบ ดังนี้ DRIVING (Default):เป็นโหมดตั้งต้นให้หากไม่ได้มีการกำหนดไว้ ซึ่งเป็นโหมดที่แสดงเส้นทางการขับขี่ด้วยยานพาหนะ BICYCLING: เป็นโหมดสำหรับเส้นทางที่เตรียมไว้สำหรับผู้ขับขี่จักรยาน TRANSIT: เป็นโหมดสำหรับแสดงเส้นทางระบบขนส่งสาธารณะ เช่น  รถบัส รถไฟ หรือแม้แต่เครื่องบิน เป็นต้น WALKING: เป็นโหมดสำหรับแสดงเส้นทางการเดินถนน           ซึ่งผู้เขียนจะขอยกตัวอย่างในส่วนของการเลือกรูปแบบเส้นทางและผลลัพธ์ของแต่ละรูปแบบ ดังตัวอย่างโค้ดต่อไปนี้ การกำหนดรูปแบบของเส้นทางในการแสดงผลบนแผนที่ โค้ด Javascript  <script type=”text/javascript”> function initialize() { // ประกาศเรียกใช้งาน DirectionsService เพื่อการแสดงผลให้มีลักษณะเป็น Global window.directionsService = new google.maps.DirectionsService(); window.directionsDisplay = new google.maps.DirectionsRenderer(); var map; var bounds = new google.maps.LatLngBounds(); var mapOptions = { mapTypeId: ‘roadmap’ }; // แสดงผลแผนที่ในหน้าจอตาม Element ที่กำหนด map = new google.maps.Map(document.getElementById(“map_canvas”), mapOptions); map.setTilt(45); // กำหนดพิกัดจุดให้กับจุดเริ่มต้นและเส้นสุด window.markers = [ [‘Place1’, 51.501546, -0.142000], [‘Place2’, 51.512051,-0.091225] ]; // ให้แสดงผลสิ่งที่ตั้งค่าไว้ในพื้นที่แผนที่ที่กำหนด directionsDisplay.setMap(map); // กำหนดค่าเริ่มต้นของรูปแบบให้เป็นเส้นทางการเดิน (walking mode) calcRoute(); } // เป็นฟังก์ชั่นในการคำนวณเส้นทางระหว่างสองจุดพิกัดบนแผนที่และเลือกกำหนดค่า Mode ในการแสดงผล function calcRoute() { var selectedMode = document.getElementById(‘travelType’).value; var request = { origin: new google.maps.LatLng(markers[0][1], markers[0][2]), destination: new google.maps.LatLng(markers[1][1], markers[1][2]), //// //กำหนดรูปแบบการแสดงผลเส้นทางโดยเริ่มต้นให้เป็นเส้นทางการเดิน(ตามรายการแรกที่เลือก) travelMode: google.maps.TravelMode[selectedMode] }; directionsService.route(request, function(response, status) { if (status == google.maps.DirectionsStatus.OK) { directionsDisplay.setDirections(response); } }); } </script> ส่วนของการแสดงผลใน body <body>  <div id=”map_wrapper”> <div id=”map_canvas” class=”mapping”></div> </div> <div id=”travel_selector”> <p><strong>Mode of Travel: </strong> <select id=”travelType” onchange=”calcRoute();”> <option value=”WALKING”>Walking</option> <option value=”BICYCLING”>Bicycling</option> <option value=”DRIVING”>Driving</option> <option value=”TRANSIT”>Transit</option> </select></p> </div> </body> ผลลัพธ์ในแต่ละรูปแบบ แบบที่ 1 DRIVING Mode :   แบบที่ 2 BICYCLING Mode:

Read More »