เรียนรู้ Docker กับ Oracle Database 12c

Phai Panda
5 min readMay 28, 2019

--

Oracle Database 12c Release 1 บน Docker เรียนรู้ด้วยตนเอง

ผมเป็นคนหนึ่งที่ไม่มีโอกาสได้เรียนวิชาที่เกี่ยวข้องกับระบบฐานข้อมูลยี่ห้อ Oracle เมื่อพบเจอคำถามที่คาดหวังคำตอบว่าเราจะรู้จัก ​Oracle บทสนทนานี้กลับเงียบงันไป

รู้จักกับ Docker

ไม่นานมานี้ผมเพิ่งรู้จักกับ Docker ผมเรียกมันว่า วาฬสีฟ้า และสัตว์ตัวนี้บนหลังของมันได้แบกตู้คอนเทนเนอร์เอาไว้ด้วยนะเออ

หนักไหมนะ? ไหวหรือเปล่า? ไม่เป็นไรใช่ไหม โอเค งั้นแบกต่อไปเถิด

ใช่แล้วครับ ผมกำลังจะนำเสนอวิธีการติดตั้ง Oracle Database 12c ด้วย Docker

สิ่งที่ผมมีตอนนี้
- MacBook Pro 2018 (ใครมี Windows ก็ทำได้นะ แต่ขอเป็นรุ่น Pro)
- Internet 100/50 (สาย fiber optic)

ดาวน์โหลด Docker

***สมัครสมาชิกเพื่อขอรับ username ยืนยัน email เลือก Download Desktop and Take Tutorial

ได้ตามนี้แสดงว่ามาถูกทางแล้ว

มือใหม่ถามว่าทำไมต้อง Docker? คำตอบของผมคือ มันเป็นทางเลือกหนึ่งในการติดตั้งโปรแกรมเท่านั้นเอง (ตอบง่ายไปไหม) และจากประสบการณ์ที่ผมพยายามติดตั้ง Oracle Database 11g ด้วยตนเองเมื่อครั้งยังเยาว์บนเครื่อง Windows ผลปรากฏว่า error บานเบอะ

งั้นดูคำตอบจริงจังกัน ทำไมต้อง Docker?

Docker เป็น Container Platform สองคำนี้แยกกันตามความเห็นของผมอย่างนี้ครับ
- คำว่า Container คือเซตของโปรแกรมต่างๆที่ได้รวมเอาระบบปฏิบัติการ (Operating System ย่อว่า OS) ไว้ด้วย (ก็ต้องมีคนมาจับคู่แหละ ว่าโปรแกรมนั้นเวอร์ชันนี้คู่กับโปรแกรมนี้เวอร์ชันนั้นบน OS นั่นนี่)
- ส่วนคำว่า ​Platform คือเป็นเจ้า (รายใหญ่ ผู้ควบคุมดูแลไรงี้)

ตัวอย่างเช่น Game Platform ฮั่นแน่ นึกออกไหม มีอะไรบ้าง
- Steam มา
- Origin ก็มา พวกนี้ทำหน้าที่อะไร? ทำหน้าที่ขายเกมที่รับประกันว่าจะสามารถเล่นได้บนเครื่อง Windows หรือเครื่อง MacOS เป็นต้น นี่ไง game platform

กลับมาที่ Docker เราสามารถหา Container ที่ต้องการได้ ณ สถานที่ที่ Docker ให้เรียกว่า Registry แต่เดี๋ยวก่อน ที่ที่ว่านี้ไม่มีหรอกนะ Container มีก็แต่ Docker Image

ดังนั้นพูดใหม่ งานของเราคือหา Docker Image ที่ต้องการจาก Registry ใดๆสักแห่งหนึ่ง โหลดมาเก็บไว้ที่เครื่องก่อน แล้วค่อยบอกให้ Docker สร้าง Container จาก Image เจ้ากรรมนั่น จบข่าว

Docker Registry หรือ Registry ตัวแม่ ใหญ่ๆเลยมีชื่อเรียกว่า Docker Hub

ปัญหามาอีก Docker Image มันใหญ่ ขนกันผ่าน internet นี่จะลำบากไปไหม มีแบบเล็กๆโหลดมาเก็บก่อน แล้วค่อยสร้างเป็น Container มีไหม คำตอบ มี เรียกว่า Dockerfile

Dockerfile คือ Text File ธรรมดาที่ได้ระบุวิธีการและคำสั่งทั้งหมดเพื่อจะสร้าง Docker Image ขึ้นมา ณ เครื่องของเรานี่แหละ (ตกใจล่ะสินะ)

ดังนั้นพูดใหม่ งานของเราคือหา Docker Image หรือไม่ก็ Dockerfile มาสร้างเป็น Docker Image ก่อน แล้วค่อยบอกให้ Docker สร้าง Container จาก Image เจ้ากรรมนั่น จบข่าว ดูรูปสิ

https://www.pawangaria.com/post/docker/what-is-docker-container/

เมื่อวาฬ Docker มันเป็น Platform ของประดา Container แล้ว การที่มันมีตู้คอนเทนเนอร์ไว้บนหลังจึงไม่แปลกอะไร

จงแบกต่อไปเถิด…

รู้จักกับ Oracle Database Dockerfile

เราอยากได้ Oracle Database มาทำงานบน Docker เราต้องหาไม่ Docker Image ก็ Dockerfile

โอเค ตามชาวบ้านเขาไป นี่คือ GitHub ที่ Oracle เอา Dockerfile ของเขามาฝากไว้
https://github.com/oracle

จัดว่าแจ่มสำหรับสิ่งที่ Oracle ทำไว้ให้ เราอยากติดตั้งฐานข้อมูลใช่ไหม งั้นมองหา

Oracle Database (คลิกแล้วดูรูปด้านล่างประกอบ)

ภาพประกอบนี้อาจเปลี่ยนแปลงไปตามกาลเวลา

เขาได้เตรียม Dockerfiles กับ Samples ไว้ให้ โดยเฉพาะ Samples นี่เป็นประโยชน์มาก ไว้ดูว่าจะบอกกับ Docker ให้รัน Image เป็น ​Container ได้อย่างไร

จงเข้าไปใน dockerfiles จะพบกับสิ่งเหล่านี้

ภาพประกอบนี้อาจเปลี่ยนแปลงไปตามกาลเวลา

มันคือเวอร์ชันของ Oracle Database ที่เราสนใจ มีอยู่ 2 เวอร์ชันที่ผมลองทำแล้วได้ผล คือ
- 12.1.0.2 มันคือ Oracle Database 12c Release 1 (เป้าหมายของเรา)
- 12.2.0.1 มันคือ Oracle Database 12c Release 2

ทีนี้ตรงไปหา Google พิมพ์
oracle database download

หรือกดที่นี่

​*** อย่าลืมสมัครสมาชิก แล้วเลือก ยอมรับ มันถึงจะให้โหลด

ภาพประกอบนี้อาจเปลี่ยนแปลงไปตามกาลเวลา

เห็นเวอร์ชัน ณ dockerfiles เอามาเทียบกับเวอร์ชันที่อยู่บนภาพข้างต้นนี้แล้วใช่ไหม ใช่แล้วครับ คุณคิดถูกแล้ว เราจะต้องเลือกเวอร์ชันให้ตรงกัน ซึ่งขณะนี้เป้าหมายของเราคือ Oracle Database 12c Release 1 มันก็คือ 12.1.0.2

เลือกระหว่างรุ่น Standard หรือ Enterprise Edition? อื่ม…ตามใจเลย
ผมเลือก Standard Edition ก่อนก็แล้วกันนะ ทำได้แล้วค่อยลองแบบ Enterprise บ้าง

ส่วน ​OS ก็ขอเป็น Linux บนสถาปัตยกรรม x86–64 ครับ

โหลดทั้งสองไฟล์มาเก็บไว้

เตรียมพร้อมประกอบร่าง

ด้วยขั้นตอนต่อไปนี้

1.ใช้ Git ดูด Oracle Docker Images มา ไว้ไหนก็ตามใจ

git clone https://github.com/oracle/docker-images.git

2.เราจะได้ folder ชื่อ docker-images จาก folder นี้ตรงเข้าไปยัง folder ด้านในชื่อ dockerfiles

docker-images/OracleDatabase/SingleInstance/dockerfiles

เลือกเลขเวอร์ชัน 12.1.0.2 แล้วนำ Oracle Database ที่เพิ่งโหลดมาทั้งสองไฟล์วางลงไป (ไม่ต้องแกะ .zip)

3.ที่ Terminal หรือ Command Prompt ให้แน่ใจว่าเรายังอยู่ตรงนี้

docker-images/OracleDatabase/SingleInstance/dockerfiles

ซึ่งจะต้องมองเห็นไฟล์ที่ชื่อ buildDockerImage.sh หากเห็นแล้วจึงร่ายมนต์ สั่ง buildDockerImage.sh ทำงาน โดยขอดู help ก่อน พิมพ์ไปว่า

./buildDockerImage.sh -h

เราจะได้สิ่งนี้ (รายละเอียดของ options ที่จะส่งไปสร้าง Docker Image)

Usage: buildDockerImage.sh -v [version] [-e | -s | -x] [-i] [-o] [Docker build option]Builds a Docker Image for Oracle Database.Parameters:-v: version to buildChoose one of: 11.2.0.2  12.1.0.2  12.2.0.1  18.3.0  18.4.0  19.3.0-e: creates image based on 'Enterprise Edition'-s: creates image based on 'Standard Edition 2'-x: creates image based on 'Express Edition'-i: ignores the MD5 checksums-o: passes on Docker build option* select one edition only: -e, -s, or -x

คือต้องสั่ง script นี้สร้าง Docker Image ของ Oracle Database (บน Linux) จาก Dockerfile ที่ได้ตระเตรียมไว้นั่นแหละ พร้อมแล้วพิมพ์

./buildDockerImage.sh -v 12.1.0.2 -s -i

คอยสักพักตามความแรงของเครื่อง และจนกว่าจะได้เห็นถ้อยคำเหล่านี้

Oracle Database Docker Image for 'se2' version 12.1.0.2 is ready to be extended:--> oracle/database:12.1.0.2-se2Build completed in 376 seconds.

error อื่นใดไม่มีนะ นอกเหนือจากนี้อย่าได้ถามข้าพเจ้า เพราะไม่มีคำตอบอย่างเป็นทางการให้ ถ้ามี ให้ลองไปอ่าน log ดูก่อน ไม่รู้เรื่องค่อยว่ากัน
เมื่อ xxx แทนด้วย ปี-เดือน-วัน_เวลา เปิด log ได้ที่

/opt/oracle/oraInventory/logs/silentInstallxxx.log

4.ดูว่าเราได้ Docker Image เจ้ากรรมหรือยัง พิมพ์

docker images

ผลลัพธ์

oracle/database
12.1.0.2-se2
58c68f87b530
5 minutes ago
5.03GB

ได้ Image มาแล้วชื่อ oracle/database เวอร์ชัน 12.1.0.2-se2 ไอดี 58c68f87b530 สร้างเมื่อ 5 minutes ago และมีขนาด 5.03GB

5.สั่ง Docker ทำ Image ดังกล่าวให้กลายเป็น Container เพื่อจะได้ใช้งานมัน ก่อนอื่นให้กลับไปที่

docker-images/OracleDatabase/SingleInstance/samples/customdb

เราจะพบกับไฟล์ชื่อ README.md เปิดดูเลยครับ

# How to start the containerFirst make sure you have built **oracle/database:12.2.0.1-ee** (you can substitue with the image of your choice).Now start the container as follow:docker run --name <container name> \-p 1521:1521 -p 5500:5500 \-e ORACLE_SID=<your SID> \-e ORACLE_PDB=<your PDB name> \-v <host mount point>:/opt/oracle/oradataoracle/database:12.2.0.1-ee

เห็นไหม เราพบสิ่งที่ต้องการแล้ว คำสั่งปลุกเสกให้ Image กลายเป็น Container ผมเลือกใส่ขั้นต้นเพียงเท่านี้ก่อน
- จะตั้งชื่อ container นี้ว่า orcl_12c_r_1
- ระบุ port ภายนอกคู่กับภายใน (นอก : ใน)
- Oracle System ID เป็น panda
- และ Image ที่จะนำมาทำงานคือ oracle/database เวอร์ชัน 12.1.0.2-se2

docker run --name orcl_12c_r_1 -p 1521:1521 -p 5500:5500 -e ORACLE_SID=panda oracle/database:12.1.0.2-se2

อย่างแรกเลยคือมันจะ generate password มาให้ (แต่ละคนไม่เหมือนกันมั้ง?) อย่างผมได้เป็น HF0BGqCU350=1

ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: HF0BGqCU350=1

รอ รอ รอ 38% 42% รอต่อไป กระทั่ง

#########################DATABASE IS READY TO USE!#########################

6.ตรวจดูว่า Container ที่ได้หน้าตาเป็นอย่างไร เปิด Terminal ใหม่แล้วพิมพ์

docker ps -a

ผลลัพธ์

07782ec5bece        
oracle/database:12.1.0.2-se2
"/bin/sh -c 'exec $O…"
12 minutes ago
Up 12 minutes (healthy)
0.0.0.0:1521->1521/tcp, 0.0.0.0:5500->5500/tcp
orcl_12c_r_1

ที่ status คำว่า Up นี้สำคัญมาก หากเป็นคำอื่นแสดงว่า Container ยังทำงานไม่ได้ (แต่สร้างได้แล้ว)

7.หาเครื่องมืออย่าง Oracle SQL Developer มาช่วยจัดการฐานข้อมูลดีกว่า ใช้ Terminal ก็ได้นะ แต่ผมขอผ่านก่อน

ค้น Google
oracle sql developer download

โหลด ติดตั้งแล้วเปิดขึ้นมา กำหนดค่า
- Name คือ ชื่อ Connection Name แล้วแต่ชอบ ใส่ test
- Username ตอนนี้มี SYS, SYSTEM และ PDBADMIN เลือก SYSTEM ไปก่อน
- Password ตาม generate
- SID ใส่ตามค่าที่ได้ระบุไว้ ใส่ panda
- กดปุ่ม Test ต้อง Success

ถ้ามันถาม Password อีก ก็ใส่ไปอีกรอบ

เย้ ใช้ได้แล้ว

เป็นอันว่า Oracle Database 12c Release 1 บน Docker เรียนรู้ด้วยตนเอง ติดตั้งและดูเหมือนจะใช้งานได้แล้ว (ดีใจ)

โอกาสหน้าของเรื่องนี้ ผมก็จะมาลุย Oracle Database 12c Release 1 นี้ เอาให้มันรู้เรื่อง ส่งแรงใจมาเชียร์ด้วยนะครับ :)

--

--

No responses yet