เรียนรู้ Docker part 2: CentOS
CentOS คือ Linux OS ที่เน้นใช้งานระดับองค์กรและรับประกันเรื่องความ stable ในเมื่อผมเล่นเกมบน Windows OS ทำงานใช้ MacOS หนนี้จึงอยากทำความรู้จักกับ CentOS เพิ่มขึ้นเพราะอยากเอามาใช้งาน — ขอแบบเบื้องต้นก่อนแล้วกัน
ความเดิมจาก part ที่แล้ว
เปิด Kitematic แล้วค้นหา centos เลยครับ
เจอ official image แล้วก็กดปุ่ม CREATE
CentOS อยู่ในตระกูล Linux โดดเด่นในการใช้งานองค์กร — หน่วยงาน รับประกันเรื่องความเสถียรภาพ ถูกสร้างและส่งมอบแก่สาธารณะเพื่อประโยชน์ของผู้ที่ต้องโปรแกรมระบบปฏิบัติการคุณภาพระดับ Red Hat Enterprise Linux (RHEL) แบบไม่มีค่าใช้จ่ายและนำไปแจกจ่ายซ้ำได้ฟรี (เป็นอีกหนึ่งช่องทางโปรโมท RHEL)
CentOS เวอร์ชัน Desktop นั้นมี Graphical User Interface (GUI) แต่ที่ทำเป็น image นี้จะไม่มี GUI มันถูกตัดออกไปเพื่อให้ image มีขนาดเล็ก การใช้งานโปรแกรมจึงอยู่ในรูป text-based ทำได้เพียงพิมพ์คำสั่งสั่งงานระบบ
โปรแกรมที่จะใช้ติดต่อกับระบบนี้ชื่อว่า bash เมื่อรอกระทั่ง container พร้อมแล้วให้กดปุ่ม EXEC เพื่อใช้งาน bash ครับ
Bash
bash หรือ bash shell คือ Unix shell เป็นโปรแกรมที่ทำหน้าที่เป็น interface หรือส่วนติดต่อผู้ใช้ในรูปแบบ text command line ที่อยู่ระหว่างสิ่งที่เรียกว่า core หรือ Kernel ของระบบปฏิบัติการกับ application หรือโปรแกรมประยุกต์
Docker Image ใดๆที่ใช้ Linux เป็นระบบปฏิบัติการก็มักจะมีโปรแกรม shell นี้เสมอ
shell มีหลายประเภท แต่ละประเภทมีกลุ่มคำสั่งที่คล้ายหรือต่างกันขึ้นอยู่กับจุดประสงค์การใช้งานว่าถูกสร้างขึ้นเพื่อแก้ปัญหาอะไร ตารางต่อไปนี้แสดง directory ของ configure file ที่ shell นั้นรู้จักและจะเข้าไปอ่านค่าในความหมายต่างๆ
คำสั่งพื้นฐาน
cd /
ไปยัง root directory
cd /home
ไปยัง home directory
pwd
ดูว่าอยู่ที่ไหน
ls
ดู directory และ file ทั้งหมด
ls -l
ดูรายการ direcoty และ file ทั้งหมด
ls -la
ดูรายการ directory และ file ทั้งหมดรวมถึงที่ซ่อนไว้ด้วย (การซ่อนไฟล์จะใช้ . นำหน้าชื่อไฟล์)
ctrl + l
คือ clear screen (อื่นๆอาจใช้ clear
หรือ cls
)
ctrl + c
ออกจากบรรทัดคำสั่ง
cd ..
ย้อนกลับ 1 directory
mkdir <name>
สร้าง directory เช่น mkdir pros
touch <name>
สร้างไฟล์ เช่น touch data.txt
cp <src> <des>
คัดลอกไฟล์จากต้นทางไปยังปลายทาง
เช่น cp /data.txt /home/user-data.txt
หมายถึง copy ไฟล์ data.txt จาก root ไปยัง home ในชื่อใหม่ว่า user-data.txt
echo <mgs> > <file-name>
เขียนไฟล์ด้วย msg แบบเขียนทับ
เช่น echo hello i am ProS > user-data.txt
cat <file-name>
อ่านไฟล์
เช่น cat user-data.txt
echo <msg> >> <file-name>
เขียนไฟล์ด้วย msg แบบต่อจากเดิมขึ้นบรรทัดใหม่
เช่น echo I will survive. >> user-data.txt
mv <file-name> <new-file-name>
ย้ายไฟล์แบบเปลี่ยนชื่อไฟล์ได้ด้วย
เช่น mv user-data.txt data.txt
(สิ่งที่ทำคือสร้างไฟล์ใหม่แล้วลบไฟล์เก่าอัตโนมัติ)
mv <src> <des>
ย้ายไฟล์จากต้นทางไปยังปลายทาง
เช่น mv data.txt foo
เมื่อ foo เป็น folder ที่เพิ่งสร้างขึ้นมา
คำสั่งอื่นๆก็สามารถค้นหาและอ่านเพิ่มเติมได้ครับ เช่น
Vi Text Editor
อีกโปรแกรมที่น่าจะใช้บ่อยคงหนี้ไม่พ้นโปรแกรมแก้ไขข้อความชื่อ Vi ย่อมาจาก Visual แถมยังมี advanced version ออกมาด้วยชื่อ VIM ย่อมาจาก Vi Improved
เราสามารถหาโปรแกรม Vi ได้ในทุก Linux เวอร์ชันหรือดูได้ที่ cd /bin
vi <file-name>
เปิดไฟล์
เช่น vi /home/data.txt
หากไม่พบเท่ากับเขียนไฟล์ใหม่ (in memory)
เขียนและบันทึกไฟล์
ก่อนการเขียนและบันทึกไฟล์ต้องเข้าใจก่อนว่า Vi ประกอบด้วย 2 mode ได้แก่
- Command mode
- Insert mode
Command mode เราสามารถเคลื่อนย้าย cursor สามารถ cut, copy และ paste ข้อความ
Insert mode ใช้เขียนข้อความ
การเปิดไฟล์ที่มีอยู่แล้วหรือสร้างไฟล์ใหม่จะอยู่ใน Command mode หากต้องการเขียนข้อความลงไฟล์ให้สลับจาก Command mode เป็น Insert mode ในทางตรงข้ามหากอยู่ใน Insert mode แล้วต้องการบันทึกไฟล์ให้สลับเป็น Command mode แทน
Command mode เป็น Insert mode ให้กด i หนึ่งครั้ง
Insert mode เป็น Command mode ให้กด ESC หนึ่งครั้ง
คำสั่งที่น่าสนใจของ Command mode
:q
ปิดไฟล์ (q คือ quit)
:q!
ปิดไฟล์โดยไม่ต้องบันทึก
:w
บันทึกไฟล์ (w คือ write)
:wq
บันทึกแล้วปิดไฟล์
:wq!
บังคับบันทึกและปิดไฟล์
i
สลับเป็น Insert mode และจะเขียนข้อความ ณ cursor
a
สลับเป็น Insert mode และจะเขียนข้อความหลัง cursor
A
สลับเป็น Insert mode และย้าย cursor ไปท้ายข้อความ
u
คือ undo ยกเลิกการเปลี่ยนแปลงล่าสุด
ctrl + r
คือ redo ที่ถูก undo ล่าสุด
v
คือ visual เพื่อเลือกอักษร (selected) ใช้ลูกศร (arrow keys) ช่วยเลือกได้
V
คือ visual line เลือกข้อความทั้งบรรทัด
d
คือ cut อักษรหรือข้อความที่ได้เลือกไว้
y
คือ copy อักษรหรือข้อความที่ได้เลือกไว้
yy
คือ copy ข้อความ ณ บรรทัดนั้นทั้งหมด
p
คือ paste วางข้อความที่ได้ cut หรือ copy ณ บรรทัดถัดไป
dd
ลบข้อความและบรรทัด ณ cursor
<number>dd
เช่น 3dd
หรือ 4dd
ลบข้อความและบรรทัดตามจำนวนที่ระบุ
D
ลบเฉพาะข้อความแต่ไม่ลบบรรทัด ณ cursor
/<text>
ค้นหาข้อความภายในไฟล์ เช่น /hello
n
ใช้กับฟังก์ชันค้นหา เลื่อน cursor ไปยังข้อความถัดไป
N
ใช้กับฟังก์ชันค้นหา เลื่อน cursor ไปยังข้อความก่อนหน้า
ยังมีอีกมากแต่นี่คือที่ผมใช้บ่อย
คำสั่งที่น่าสนใจของ Insert mode
ESC
สลับเป็น Command mode
ไม่รู้ว่ามีอีกไหม แต่ผมใช้เท่านี้ที่ mode นี้ครับ
YUM
ผมเป็นคนหนึ่งที่ติดการใช้งาน Windows แบบ user บ้านๆ จะหาเกมหรือโปรแกรมก็จะมองหาไฟล์ .exe ไม่ก็ .msi มาติดตั้ง ตั้งแต่ใช้ MacOS จึงได้รู้จักกับโปรแกรมจำพวก package management เช่น Homebrew เวลาใช้งานก็จะสั่ง brew install ตามด้วยชื่อโปรแกรมที่ต้องการ มันง่ายและสะดวกมาก อย่างเดียวกันสำหรับ Linux โปรแกรมจำพวก package management เลื่องชื่อก็เช่น yum, apt-get
yum ย่อมาจาก Yellowdog Updater Modified มันช่วยให้เราสามารถ install, update และ remove โปรแกรมที่ต้องการได้
yum --version
ขอดูเวอร์ชันปัจจุบัน
yum update
จะปรับปรุงเวอร์ชัน yum นี้ให้ล่าสุดเสมอ
yum -y update
เหมือนกับ yum update
แต่ยอมรับข้อตกลง (ทางกฏหมาย) อัตโนมัติ
yum list available
แสดงรายการโปรแกรมทั้งหมดที่รู้จัก
yum list available java\*
แสดงเฉพาะรายการโปรแกรม java เช่น JRE และ JDK
ตัวอย่าง
yum install java-1.8.0-openjdk
มันก็จะหา JRE 1.8 ของ Open JDK มาติดตั้งให้
คำสั่งอื่นๆของ yum ที่นี่
Hello World ด้วยภาษาจาวา
ภาษาจาวาต้องใช้โปรแกรมชื่อ javac มาแปลคำสั่ง .java ให้กลายเป็น .class และทำงาน .class ด้วยโปรแกรมชื่อ java ดังนั้นต้องบอกระบบปฏิบัติการให้ทราบก่อนว่าจะหา javac และ java ได้ที่ไหน เรียกว่าการ set path
Install JRE 1.8
yum install java-1.8.0-openjdk
ติดตั้ง JRE 1.8 ของ Open JDK
Set JRE path to .bash_profile
update-alternatives --config java
จะทำให้รู้ path ของ JRE ที่ได้ติดตั้งไปซึ่งด้านในจะมี bin folder ในนี้มีโปรแกรมชื่อ java ดังภาพด้านล่าง
กลับไปที่ root cd /
จากนั้นสร้างไฟล์ชื่อ .bash_profile
ด้วย Vi ไฟล์นี้เมื่อสร้างแล้วจะมองไม่เห็น (ถูกซ่อนเพราะชื่อนำหน้าด้วยเครื่องหมาย dot) จึงต้องค้นหาด้วย ls -a
หรือ ls -la
เพิ่มตัวแปรชื่อ JAVA_HOME ไว้ภายใน .bash_profile
export JAVA_HOME=<path-of-jre>
เช่น
Reload .bash_profile
เพื่อให้ระบบปฏิบัติการอ่านไฟล์นี้
source /.bash_profile
จากนั้นตรวจสอบด้วย
echo $JAVA_HOME
ผล
Install JDK 1.8
yum install java-1.8.0-openjdk-devel
ผล
Set JDK path to .bash_profile
update-alternatives --config javac
ผล
เปิดไฟล์ .bash_profile ด้วย Vi จากนั้นเพิ่ม path ของ javac ลงไป
หนึ่งตัวแปรมีได้หลายค่า ให้คั่นแต่ละค่าด้วยเครื่องหมาย :
โหลดไฟล์ .bash_profile อีกครั้งจากนั้นทดสอบด้วยjavac -version
และjava -version
ผล
เป็นที่น่าสังเกตอย่างหนึ่งว่า JDK นั้นจะมี JRE มาให้อยู่แล้ว แล้วเราจะติดตั้ง JRE เพียวๆแยกไว้ทำไมตั้งแต่แรก?
คำตอบที่ผมมีให้มือใหม่คือ ชุด JDK เป็นชุดสำหรับนักพัฒนาโปรแกรม ส่วนชุด JRE เพียวๆนั้นสำหรับผู้ใช้โปรแกรม เครื่อง server ที่จะใช้งานโปรแกรมก็จะติดตั้ง JRE เพียวๆนั่นแหละครับ เราจึงควรทดสอบโปรแกรมบน JRE ของเครื่อง server เป็นหลัก
Create Hello.java
เราจะสร้างโปรเจ็กต์ชื่อ hello ไว้ใน /home จากนั้นจะสร้างไฟล์ Hello.java เขียนข้อความ “Hello Wolrd!” จากนั้นแปล .java เป็น .class แล้วรัน .class อีกที
เรียบร้อย เราทำมันได้เห็นไหม ขอให้เชื่อมั่นในตนเอง ความรู้ต่างๆหาได้ในอินเตอร์เน็ต นำมาประกอบร่างสร้างเป็นงานของเรานะครับ
อ่านต่อ
อ้างอิง
https://conemu.github.io/en/ClearScreen.html