본문 바로가기
실험실/db이행

도커파일성격

by 죄니안죄니 2026. 1. 22.
반응형

이 도커파일의 핵심을 한 문장으로 먼저 잡자면 이거다.

이 이미지는 “서버”가 아니라 “도구(tool)” 컨테이너다.
외부에서 접속해 붙는 대상이 아니라, 외부에서 명령과 데이터를 “넣어주고 실행 결과를 가져오는” 구조다.

이걸 전제로 두고, 원리 → 접근 방식 → 데이터 흐름 → 명령 전달 방식 순서로 살펴보자


1️⃣ 이 컨테이너는 왜 포트가 없나? (서버 아님)

이 Dockerfile을 보면 이런 게 없다.

  • EXPOSE 8080
  • 웹 서버
  • 데몬 프로세스
  • 백그라운드 서비스

대신 마지막이 이거다.

ENTRYPOINT ["ora2pg"]
 

이 뜻은 명확하다.

  • 컨테이너가 뜨면
  • ora2pg 명령을 실행하고
  • 명령이 끝나면 컨테이너도 끝난다

즉,

  • ❌ 외부에서 HTTP로 접속하는 구조 아님
  • ❌ telnet, curl, API 호출 대상 아님
  • ✅ 로컬에서 docker run으로 실행하는 CLI 도구

2️⃣ “외부에서 접속”이 아니라 “외부에서 실행”한다

이 이미지에 접근하는 유일한 방법은 이거다.

docker run [옵션] ora2pg-image [ora2pg 옵션]

예를 들면:

docker run --rm ora2pg-image --version

이건 내부적으로 이렇게 동작한다.

docker run
 → 컨테이너 생성
 → ENTRYPOINT 실행 (ora2pg)
 → --version 전달
 → 결과 stdout 출력
 → 컨테이너 종료
 

접속이라는 개념 자체가 없다.


3️⃣ 그럼 데이터는 어떻게 주고받나? (핵심)

데이터 교환 방식은 3가지뿐이다.

① 볼륨 마운트 (가장 중요)

docker run --rm \
  -v /host/data:/data \
  ora2pg-image \
  -c /data/ora2pg.conf

이 구조를 그림으로 풀면:

호스트 /host/data
 ├─ ora2pg.conf
 ├─ schema.sql
 └─ data.sql
        ↑
        │ (mount)
        ↓
컨테이너 /data
  • 컨테이너는 /data 디렉터리만 본다
  • 실제 파일은 호스트 파일
  • 결과 SQL도 호스트에 바로 생성

👉 이게 실무에서 99% 쓰는 방식이다.


② 표준 입출력 (stdout / stderr)

ora2pg는 기본적으로 결과를 stdout으로 뿌릴 수 있다.

docker run --rm ora2pg-image -t TABLE > result.sql
  • 컨테이너는 파일을 몰라도 됨
  • 결과는 호스트의 result.sql로 리다이렉트

CI/CD에서 자주 쓰는 방식이다.


③ 네트워크 (DB 연결용)

이 컨테이너는 서버를 열지는 않지만
외부 DB에는 접속한다.

컨테이너 → Oracle DB (1521)
컨테이너 → PostgreSQL DB (5432)

그래서 중요한 건 포트 오픈이 아니라 이거다.

--network host

또는

--network my-db-network

Oracle / Postgres가 있는 네트워크에 같은 Docker network로 붙여주는 것이 핵심이다.


4️⃣ 명령은 어떻게 전달되나? (ENTRYPOINT 원리)

Dockerfile:

ENTRYPOINT ["ora2pg"]

이 상태에서:

docker run ora2pg-image -c /data/ora2pg.conf -t TABLE

Docker는 내부적으로 이렇게 만든다.

ora2pg -c /data/ora2pg.conf -t TABLE

즉,

  • docker run 뒤에 붙는 모든 인자
  • ora2pg 명령의 인자

그래서 컨테이너 안으로 “접속”해서 명령을 치는 게 아니라
처음 실행할 때 이미 명령이 완성된다.


5️⃣ 컨테이너 내부를 직접 보고 싶을 때 (디버깅)

원래 용도는 아니지만, 디버깅은 가능하다.

docker run -it --entrypoint bash ora2pg-image

이렇게 하면:

  • ENTRYPOINT 무시
  • bash 실행
  • 내부 환경 확인 가능

실무에서는:

  • Oracle client 라이브러리 확인
  • DBD::Oracle 로딩 테스트
    이럴 때만 사용한다.

6️⃣ 전체 흐름을 한 번에 정리하면

실행 주체

  • ❌ 외부 사용자
  • ❌ 브라우저
  • ❌ 다른 서버
  • 운영자 / 배치 / CI / 쉘 스크립트

흐름

 
호스트
 ├─ ora2pg.conf
 ├─ docker run
 │
 ▼
컨테이너 생성
 ├─ Oracle DB 접속
 ├─ PostgreSQL DB 접속
 ├─ 데이터 변환
 ├─ SQL 생성
 ▼
결과를
 ├─ 볼륨(/data)
 └─ stdout
로 반환
 ▼
컨테이너 종료

7️⃣ 그래서 이 이미지의 “정체성”

이걸 서버처럼 생각하면 헷갈린다. 정확한 정의는 이거다.

이 도커 이미지는
“Oracle → PostgreSQL 마이그레이션을 자동화하기 위한
일회성 실행 도구(Executable Artifact)”다.

그래서:

  • 접근 ❌
  • 접속 ❌
  • 호출 API ❌
  • 실행 ✅
  • 결과 파일 ✅
반응형

'실험실 > db이행' 카테고리의 다른 글

Ora2Pg의 본질적인 실행 모델  (0) 2026.01.22
ora2pg 작동원리  (0) 2026.01.22
도커파일  (0) 2026.01.22
postgreSQL 컨테이너로 올릴지  (0) 2026.01.20
서버구축실패 요약  (0) 2026.01.20

댓글