반응형
도커파일
# base image 공식 Perl 5.34 런타임이 이미 설치된 리눅스 이미지에서 시작
FROM perl:5.34
# Install system dependencies and build tools 설치 패키지 목록
# 패키지 목록 갱신 후 필수 패키지 설치, -y: 자동으로 yes 선택 (CI/도커 빌드 필수 옵션)
# wget: 외부 파일 다운로드 도구, unzip: 압축 해제 도구(Oracle Instant Client는 zip 파일로 배포됨),
# libaio1: Oracle Instant Client 설치에 필요한 런타임 라이브러리(비동기 I/O 관련 라이브러리), libclntsh.so 로딩 단계에서 필요
# libdbi-perl: Perl DBI(DataBase Interface) 모듈, 모든 Perl DB 드라이버(DBD::Oracle, DBD::Pg)의 공통 인터페이스, DB접속 인터페이스
# build-essential: gcc, make 등 컴파일 도구 모음, CPAN 모듈(DBD::Oracle 등)은 C 코드 컴파일이 필요하므로 필수
# libdbd-pg-perl: PostgreSQL용 Perl 드라이버 모듈, Ora2Pg는 Oracle → PostgreSQL 변환 도구라서 Oracle 읽기 PostgreSQL 쓰기 둘 다 필요
# apt 캐시 삭제. 도커 이미지 용량 줄이기용 정석 마무리. 기능에는 영향 없음
RUN apt-get update && apt-get install -y \
wget \
unzip \
libaio1 \
libdbi-perl \
build-essential \
libdbd-pg-perl \
&& rm -rf /var/lib/apt/lists/*
# Setup Oracle Instant Client(Oracle DB에 접속)를 설치하기 위한 준비
# 로컬에 있는 Oracle Instant Client zip 파일들을 컨테이너의 /tmp/에 복사, Oracle 라이선스 때문에 wget으로 직접 못 받음. 그래서 사용자가 직접 zip 파일을 준비해야 한다
# Oracle Client 설치 위치 생성 (관례적으로 많이 쓰는 경로)
# Basic 패키지 압축 해제 (실제 실행에 필요한 .so 라이브러리들이 들어 있음)
# SDK 패키지 압축 해제 (실제 실행에 필요한 .so 라이브러리들이 들어 있음. DBD::Oracle 컴파일에 필요한 헤더 파일 포함)
# Basic과 SDK의 .so 파일들을 /usr/lib/instantclient/에 복사
# 임시 파일 정리. 이미지 용량 감소 목적
# /usr/lib/instantclient/libclntsh.so를 /usr/lib/instantclient/libclntsh.so로 심볼릭 링크 생성 : Oracle 라이브러리는 보통 libclntsh.so.21.1 같은 버전명이 붙어 있음. 많은 프로그램이 libclntsh.so를 찾는다(DBD::Oracle 포함). 찾을 수 있게 심볼릭 링크를 생성
COPY instantclient-*-linux.x64-*.zip /tmp/
RUN mkdir -p /usr/lib/instantclient \
&& unzip /tmp/instantclient-basic-linux.x64-*.zip -d /tmp/ic_basic \
&& unzip /tmp/instantclient-sdk-linux.x64-*.zip -d /tmp/ic_sdk \
&& cp -r /tmp/ic_basic/instantclient_*/* /usr/lib/instantclient/ \
&& cp -r /tmp/ic_sdk/instantclient_*/* /usr/lib/instantclient/ \
&& rm -rf /tmp/ic_basic /tmp/ic_sdk /tmp/*.zip \
&& find /usr/lib/instantclient -name "libclntsh.so.*" -exec ln -s {} /usr/lib/instantclient/libclntsh.so \;
# 런타임 시 공유 라이브러리 검색 경로 설정. Oracle 라이브러리를 찾게 하기 위한 필수 환경 변수
# Oracle 클라이언트 홈 경로 지정. 일부 Oracle 관련 도구/모듈이 이 값을 참조한다
ENV LD_LIBRARY_PATH=/usr/lib/instantclient
ENV ORACLE_HOME=/usr/lib/instantclient
# DBD::Oracle 모듈 설치, DBD::Oracle은 C 코드 컴파일이 필요하므로(Perl 모듈이므로) CPAN을 사용하여 설치 (apt로 설치하는 DBD::Oracle은 버전/의존성 이슈가 잦음)
# Oracle Instant Client + SDK가 설치된 상태에서 DBD::Oracle을 직접 컴파일 + 설치. 이 단계에서 Oracle 연동이 제대로 되는지 판가름 난다
RUN cpanm DBD::Oracle
# 본체 설치. Ora2Pg 버전 24.3 설치, 버전 업그레이드 시 한 줄만 바꾸면 됨
# Ora2Pg 소스 코드 다운로드
# tar.gz 압축 해제
# 소스 디렉터리로 이동
# Makefile.PL 실행: Perl 모듈 빌드 설정 생성. Makefile을 만들어준다
# make && make install: 컴파일 + 설치. 결과적으로 ora2pg 실행 파일이 시스템에 설치됨
# 소스 디렉터리 이동, 소스 및 압축 파일 삭제. 역시 이미지 슬림화 목적
ENV ORA2PG_VERSION 24.3
RUN wget https://github.com/darold/ora2pg/archive/v${ORA2PG_VERSION}.tar.gz \
&& tar xzf v${ORA2PG_VERSION}.tar.gz \
&& cd ora2pg-${ORA2PG_VERSION} \
&& perl Makefile.PL \
&& make && make install \
&& cd .. && rm -rf ora2pg-${ORA2PG_VERSION} v${ORA2PG_VERSION}.tar.gz
# Working directory 설정. 컨테이너 기본 작업 디렉터리. 보통 ora2pg.conf, dump 파일, 변환 결과 SQL, 로그 파일 이런 것들이 저장되기 때문에 이런것들을 /data에 마운트해서 사용한다
WORKDIR /data
# Entry point 설정. 컨테이너 실행 시 기본 명령어. ora2pg 실행
# 즉, 이 이미지는 [docker run ora2pg-image -c ora2pg.conf] 이렇게 쓰면 내부적으로: [ora2pg -c ora2pg.conf] 를 실행하는 것이다
ENTRYPOINT ["ora2pg"]
# 이 도커파일은 Perl 기반 Ora2Pg를 Oracle Instant Client와 함께 빌드하여, Oracle → PostgreSQL 마이그레이션을 즉시 실행 가능한 단일 컨테이너로 만드는 실무형 이미지반응형
'실험실 > db이행' 카테고리의 다른 글
| ora2pg 작동원리 (0) | 2026.01.22 |
|---|---|
| 도커파일성격 (0) | 2026.01.22 |
| postgreSQL 컨테이너로 올릴지 (0) | 2026.01.20 |
| 서버구축실패 요약 (0) | 2026.01.20 |
| 서버환경 이슈 (0) | 2026.01.20 |
댓글