การสร้าง Dockerfile, Image, และ Docker Compose configuration ในการตั้งค่าและรัน Service Docker สำหรับการพัฒนาแอปพลิเคชัน Go ที่ต้องการเชื่อมต่อกับฐานข้อมูล Oracle Database ดังนี้:
- FROM golang:1.18.0: กำหนด image หลักของ Docker ในกรณีนี้ใช้ Golang version 1.18.0 เป็น image หลัก
- รันคำสั่งในการติดตั้งเครื่องมือที่จำเป็นเพื่อการสร้างและทดสอบแอปพลิเคชัน Go โดยใช้ apt-get
- ดาวน์โหลดและติดตั้ง Oracle Instant Client เพื่อให้แอปพลิเคชันสามารถเชื่อมต่อกับ Oracle Database ได้
- กำหนดตัวแปรสภาพแวดล้อมที่เกี่ยวข้องกับ Oracle Instant Client
- สร้าง Dockerfile
FROM golang:1.18.0
RUN apt-get update && apt-get install -y unzip pkg-config curl
RUN cd /tmp && \
curl -o instantclient-basiclite.zip https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip -SL && \
unzip instantclient-basiclite.zip && \
mv instantclient*/ /usr/lib/instantclient && \
rm instantclient-basiclite.zip && \
ln -s /usr/lib/instantclient/libclntsh.so.19.1 /usr/lib/libclntsh.so && \
ln -s /usr/lib/instantclient/libocci.so.19.1 /usr/lib/libocci.so && \
ln -s /usr/lib/instantclient/libociicus.so /usr/lib/libociicus.so && \
ln -s /usr/lib/instantclient/libnnz19.so /usr/lib/libnnz19.so && \
ln -s /usr/lib/libnsl.so.2 /usr/lib/libnsl.so.1 && \
ln -s /lib/libc.so.6 /usr/lib/libresolv.so.2 && \
ln -s /lib64/ld-linux-x86-64.so.2 /usr/lib/ld-linux-x86-64.so.2
ENV ORACLE_BASE=/usr/lib/instantclient
ENV LD_LIBRARY_PATH=/usr/lib/instantclient
ENV TNS_ADMIN=/usr/lib/instantclient
ENV ORACLE_HOME=/usr/lib/instantclient
WORKDIR /app
COPY go.mod ./
COPY go.sum ./
RUN go mod download
RUN go install github.com/cespare/reflex@latest
- สร้าง Docker Image: ดำเนินการสร้าง Docker image โดยใช้คำสั่ง docker build และกำหนดชื่อ image ว่า golang-dev-oracle
docker build -t golang-dev-oracle .
- สร้างไฟล์ docker-compose.yaml: Docker Compose เป็นเครื่องมือที่ช่วยในการกำหนดและรันหลาย Sevice Docker พร้อมกัน ในไฟล์ docker-compose.yaml ที่คุณสร้าง
- กำหนดเวอร์ชันของ Docker Compose
- กำหนด services: api ซึ่งใช้ image ที่คุณสร้างขึ้น (golang-dev-oracle)
- กำหนดชื่อคอนเทนเนอร์เป็น api
- กำหนดให้คอนเทนเนอร์ restart อัตโนมัติเมื่อมีข้อผิดพลาดหรือการล้มเหลว
- กำหนดโฟลเดอร์โปรเจ็กต์ของแอปพลิเคชันให้แชร์กับคอนเทนเนอร์ใน /app
- กำหนดคำสั่งที่ควรใช้เมื่อคอนเทนเนอร์เริ่มทำงาน ในที่นี้ใช้ reflex เพื่อตรวจสอบการเปลี่ยนแปลงในไฟล์ Go และรันโปรแกรมใหม่โดยอัตโนมัติ
version: '3.5'
services:
api:
image: golang-dev-oracle
container_name: api
restart: always
volumes:
- ./:/app
command: reflex -r "\.go$$" -s -- sh -c "go run ./"
- รันคำสั่ง docker-compose up: ทำการรัน Service Docker ตามคอนฟิกที่ระบุใน docker-compose.yaml คอนเทนเนอร์ api จะถูกสร้างขึ้นโดยใช้ Docker image golang-dev-oracle และโปรแกรมของคุณจะถูกเรียกใช้โดย reflex เพื่อรันแอปพลิเคชัน Go และตรวจสอบการเปลี่ยนแปลงในโค้ดของคุณ
docker-compose up
ดังนั้น คุณสามารถแก้ไขไฟล์ main.go และเมื่อมีการบันทึกการเปลี่ยนแปลง reflex จะทำการรันโปรแกรมใหม่โดยอัตโนมัติและคอนเทนเนอร์ Docker จะรีสตาร์ทตามที่กำหนดใน docker-compose.yaml ทำให้คุณสามารถพัฒนาแอปพลิเคชัน Go ของคุณได้อย่างรวดเร็วและสะดวกมากขึ้นในสภาพแวดล้อม Dockerized ที่มีการเชื่อมต่อกับ Oracle Database
