สวัสดีครับ Blog ตอนนี้น่าจะเป็น Blog ที่เกี่ยวกับ Docker อันแรกมั้งๆ ปกติผมจะใช้ Virtual Machine ในการทำงานมากกว่าครับ โดยสำหรับผมได้เอา Docker Image ของ DB2 มาใช้งานครับ โดยจะเป็น Version 11 Fixed Pack 3 ซึ่งเมื่อผม pull ลงมาแล้ว ปรากฏว่าลองอ่าน Document แล้ว ตัว Docker Image มันมีแต่ user db2inst1 เป็นหลักครับ แต่ Database ที่ผมต้องการจะเอามาขึ้นในส่วนของ Application มันต้องการใช้ มี
- username bonanza password bonanza
- username invest password invest
การแก้ไขมันมี 2 วิธีนะ
- แบบที่ 1 : หลังจาก docker run ไปแล้ว เข้า terminal ของ container ด้วยคำสั่ง docker exec -it <CONTAINER_ID> bash เช่น docker exec -it 4484a421c205 bash ครับ
- แล้วเขียนคำสั่งเพิ่ม user กำหนด password ครับ
- วิธีนี้มีข้อเสีย คือ ถ้าต้องการสร้าง Container ใหม่ก็ต้องเข้าไปไล่ Run Script ให้
- แบบที่ 2 : ทำ dockerfile ดีกว่า โดยผมทำ image file แยกออกมาอีกอันเลย เอาไว้ใช้งานในองค์กรครับ เอาไปฝากไว้ใน Nexus ก็ได้ครับ (ผมเลือกวิธีนี้นะครับ มาเริ่มกัน)
- ก่อนอื่นสร้าง Folder ก่อนเลย
- สร้าง dockerfile ขึ้นมา โดยเจ้าตัว Docker File มัน คือ ชุดคำสั่ง ที่เราใช้ในเพิ่มความสามารถไปครับ
- จากโจทย์ที่ผมต้องการ ผมได้สร้าง dockerfile ตามนี้ครับ
FROM store/ibmcorp/db2_developer_c:11.1.3.3a-x86_64 LABEL maintainer="Chatri Ngambenchawong" RUN useradd -ms /bin/bash bonanza RUN echo "bonanza:bonanza" | chpasswd RUN useradd -ms /bin/bash invest RUN echo "invest:invest" | chpasswd RUN yum -y reinstall glibc-common RUN sudo localedef -f TIS-620 -i th_TH th_TH%MCEPASTEBIN%
- มาดูในรายละเอียดครับ ของ dockerfile ครับ
- FROM ผมได้ Extend เพิ่มความสามารถมาจาก image เดิมของ DB2 ครับ
- LABEL ใส่อะไรก็ได้ เป็น infomation แต่ต้องอยู่ในรูปแบบ key:value
- RUN ใส่คำสั่งที่ต้องการ execute ครับ
- ตรงนี้ผมจะเพิ่มคำสั่งสำหรับเพิ่ม user bonanza และ user invest ครับ
- และส่วนถัดมา ผมเพิ่มคำสั่งที่จำเป็นสำหรับการติดตั้งภาษาไทย TIS-620 ลงใน RedHat/CentOS ครับ
- ลองรันครับ ด้วยคำสั่ง docker build -t "invdb211:11fp3" . ครับ
- ของผมมีการเพิ่ม -t "invdb211:11fp3" เพื่อกำหนด Repository : Tag ให้เรียกใช้ง่ายๆครับ
- ส่วน . อันนี้หมายถึงว่า dockerfile ของผมมันอยู่ใน Folder ที่กำหนดแล้วครับ ถ้า dockerfile อีกที่ path อื่นก็ใช้ path ลงไปครับ
- ระหว่าง Build มี Log แสดงให้เห็นครับ
Step 1/6 : FROM store/ibmcorp/db2_developer_c:11.1.3.3a-x86_64 ---> 18585aea3e7b Step 2/6 : LABEL maintainer="Chatri Ngambenchawong" ---> Running in 7c1bad3fa83b Removing intermediate container 7c1bad3fa83b ---> a9fbe0b892fb Step 3/6 : RUN useradd -ms /bin/bash bonanza ---> Running in 7bd11b257970 Removing intermediate container 7bd11b257970 ---> 630236a8b302 Step 4/6 : RUN echo "bonanza:bonanza" | chpasswd ---> Running in d0f38091cb95 Removing intermediate container d0f38091cb95 ---> d95994738b43 Step 5/6 : RUN useradd -ms /bin/bash invest ---> Running in 37e4e90c4cd4 Removing intermediate container 37e4e90c4cd4 ---> a15e7ad12d96 Step 6/6 : RUN echo "invest:invest" | chpasswd ---> Running in 972788993cc8 Removing intermediate container 972788993cc8 ---> 10bd4f9421d9 Successfully built 10bd4f9421d9 Successfully tagged invdb211:11fp3
- บิ้วเสร็จลองมาดูว่ามี Image ที่พึ่งสร้างด้วยคำสั่ง docker images ครับ
- ลองเอา Image มาสร้าง Container ด้วยคำสั่ง docker run --name ERPPROD --restart=always --privileged --ipc=host -p 50003:50000 --env-file /home/adminping/ERPPROD/ERPPROD.env_list -v /home/adminping/ERPPROD/:/database 10bd4f9421d9 ครับ
- --ipc=host -p 50003:50000 map Port Host = 50003 กับ Port ของ Container 50000
- --env-file ใส่ Config สำหรับ Initial Container ครับ
- -v /home/adminping/ERPPROD/:/database map Volume จาก Host ที่ Path /home/adminping/ERPPROD/ โดยใน Container จะรู้จักชื่อโพลเดอร์ /database
- 10bd4f9421d9 Id ของ Image ครับ
- มองลองตรวจกันว่า user ที่ผมเพิ่มสร้างไปมีใน DB2 หรือป่าว โดยเข้าไปใน Docker Image ของ DB2 ด้วยคำสั่ง docker exec -it <CONTAINER_ID> bash เช่น docker exec -it 4484a421c205 bash ครับ จากนั้นลอง list user ด้วยคำสั่ง cut -d: -f1 /etc/passwd ครับ ผลลัพธืที่ได้ต้องมี User
- bonanza
- invest
สำหรับวิธีที่ 2 นั้นเห็นว่ามันมีความเป็น Automation มากขึ้นครับ และในตัว dockerfile จริงๆ เราสามารถเขียนให้มันไปอ่าน Backup DB ให้ Path ที่ Map ไว้ แล้วให้มัน Restore ต่อได้เลยก็ได้ครับ ^__^
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.