Nov 10, 55677

สร้าง Docker image go oracle & reflex เพื่อใช้ในการ Develop API Go

Golang & oracle client by Docker

การสร้าง 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
  1. สร้าง 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
  1. สร้าง Docker Image: ดำเนินการสร้าง Docker image โดยใช้คำสั่ง docker build และกำหนดชื่อ image ว่า golang-dev-oracle
docker build -t golang-dev-oracle .
  1. สร้างไฟล์ 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 ./"
  1. รันคำสั่ง 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

คลิก zap บทความนี้