Posts

Docker ใช้งาน Dockerfile เพื่อสร้าง Docker Image ของเราเอง

Image
Dockerfile คือการสร้าง Docker Image ในแบบของเราเอง หรือก็คือการ custom docker image นั่นแหละ ถึงแม้ว่าเราจะใช้ CLI เข้า container ได้เลย แต่จะดีกว่าไหมถ้าเราทำเป็น Docker Image ที่พร้อมใช้งาน ไม่ต้องมาคอยคิดว่าต้องลงอะไรบ้าง

Custom Image ทำไม ?          การสร้าง container จำเป็นต้องใช้ parent image เสมอ ถึงแม้ว่า Docker Hub จะมีให้เราเลือกโหลดมากมาย แต่ตัวไหนล่ะที่ตรงใจเรา
ตัวอย่าง Dockerfile          Dockerfile เป็นไฟล์ที่มี syntax เฉพาะของ Docker ลักษณะจะปะปนกับ shell script เพื่อเป็นชุดคำสั่งแรกเมื่อมีการสร้าง container นั่นเอง

คำสั่งใกล้เคียง docker run -p 8080:8080 jenkins


การใช้งาน Dockerfile          ขั้นตอนการสร้าง container จากเดิมที่เป็นแค่การดึง image มาใช้ คราวนี้เราจะสามารถเพิ่มเติมคำสั่งบางอย่างเข้าไป สิ่งที่ parent image เตรียมมาก็สามารถใช้ได้ และเพิ่มเติมสิ่งที่เราเพิ่มไปได้อีก
มาลอง Custom Docker Image กันFROM jenkins LABEL maintainer="LordGift" USER root RUN apt-get update && apt-get install -y android-sdk ENV JENKINS_HOME /var/jenkins_home ENV …

Docker กับการสร้าง environment แบบ All-in-One (Docker Compose)

Image
Docker Compose เป็นสิ่งที่จะมายกเครื่อง Docker มากยิ่งขึ้น จากเดิม (Docker คืออะไร ?) เราได้ทดลองใช้ Docker ผ่าน CLI กันไป แต่การจะเอา container เดิมมาใช้ ก็จะมีความลำบากเล็กๆ และยิ่งถ้ามี container หลายตัวก็ยิ่งวุ่นวายไปใหญ่

assignment docker-compose.yml
         ไฟล์นี้คือหัวใจสำคัญของ docker compose เราจะต้องเขียน config ต่างๆ เข้าไปในรูปแบบ YAML ซึ่งจริงๆมันก็คือการย้ายการเขียน CLI ทีละคำสั่ง ให้อยู่ในรูปแบบไฟล์ที่สามารถอ่านได้ง่ายขึ้น ลดการเขียนคำสั่งไปได้เยอะ (ลด หมายความว่าก็ยังต้องเขียนบ้างนะ sentiment_very_satisfied )
docker-compose.yml
คำสั่ง Docker Composeสร้างและ start container ตามไฟล์ docker-compose.ymldocker-compose up
ดู container ที่เกี่ยวข้อง
docker-compose ps Name Command State Ports --------------------------------------------------------------------- my-ci_jenkins_1 /bin/tini -- /usr/local/bi ... Exit 255 my-ci_sonarqube_1 ./bin/run.sh Exit 143          * docker compose จะใช้ชื่อ f…

Docker คืออะไร ? แนะนำวิธีใช้งานเบื้องต้น

Image
Docker คือเครื่องมือ virtualization ที่มีความยืดหยุ่นสูง, lightweight และง่ายต่อการใช้งาน เหมาะกับ developer ที่ต้องการสร้าง environment เสมือนจริง ปัจจุบัน Docker ได้รับความนิยมสูงมาก ผู้ให้บริการ Cloud หลายเจ้าก็สามารถนำ Docker ไปใช้ได้ โลโก้ปลาวาฬแบกตู้คอนเทนเนอร์ ก็หมายถึง Docker ที่ขับเคลื่อน environment ต่างๆ ที่แพ็คสำเร็จไว้แล้วนั่นเอง

Container          Docker Container หมายถึงเครื่องเสมือน ซึ่งมีความใกล้เคียง Virtual Machine (VM) แบบที่เราคุ้นเคยกันอยู่มาก แต่ docker ถูกออกแบบมาให้จำลอง environment เฉพาะที่เราสนใจเท่านั้น เช่น Application Server, Build Tools, Website,... หรือจะเป็นการรวมกันหลาย ๆ อย่างก็ทำได้ โดย docker นั้นจะใช้ linux เป็นฐานในการสร้าง environment ต่างๆ ดังนั้นเราจำเป็นต้องอาศัย shell script เป็นหลัก

Image          Docker Image เป็น template ของ container คือจะประกอบด้วยชุดคำสั่งสำหรับสร้าง environment เริ่มต้น การจะสร้าง container ได้นั้น จำเป็นต้องดึง image มารัน ซึ่งมือใหม่อย่างเราสามารถไปเลือกดึง image จาก image repository มาลองเล่นก่อนได้ เมื่อมากฝีมือแ…

[Java] JShell เครื่องมือใหม่ที่มาพร้อมกับ Java 9+

Image
JShell คืออะไร ? JShell ถือกำเนิดมาพร้อมกับ Java 9 (JDK 9) เป็นเครื่องมือใหม่สำหรับ Java Developer ที่ตามหลังชาวบ้านมาอีกตัวหนึ่ง JShell เป็นเครื่องมือที่ช่วยให้เราสามารถทดลองเขียน code แบบง่ายๆ ไม่ต้องมาสร้าง file / project ให้วุ่นวาย (แอบเล่าให้ฟังว่าเมื่อก่อนผมใช้เว็บเขียน java online เพื่อทำอะไรแบบนี้ เหอๆ)

          REPL (Read-Eval-Print-Loop) เป็นคำนิยามอย่างเป็นทางการของ JShell หรือจะพูดให้ง่ายก็คือ การเขียนโปรแกรมแบบมี interaction ได้ทันที ถ้ายังไม่เข้าใจอีก ไปลองเล่นกันเลยดีกว่า


เริ่มต้นเขียนโปรแกรมบน JShell ติดตั้ง JDK (version 9 ขึ้นไป)
* JShell จะอยู่ใน JAVA_HOME/bin ถ้าอยากใช้ง่ายๆ ก็เพิ่มทำ PATH เข้า environment varible ไว้เลย

เรียกใช้ jshell โดยรันคำสั่ง jshell
$ jshell | Welcome to JShell -- Version 11 | For an introduction type: /help intro jshell>
เมื่อเข้าสู่ jshell แล้ว เราก็สามารถเริ่มพิมพ์ code java ได้เลย
jshell> System.out.println("Hello World"); Hello World
หรือจะเขียน method
jshell> String say(String msg) { ...> System.out.println(…

บทวิเคราะห์ Lambda Expression ปลอมของ Java เปรียบเทียบกับภาษา Kotlin

ตั้งแต่ Java 8 ถูกปล่อยออกมา จนถึงวันนี้ Java 9, Java 10 ก็ออกกันแบบรัวๆ และยังมี Java 11 ที่บอกว่าจะเป็น LTS (Long-Term Support) มาจ่ออยู่อีก ถึงแม้ว่า Java จะเป็นภาษาอันดับ 1 (*อ้างอิงข้อมูลด้านล่าง) แต่ปัจจุบันภาษาใหม่ ๆ ก็ได้รับความนิยมอย่างรวดเร็ว ทำให้ Java ต้องพยายามปรับตัว และทำตัวลู่เข้าสู่ Functional Language อย่างที่หลายๆ ภาษาเป็น

          Lambda Expression เป็นหนึ่งใน syntax ที่ได้รับความนิยมสูง แต่สำหรับ Java เพิ่งมาใน Java 8 และสร้างความสับสนให้เหล่า Java Developer เจ้าเก่าพอสมควร ซึ่งผมเองก็เคยเขียนบล็อกไว้บ้าง (เขียน Lambda และใช้ syntax ใหม่ ๆทำความเข้าใจให้มากขึ้นกับ Lambda Expression)

Higher-Order Function           เป็นคุณสมบัติอย่างหนึ่งของ funtional language คือ ฟังก์ชันที่สามารถรับ parameter เป็นฟังก์ชันได้ หรือถ้าจะเรียกให้เข้าใจง่ายขึ้นมันก็คือ "Lambda Receiver" เพราะเวลาเรียกฟังก์ชันเพื่อใช้งาน เราสามารถส่ง lambda expression มาได้นั่นเอง จะเห็นว่าใน Java 8 ถึง Java 10 นั้นก็ยังไม่มี syntax ส่วนนี้โผล่มาให้ได้เขียนกัน
แล้วรับ parameter เ…

[Java] Spring Framework กับความสามารถ Dependency Injection

Image
"Spring" ประกอบด้วย Spring Projects มากมายให้เราได้เลือกใช้งาน ซึ่งการที่จะพูดว่า "ใช้ Spring" คงจะแคบเกินไปแล้ว ซึ่งในส่วนของโพสนี้ก็จะเล่าถึง Spring Framework ที่เกี่ยวข้องในการทำ Web Application แบบง่ายๆ กันครับ

          เราสามารถเริ่มต้น Web Application Project ที่ใช้ Spring Boot ได้ง่ายๆ ถ้ายังไม่รู้จักแนะนำให้ไปทำความรู้จักกันก่อนครับ >> รู้จัก Spring Boot ฉบับมือใหม่
Dependency Injection           สิ่งที่ยิ่งใหญ่ที่สุดของ Spring คือเรื่องความสามารถในการทำ dependency injection (DI) ซึ่ง DI นี้เองที่จะสามารถเชื่อมโยง spring framework ต่างๆ เข้าด้วยกัน และมีประโยชน์อย่างมากในการออกแบบ architecture ของ project
@AutowiredAutowired เป็น annotation ที่ทำให้เราสามารถ 'Inject' object ขึ้นมาใช้งานได้ โดย object ดังกล่าวจะต้องถูกประกาศไว้ก่อนหน้า และเป็น object ที่มีความเป็น Spring หรือมีชื่ออย่างเป็นทางการว่า "Spring Bean"

Spring Bean คือ class ที่ถูกเพิ่มความสามารถเข้าไป โดยมีคุณสมบัติรองรับ DI ซึ่งมีวิธีที่จะได้มาซึ่งความสามารถนี้มี 3 วิธี คือ

[Java] รู้จัก Spring Boot ฉบับมือใหม่

Image
Spring Boot หน้าที่หลักๆ คือจัดเตรียมโปรเจคให้เรามี library ที่เกี่ยวข้องอย่างครบครัน และมี embedded application server ติดมาให้ เป็นประโยชน์ในการ test มากๆๆ

Spring Initializr เหมาะสำหรับผู้เริ่มต้นโปรเจค Spring Boot เป็นเว็บไซต์ที่จะช่วยสร้างโปรเจคอย่างง่ายขึ้นมา โดยจะต้อง download มาเป็น *.zip หรือในบาง editor ก็สามารถสร้างโปรเจคในลักษณะเดียวกันได้เลย(ไม่ต้องผ่านเว็บก็ได้) ในเคสนี้ผมลองสร้างผ่านเว็บครับ เอาแบบ clean สุดๆ ไม่ได้ใส่อะไรเพิ่มเลยนะครับ


โหลดมาแล้วจะเห็นว่าเป็น maven project ตามที่ได้เลือกไว้ และนี่คือสิ่งที่ maven dependency ดูดมาให้เรา
mvn dependency:tree[INFO] --- maven-dependency-plugin:3.0.1:tree (default-cli) @ SpringBoot2Tutorial --- [INFO] th.in.lordgift:SpringBoot2Tutorial:jar:0.0.1-SNAPSHOT [INFO] +- org.springframework.boot:spring-boot-starter:jar:2.0.0.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot:jar:2.0.0.RELEASE:compile [INFO] | | \- org.springframework:spring-context:jar:5.0.4.RELEASE:compile [INFO] | | +- org.springframe…

Facebook Comment